2013-09-22 33 views
5

上找到证书路径的信任锚点。我需要建立与https://free.temafon.ru的https连接,但我在Android 2.3及更低版本上有CertPathValidatorException。我做了什么。HttpsUrlConnection:没有在2.3

  1. 通过Firefox获取https://free.temafon.ru的所有证书。
  2. 导入证书在密钥库中的序列从temefon证书的根证书。
  3. 初始化SSL上下文:

    最终密钥库密钥库= 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

+0

你找到一个解决的办法?我正在处理同样的问题。 – jimbob

+0

不幸的是,我最终接受了2.3的所有证书。 – Bracadabra

回答

0

当你说你抓住了所有与Firefox的证书,你还包括根CA?

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

在这种情况下,发生SSLHandshakeException是因为您有一个不受系统信任的CA.这可能是因为你有从尚未通过Android或信任你的应用程序是在旧版本上运行,而不CA新的CA证书。

+0

我同意Android 2.3没有根CA,但我抓住所有证书链并将其添加到自定义信任存储。 – Bracadabra