我在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的jar工作正在工作,但在android类中使用包含在SDK类中无法使其工作.
所以任何想法如何使用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)创建自定义实现,其中,您可以使用接受所有证书的自定义TrustManager创建java.net.SSLSocket.
您可能希望在http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/JSSERefGuide.html查看JSSE以获取更多详细信息