我在ssl使用httpclient在android上有一些麻烦我试图访问自签名证书的细节我希望我的应用程序信任所有证书(我将使用ssl仅用于数据加密).首先,我尝试使用本指南http://hc.apache.org/httpclient-3.x/sslguide.html在桌面上工作正常,但在Android上我仍然得到javax.net.ssl.SSLException:不信任的服务器证书.在谷歌搜索后我发现了一些其他的例子如何启用ssl.
http://groups.google.com/group/android-developers/browse_thread/thread/62d856cdcfa9f16e - 当我使用URLConnection但使用HttpClient时工作仍然有例外.
http://www.discursive.com/books/cjcook/reference/http-webdav-sect-self-signed.html - 在桌面上使用来自apache的jars工作但在android中使用包含在SDK类中无法使其工作.
http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/200808.mbox/%3C1218824624.6561.14.camel@ubuntu%3E - 也得到同样的例外
所以任何想法如何使用HttpClient信任Android上的所有证书
如果你碰巧看看DefaultHttpClient的代码,它看起来像这样:
@Override protected ClientConnectionManager createClientConnectionManager() { SchemeRegistry registry = new SchemeRegistry(); registry.register( new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register( new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); ClientConnectionManager connManager = null; HttpParams params = getParams(); ... }
请注意https方案到org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory()的映射.
您可以创建自定义实现org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory
接口(http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/protocol/SecureProtocolSocketFactory.html),其中,您可以创建java.net.SSLSocket
一个自定义TrustManager
的是接受所有证书.
您可以在http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/JSSERefGuide.html查看JSSE以获取更多详细信息.