2011-12-05 57 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证书,我没有使用它。如果事实证明情况并非如此,或者某人有更好或更完整的答案,我会将其切换到他们。但我很欣赏这种投入,并且很讨厌把它留在一个没有答案的状态,因为它可能会得到足够的回答,所以......在这里,你去吧。谢谢。 –