5

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

  1. 使用 Firefox从https://free.temafon.ru获取所有证书。
  2. 从 temefon 证书到根证书依次导入 keystore 中的证书。
  3. 初始化 ssl 上下文:

    最终 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());
    

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

此代码在 Android 4.0 上运行良好,但在 2.3 上因 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.我做错了什么而失败?

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

4

1 回答 1

0

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

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

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

于 2014-01-27T06:44:22.877 回答