Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 4.1及以上版本设备的SSL错误_Android_Ssl - Fatal编程技术网

Android 4.1及以上版本设备的SSL错误

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

当我尝试调用我的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 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并尝试调试程序。