我正在使用Apache HttpClient库来建立https连接。不幸的是,Android给我返回了一个“不受信任的服务器证书”错误。如果我使用手机浏览器浏览该网站,则可以正确验证证书,这使我相信我需要让HttpClient了解手机上的根证书。以下是我的HttpClient设置代码:
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout( params, 20000 );
HttpConnectionParams.setSoTimeout( params, 20000 );
HttpProtocolParams.setVersion( params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset( params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue( params, false);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register( new Scheme( "http", PlainSocketFactory.getSocketFactory(), 80 ) );
schReg.register( new Scheme( "https", SSLSocketFactory.getSocketFactory(), 443 ) );
ClientConnectionManager conMgr = new ThreadSafeClientConnManager( params, schReg );
DefaultHttpClient defaultHttpClient = new DefaultHttpClient( conMgr, params );
return ( defaultHttpClient );
您可以看到,我对SSLSocketFactory没有做任何特殊处理。如何使HttpClient库在不添加自定义证书到密钥库的情况下验证我的站点?我应该创建一个自定义的SSLSocketFactory并从Android手机加载cacerts.bks吗?在这种情况下,我可能会遇到不同手机上密钥库密码不同的问题?
如果您需要更多信息,请告诉我。这个SSL的东西对我来说相当困难。