【问题标题】:HttpsUrlConnection: Trust anchor for certification path not found on 2.3HttpsUrlConnection:在 2.3 上找不到证书路径的信任锚
【发布时间】:2013-09-27 07:59:51
【问题描述】:

那里。我需要与 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());
    

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

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

我创建了一个测试项目,可以找到here

【问题讨论】:

  • 您找到解决方案了吗?我正在处理同样的问题。
  • 很遗憾,我最终接受了 2.3 的所有证书。

标签: android ssl https ssl-certificate httpsurlconnection


【解决方案1】:

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

很可能,Android 2.3 没有安装根 CA。根据这个link

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

【讨论】:

  • 我同意 Android 2.3 没有根 CA,但我获取了所有证书链并将其添加到自定义信任库。
猜你喜欢
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2014-01-29
  • 2017-10-03
  • 2019-05-19
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多