我有一个Android应用程序,它使用SSLSocketFactory加载pkcs12证书并使用该证书与我的服务器执行SSL客户端认证。此过程在Android 2.1,2.2和2.3上完美工作,但是当我尝试在运行4.0的电话或模拟器上运行此代码时,我的服务器不会从我的应用程序发出的请求中接收到公钥。在Android 4.0中破坏的SSL客户端认证
这里是我用得到我用来执行我的要求
private HttpClient getHttpClient(Context context) {
if(httpClient == null) {
KeyStore mycert = KeyStore.getInstance("pkcs12");
byte[] pkcs12 = persistentStorage.getPKCS12Certificate(context);
ByteArrayInputStream pkcs12BAIS = new ByteArrayInputStream(pkcs12);
mycert.load(pkcs12BAIS, config.getPassword().toCharArray());
SSLSocketFactory sockfact = new SSLSocketFactory(mycert, null, null);
sockfact.setHostnameVerifier(new StrictHostnameVerifier());
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https",sockfact , config.getPort()));
BasicHttpParams httpParameters = new BasicHttpParams();
HttpProtocolParams.setUseExpectContinue(httpParameters, false);
HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
HttpConnectionParams.setSoTimeout(httpParameters, 3000);
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(httpParameters, registry);
cm.closeExpiredConnections();
cm.closeIdleConnections(3000, TimeUnit.MILLISECONDS);
httpClient = new DefaultHttpClient(cm, httpParameters);
}
return httpClient;
}
您的应用程序是否崩溃,Logcat出现异常或异常? – yorkw 2012-01-08 22:58:38