Eri*_*Kok 38 ssl android android-2.2-froyo
对于我的应用程序Transdroid,我通过HTTP连接到远程服务器,并可选择通过HTTPS安全地连接.对于与HttpClient的这些HTTPS连接,我使用自定义SSL套接字工厂实现来确保自签名证书正常工作.基本上,我接受一切,并忽略任何证书的每一次检查.
这已经有一段时间了,但它不再适用于Android 2.2 FroYo.尝试连接时,它将返回一个异常:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Run Code Online (Sandbox Code Playgroud)
以下是我初始化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);
Run Code Online (Sandbox Code Playgroud)
我使用了FakeSocketFactory和FakeTrustManager,其源代码可以在这里找到.
同样,我不明白为什么它突然停止工作,甚至错误'破管'的意思.我在Twitter上看到过Seesmic和Twidroid在FroYo上启用SSL时失败的消息,但我不确定它是否相关.
感谢您的任何指示/帮助!
Eri*_*Kok 42
这是答案,很多,非常感谢有意义的Seesmic开发人员愿意分享修复:
在自定义套接字工厂中,套接字创建(with createSocket
)显然已针对SSLSocketFactory
实现进行了专门更改.老了:
@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket();
}
Run Code Online (Sandbox Code Playgroud)
需要改为:
@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose);
}
Run Code Online (Sandbox Code Playgroud)
然后它再次为我工作!
更新:由于这仍然是一个受欢迎的答案,让我更新我的工作代码链接.这个支持SSl的套接字工厂支持现代协议(TLS 1.1+),SNI,并且可选地允许接受所有证书(不安全,忽略所有SSL证书)或自签名证书(通过SHA-1哈希).
归档时间: |
|
查看次数: |
41617 次 |
最近记录: |