HttpsUrlConnection:在2.3上找不到证书路径的信任锚

Bra*_*bra 5 ssl https android ssl-certificate httpsurlconnection

那里.我需要与https://free.temafon.ru建立https连接,但我在Android 2.3及更低版本上有CertPathValidatorException.我做了什么.

  1. 使用Firefox 从https://free.temafon.ru获取所有证书.
  2. 从temefon证书到根证书依次导入密钥库中的证书.
  3. Init ssl上下文:

    final KeyStore keystore = KeyStore.getInstance("BKS");

        keystore.load(getResources().openRawResource(R.raw.temafon),
                    "W0d3Uoa5PkED".toCharArray());
        final TrustManager trustManager = new TemafonTrustManager(keystore);
    
        final SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, new TrustManager[] { trustManager }, null);
    
        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
                .getSocketFactory());
    
    Run Code Online (Sandbox Code Playgroud)

    在这里,我使用自定义TrustManager,因为服务器以错误的顺序发送证书.

这段代码在Android 4.0上工作正常,但2.3在 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.我正在做的事情上失败了吗?

我已经创建了一个测试项目,可以在这里找到.

Lui*_*uis 0

当你说你用FireFox获取了所有证书时,你是否也包括了根CA?

Android 2.3 很可能没有安装根 CA。根据此链接

在这种情况下,会出现 SSLHandshakeException,因为您的 CA 不受系统信任。这可能是因为您拥有来自 Android 尚未信任的新 CA 的证书,或者您的应用程序在没有 CA 的旧版本上运行