2011-12-05 56 views
5

我正在爲Google TV配對協議編寫Go軟件包。但是我似乎在TLS握手中遇到了問題。Google TV配對協議 - Go與SSL握手錯誤(golang)

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文件的代碼很容易檢查出來。您必須知道您的Google TV盒的IP地址,因爲它不使用mDNS。如果你(某人,任何人)運行這個並得到不同的結果,請告訴我。

我已經在google-tv-remote上看過Google TV Remote代碼。更有用的一個是google-tv-pairing-protocol這是我所做的等效的Java/Android項目。當然,我已經傾注了那些代碼。我認爲這是Go本身的一個問題(不太可能),Go TLS包的問題不知道如何閱讀Google TV的證書(我知道這是一年前的問題),或者是我的代碼存在問題(通常是最有可能的,但我只是沒有看到它)。

順便說一下,我在羅技Revue上測試了它,它有一個自簽名的SSL證書。它沒有任何根源或修改。

我的結果代碼當然是開源的。感謝您的幫助。

回答

2

客戶端證書由Java遠程客戶端在運行時生成,並存儲以供將來使用。退房代碼爲:

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

你可能會運行到一個無效的證書。根據代碼,你需要一個特定的CN。

/*返回應在新證書中使用的名稱。 *格式爲:「CN = anymote /產品/設備/型號/唯一標識符」 */

+0

你是說,它希望我的握手時間發送客戶端證書?如果是這樣,這將是有道理的,我應該給你買一隻真正的小狗。如果沒有,請讓我知道我對這條信息的理解是哪裏出了問題。 –

+1

我還沒有完成整個過程,但在初始配對請求期間需要使用SSL:http://code.google.com/p/google-tv-remote/source/browse/src /com/google/android/apps/tvremote/PairingActivity.java#240 – saxman

+0

我將此標記爲現在的答案。我沒有驗證它,但它似乎很有用。特別是,似乎需要一個客戶端SSL證書,我沒有使用它。如果事實證明情況並非如此,或者某人有更好或更完整的答案,我會將其切換到他們。但我很欣賞這種投入,並且很討厭把它留在一個沒有答案的狀態,因爲它可能會得到足夠的回答,所以......在這裏,你去吧。謝謝。 –