2013-09-22 48 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