2011-12-05 13 views
5

Piszę pakiet Go dla protokołu Google TV Pairing Protocol. Ale wydaje mi się, że mam problem z uzgadnianiem TLS.Google Parowanie Protocol Protocol - Błąd uzgadniania SSL z Go (golang)

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

Ta linia daje błąd związany z handshake. Dokładny komunikat o błędzie to: remote error: handshake failure. Jeśli spróbuję tego samego hosta/portu za pośrednictwem curl, spowoduje to również niepowodzenie uwierzytelnienia curl: (35) error:14094410:SSL routines:SSL3_READ_BYTES:sslv3.

Wszelkie pomysły? Czy Google TV może oczekiwać certyfikatu klienta? Nie widziałem żadnych odniesień do potrzeby posiadania certyfikatu klienta w dowolnym miejscu.

Jeśli ktoś chce pomóc zrozumieć to, oto kod: https://github.com/dustywilson/go-polo

Plik README zawiera łatwe kod to sprawdzić. Będziesz musiał znać adres IP swojego boxu Google TV, ponieważ nie używa on mDNS. Jeśli Ty (ktoś, ktoś) prowadzisz to i otrzymujesz inne wyniki, daj mi znać.

Przeszedłem już przez zdalny kod Google TV pod numerem google-tv-remote. Bardziej przydatnym jest google-tv-pairing-protocol, który jest równoważnym projektem Java/Android do tego, co robię. Oczywiście, że już wylałem ten kod. Myślę, że jest to problem związany zarówno z samym Go (prawdopodobnie), problemem z pakietem Go TLS, który nie wie, jak odczytać certyfikat Google TV (wiem, że to był problem rok temu), lub problem z moim kodem (zazwyczaj najprawdopodobniej, ale ja po prostu tego nie widzę).

Nawiasem mówiąc, testuję to w programie Revit firmy Logitech i mam samopodpisany certyfikat SSL. Nie jest w żaden sposób zrootowany ani zmodyfikowany.

Mój wynikowy kod będzie oczywiście open source. Dzięki za pomoc.

Odpowiedz

2

Certyfikaty klientów są generowane przez klienta zdalnego Java w czasie wykonywania i przechowywane do wykorzystania w przyszłości. Sprawdź kod na:

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

Możecie być uruchomiony w nieprawidłowym cert. Zgodnie z kodem potrzebny jest określony CN.

/* Zwraca nazwę, która ma być użyta w nowym certyfikacie. * Format: "CN = anymota/PRODUKT/URZĄDZENIE/MODEL/unikalny identyfikator" */

+0

Czy chcesz, abym wysłał certyfikat klienta w czasie uzgadniania? Jeśli tak, to ma sens i powinienem kupić ci szczeniaka za bycie wspaniałym. Jeśli nie, daj mi znać, gdzie popełniłem błąd w zrozumieniu tej wiadomości. –

+1

Nie przeszedłem jeszcze całego procesu, ale wygląda na to, że protokół SSL jest wymagany podczas początkowego żądania parowania, za: http://code.google.com/p/google-tv-remote/source/browse/src /com/google/android/apps/tvremote/PairingActivity.java#240 – saxman

+0

Na razie zaznaczam to jako odpowiedź. Nie zweryfikowałem tego, ale wydaje się to przydatne. W szczególności wydaje się, że potrzebny jest certyfikat SSL klienta, którego nie używałem. Jeśli w jakiś sposób okaże się, że tak nie jest, lub ktoś przyjdzie z lepszą lub pełniejszą odpowiedzią, przerzucę to na nich. Ale doceniam wkład i nienawiść do pozostawienia tego w stanie bez odpowiedzi, ponieważ można na nie odpowiedzieć wystarczająco dobrze, więc ... proszę. Dzięki. –