2011-12-05 12 views
5

Estoy escribiendo un paquete Go para el Google TV Pairing Protocol. Pero parece que estoy teniendo un problema con el saludo de TLS.Google TV Pairing Protocol - SSL Handshake Error con Go (golang)

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

Esa línea me da un error de handshake. El mensaje de error exacto es: remote error: handshake failure. Si pruebo el mismo host/puerto a través de curl, también da curl: (35) error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 falla de protocolo de alerta.

¿Alguna idea? ¿Google TV espera un certificado de cliente tal vez? No he visto ninguna referencia a la necesidad de un certificado de cliente en ninguna parte.

Si alguien quiere ayudar a resolverlo, aquí está el código: https://github.com/dustywilson/go-polo

El archivo README tiene el código fácil de comprobarlo. Deberá conocer la dirección IP de su TV Box de Google, ya que no utiliza mDNS. Si usted (alguien, cualquiera) ejecuta esto y obtiene resultados diferentes, hágamelo saber.

Ya he pasado por el código de Google TV Remote al google-tv-remote. Una más útil es google-tv-pairing-protocol que es el proyecto Java/Android equivalente a lo que estoy haciendo. Por supuesto, ya he echado sobre ese código. Creo que es un problema con el propio Go (poco probable), un problema con el paquete Go TLS que no sabe cómo leer el certificado de Google TV (sé que fue un problema hace un año) o un problema con mi código (normalmente ser más probable, pero simplemente no lo estoy viendo).

Por cierto, estoy probando esto en Logitech Revue y tiene un certificado SSL autofirmado. No está rooteado o modificado de ninguna manera.

Mi código resultante será de código abierto, por supuesto. Gracias por la asistencia.

Respuesta

2

Los certificados de cliente son generados por el cliente remoto de Java en tiempo de ejecución y almacenados para su uso futuro. Salida del código en:

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

Usted puede ser que funcione en un certificado válido. De acuerdo con el código, necesita un CN específico.

/* Devuelve el nombre que se debe usar en un nuevo certificado. * El formato es: "CN = anymote/PRODUCTO/DISPOSITIVO/MODELO/identificador único" */

+0

¿Está diciendo que espera que envíe un certificado de cliente en el momento del apretón de manos? Si es así, eso tendría sentido y debería comprarte un cachorro por ser increíble. Si no, avíseme en qué me equivoqué al comprender este mensaje. –

+1

Todavía no he recorrido todo el proceso, pero parece que se requiere SSL durante la solicitud de sincronización inicial, por: http://code.google.com/p/google-tv-remote/source/browse/src /com/google/android/apps/tvremote/PairingActivity.java#240 – saxman

+0

Estoy marcando esto como la respuesta por ahora. No lo he verificado, pero parece útil. En particular, parece que se necesita un certificado SSL del cliente, que no usé. Si de alguna manera eso no es el caso o si alguien responde mejor o más, se lo cambiaré. Pero aprecio la entrada y odio dejar esto en un estado sin respuesta, ya que podría ser respondido lo suficientemente bien, así que ... aquí tienes. Gracias. –