Android 4.1及以上版本设备的SSL错误
当我尝试调用我的web服务时,我遇到了4.1及以上android设备的问题。我已使用以下代码将.cer文件转换为bks:Android 4.1及以上版本设备的SSL错误,android,ssl,Android,Ssl,当我尝试调用我的web服务时,我遇到了4.1及以上android设备的问题。我已使用以下代码将.cer文件转换为bks: KeyStore trusted = KeyStore.getInstance("BKS"); InputStream in = c.getResources().openRawResource(R.raw.test); trusted.load(in, "password".toCharArray()); TrustManagerFactory trus
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = c.getResources().openRawResource(R.raw.test);
trusted.load(in, "password".toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("X509");
trustManagerFactory.init(trusted);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(trusted, "password".toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(kmf.getKeyManagers(), tm, null);
URL request = new URL(URL);
urlConnection = (HttpsURLConnection) request.openConnection();
urlConnection.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
urlConnection.setSSLSocketFactory(context.getSocketFactory());
urlConnection.setDoInput(true);
urlConnection.setReadTimeout(200000);
urlConnection.connect();
InputStream ina = urlConnection.getInputStream();
BasicHttpEntity res = new BasicHttpEntity();
res.setContent(ina);
HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1,
urlConnection.getResponseCode(), "");
resp.setEntity(res);
HttpEntity responseEntity = resp.getEntity();
InputStream data = responseEntity.getContent();
此代码适用于4.0及以下设备,但对于4.1,我得到的响应是“403禁止的错误””
不幸的是,我无法找到哪里出了问题,需要任何帮助。值得信任的
中有什么?如果不需要客户端身份验证,则不需要构建KeyManagerFactory
,只需将null
作为第一个参数传递给context.init()
“信任”是我的密钥库。更新了我的代码。当我将KeyMangerFactory作为null传递给context.init()时,我得到的是FileNOtFound。文件中有什么?仅证书还是密钥?文件只是我的证书,您只需要context.init(null,tm,null)
SSLContext
不处理文件,因此您还有一些其他问题。发布stacktrce并尝试调试程序。