Android 使用简单的DefaultHttpClient或应用程序中捆绑的BouncyCastle创建的密钥库
应用程序所连接的服务器有一个临时证书,或者类似的东西。我只负责Android应用程序,为了进行https web服务调用,该应用程序使用了接口Android 使用简单的DefaultHttpClient或应用程序中捆绑的BouncyCastle创建的密钥库,android,ssl,https,Android,Ssl,Https,应用程序所连接的服务器有一个临时证书,或者类似的东西。我只负责Android应用程序,为了进行https web服务调用,该应用程序使用了接口X509TrustManager的不安全实现。现在,服务器证书已修复,并具有最终证书 以下代码起作用: HttpClient mHttpClient = null; HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(htt
X509TrustManager
的不安全实现。现在,服务器证书已修复,并具有最终证书
以下代码起作用:
HttpClient mHttpClient = null;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);
DefaultHttpClient client = new DefaultHttpClient(httpParameters);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
mHttpClient = new DefaultHttpClient(mgr, client.getParams());
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
基本上,在进行web服务调用时使用此mHttpClient
不会引起任何错误或投诉,并按预期工作。然而,我见过这样的实现,它们有一种更安全的方法
我的问题是:通过使用上述代码中的
DefaultHttpClient
简单,在某些设备上证书可能无法被识别为有效的情况下,是否会出现一些问题?或者更好,我应该像上面的回答那样使用存储的密钥库吗?我不确定我是否得到了它。上述解决方案是错误的,因为它信任来自应用程序的所有https呼叫?解决方案:仅信任来自您服务器的此特定证书?同意mklimek的意见-我以前确实必须使用okhttp3使用