我的应用程序Transdroid通过HTTP连接到远程服务器,可以选择通过HTTPS进行安全连接。对于这些使用HttpClient的HTTPS连接,我使用自定义的SSL套接字工厂实现,以确保自签名证书正常工作。基本上,我接受一切并忽略任何证书检查。
这已经运行良好一段时间了,但它不再适用于Android 2.2 FroYo。在尝试连接时,会返回一个异常:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
这是我如何初始化HttpClient:
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", new PlainSocketFactory(), 80));
registry.register(new Scheme("https", (trustAll ? new FakeSocketFactory() : SSLSocketFactory.getSocketFactory()), 443));
client = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams);
我使用一个FakeSocketFactory和FakeTrustManager,它们的源代码可以在这里找到。
我不明白为什么它突然停止工作,也不知道错误信息“Broken pipe”的含义。我在Twitter上看到有关Seesmic和Twidroid在FroYo上启用SSL时失败的消息,但不确定是否相关。
感谢任何指导/帮助!