Протокол сопряжения Google TV - ошибка рукопожатия SSL с Go (golang) - PullRequest
5 голосов
/ 05 декабря 2011

Я пишу пакет Go для протокола сопряжения Google TV. Но, похоже, у меня проблема с рукопожатием TLS.

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

Эта строка дает мне ошибку рукопожатия. Точное сообщение об ошибке: remote error: handshake failure. Если я попробую тот же хост / порт через curl, он также выдаст curl: (35) error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 предупреждение о сбое рукопожатия.

Есть идеи? Возможно, Google TV ожидает сертификат клиента? Я не видел ни одного упоминания о необходимости сертификата клиента.

Если кто-то хочет помочь разобраться, вот код: https://github.com/dustywilson/go-polo

Файл README содержит простой код для проверки. Вам нужно будет знать IP-адрес вашего окна Google TV, поскольку он не использует mDNS. Если вы (кто-то, кто-нибудь) запустили это, и вы получили другие результаты, дайте мне знать.

Я уже просмотрел код удаленного доступа к Google TV по адресу google-tv-remote . Более полезным является google-tv-pairing-protocol , который эквивалентен проекту Java / Android тому, что я делаю. Конечно, я уже вылил этот код. Я думаю, что это проблема либо с самим Go (маловероятно), либо проблема с пакетом Go TLS, который не знает, как читать сертификат Google TV (я знаю, что это была проблема год назад), либо проблема с моим кодом (обычно скорее всего, но я просто этого не вижу).

Кстати, я тестирую это на Logitech Revue, и у него есть самозаверяющий сертификат SSL. Это не укоренено или изменено никаким образом.

Мой полученный код будет, конечно, с открытым исходным кодом. Спасибо за помощь.

1 Ответ

2 голосов
/ 06 декабря 2011

Сертификаты клиента генерируются удаленным клиентом Java во время выполнения и сохраняются для будущего использования. Проверьте код на:

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

Возможно, вы столкнулись с недействительным сертификатом. Согласно коду вам нужен конкретный CN.

/ * Возвращает имя, которое должно использоваться в новом сертификате. * Формат: «CN = anymote / ПРОДУКТ / УСТРОЙСТВО / МОДЕЛЬ / уникальный идентификатор» * /

...