2011-12-05 16 views
5

Sto scrivendo un pacchetto Go per il protocollo di abbinamento TV di Google. Ma mi sembra di stare colpendo un problema con l'handshake TLS.Protocollo di accoppiamento TV Google - Errore di handshake SSL con Go (golang)

sock, err := tls.Dial("tcp", "10.8.0.1:9552", &tls.Config{InsecureSkipVerify: true}) 

Questa riga mi dà un errore di stretta di mano. Il messaggio di errore esatto è: remote error: handshake failure. Se provo lo stesso host/porta via curl, dà anche l'errore di handshake di avviso curl: (35) error:14094410:SSL routines:SSL3_READ_BYTES:sslv3.

Qualche idea? Forse la Google TV si aspetta un certificato cliente? Non ho visto alcun riferimento alla necessità di un certificato cliente ovunque.

Se qualcuno vuole contribuire a capirlo, ecco il codice: https://github.com/dustywilson/go-polo

Il file README ha il codice facile da controllare. Dovrai conoscere l'indirizzo IP per la tua casella di Google TV poiché questo non usa mDNS. Se tu (qualcuno, qualcuno) lo fai e ottieni risultati diversi, fammi sapere.

Ho già utilizzato il codice di Google TV Remote allo google-tv-remote. Uno più utile è google-tv-pairing-protocol che è l'equivalente progetto Java/Android per quello che sto facendo. Certo che ho già parlato di quel codice. Penso che sia un problema sia con Go stesso (improbabile), un problema con il pacchetto Go TLS non sapendo come leggere il certificato di Google TV (so che era un problema un anno fa), o un problema con il mio codice (in genere sarebbe probabilmente, ma non lo vedo).

A proposito, sto testando questo su un Logitech Revue e ha un certificato SSL autofirmato. Non è radicato o modificato in alcun modo.

Il mio codice risultante sarà open source, ovviamente. Grazie per l'assistenza.

risposta

2

I certificati client vengono generati dal client remoto Java in fase di runtime e memorizzati per uso futuro. Controllare il codice a:

http://code.google.com/p/google-tv-remote/source/browse/src/com/google/android/apps/tvremote/KeyStoreManager.java

Si potrebbe essere in esecuzione in un CERT valido. Secondo il codice, è necessario un CN specifico.

/* Restituisce il nome da utilizzare in un nuovo certificato. * Il formato è: "CN = anymote/PRODUCT/DEVICE/MODELLO/identificatore univoco" */

+0

Stai dicendo che mi aspetto di inviare un certificato cliente al momento della stretta di mano? Se così fosse, sarebbe sensato e dovrei comprarti un cucciolo per essere fantastico. In caso contrario, fammi sapere dove ho sbagliato nella mia comprensione di questo messaggio. –

+1

Non ho ancora eseguito l'intero processo, ma sembra che SSL sia richiesto durante la richiesta di pairing iniziale, per: http://code.google.com/p/google-tv-remote/source/browse/src /com/google/android/apps/tvremote/PairingActivity.java#240 – saxman

+0

Sto segnalando questo come la risposta per ora. Non l'ho verificato, ma mi sembra utile. In particolare sembra che sia necessario un cert SSL client, che non ho usato. Se in qualche modo risulta che non è il caso o qualcuno arriva con una risposta migliore o più completa, lo accennerò a loro. Ma apprezzo l'input e l'odio di lasciare questo in uno stato senza risposta dal momento che potrebbe essere risposta abbastanza bene, quindi ... ecco qua. Grazie. –

Problemi correlati