Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 2.3未找到信任管理器的设备。SSLHandshakeException:找不到证书路径的信任锚点_Android_Ssl - Fatal编程技术网

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);