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

时间:2013-09-22 08:57:09

标签: android ssl https ssl-certificate httpsurlconnection

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

  1. 使用Firefox获取https://free.temafon.ru的所有证书。
  2. 按顺序将密钥库中的证书从temefon证书导入根证书。
  3. Init ssl context:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

最有可能的是,Android 2.3没有安装根CA.按此link

  

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