Android 2.3未找到信任管理器的设备。SSLHandshakeException:找不到证书路径的信任锚点
这是我得到的错误,它只发生在:Android 2.3未找到信任管理器的设备。SSLHandshakeException:找不到证书路径的信任锚点,android,ssl,Android,Ssl,这是我得到的错误,它只发生在: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 以下是我调用的方法,直到得到SSLHandshake错误: public String doRequest(String url, HashMap<Object, Object> data,
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
以下是我调用的方法,直到得到SSLHandshake错误:
public String doRequest(String url, HashMap<Object, Object> data,
Method method, String token) throws Exception {
InputStream certificateInputStream = null;
if (SomeApplication.PRODUCTION) {
certificateInputStream = SomeApplication.context
.getResources().openRawResource(R.raw.production_cert);
LogUtils.log("using production SSL certificate");
} else {
certificateInputStream = SomeApplication.context
.getResources().openRawResource(R.raw.staging_cert);
LogUtils.log("using staging SSL certificate");
}
KeyStore trustStore = KeyStore.getInstance("BKS");
trustStore.load(certificateInputStream,
"xxxxxxxxxxxx".toCharArray());
certificateInputStream.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);
SSLContext context = SSLContext.getInstance("TLS");
// this log returns 1 for trustmanagers.
LogUtils.log("tmf get trustmanagers: " + tmf.getTrustManagers().length);
context.init(null, tmf.getTrustManagers(), null);
URL request = new URL(url);
HttpsURLConnection urlConnection = (HttpsURLConnection) request
.openConnection();
urlConnection.setHostnameVerifier(new StrictHostnameVerifier());
urlConnection.setSSLSocketFactory(context.getSocketFactory());
urlConnection.setConnectTimeout(15000);
if (method != Method.GET)
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
if (token != null) {
urlConnection.setRequestProperty("Authorization", "Token " + token);
}
urlConnection.setRequestMethod(method.toString());
urlConnection.connect();
致:
它在没有trustmanager的情况下工作,而是使用null。。。但它需要安全。。。。请帮忙 重复的NB它并不意味着“设备找不到信任管理器”,与你的标题相反。它说我应该更新我的java?你认为这就是问题所在?顺便说一下,这是一个android应用程序。。。当然我的java版本不应该影响2.3版本的工作方式…?请阅读我的答案。忽略其他一切。对,但是。。。它适用于其他非2.3版本的android设备。你能解释一下吗?
context.init(null, tmf.getTrustManagers(), null);
context.init(null, null, null);