2012-09-17 38 views
1

我正在開發Android上的客戶端應用程序,它連接到位於負載平衡器後面的AWS上的服務器,我在GoDaddy上創建了SSL證書並將其添加到負載平衡器中。java.security.cert.CertPathValidatorException:未找到認證路徑的信任錨點

一切都在瀏覽器上進展順利,它承認的證書,但是當我嘗試調用與Android API的我得到這個異常:

1月9日至18日:18:55.187:W /系統.err(32585):導致: java.security.cert.CertPathValidatorException:找不到 證書路徑的信任錨點。

我發現一些討論誰說在應用程序中添加證書,但沒有辦法在證書服務器端修復它?這不是證書的問題嗎?

回答

-1

這個奇怪的錯誤消息意味着您找不到指定的信任存儲區。

+0

我在哪裏指定了信任存儲?它不在證書中,它是godaddy? – Ste

+1

我無法確認:我可以輕鬆輸出存儲在我的信任存儲區中的所有證書,並且在下載時仍可以獲取該例外。 – domsom

+0

@domsom我面臨同樣的問題,你在這個問題上有什麼解決方案......? –

2

我通過創建一個具有正確的組織單位名稱和通用名稱

+0

以前OU和CN是什麼?我遇到了類似的問題,我不知道無效值是什麼? – yano

0

我要說的是Android官方文檔會在這種情況下,你最好的朋友一個新的.csr固定它。在這裏看到:http://developer.android.com/training/articles/security-ssl.html#UnknownCa

這就是他們說什麼,這既是解決問題,並在同一時間非常聰明:

在這種情況下,出現SSLHandshakeException是因爲你有一個CA 與工作不不受系統信任。這可能是因爲您有來自尚未受Android信任的新CA的 證書,或者您的 應用在沒有CA的舊版本上運行。更多的時候,CA是 未知,因爲它不是公共CA,而是由政府,公司或教育機構 等組織發行的私人機構,供其自己使用。

幸運的是,您可以教HttpsURLConnection信任CA的特定集合 。這個過程可能有些複雜,所以下面是一個 示例,它從InputStream獲取特定的CA,使用它創建一個KeyStore,然後用它創建並初始化一個TrustManager。 TrustManager是系統用於驗證來自服務器的 證書的憑證,並且通過使用 一個或多個CA從KeyStore創建一個證書,這些CA將成爲該TrustManager所信任的唯一CA.

鑑於新的TrustManager,該示例初始化一個新的SSLContext 它提供了可以用來覆蓋來自HttpsURLConnection的默認 的SSLSocketFactory的SSLSocketFactory的。這樣,連接將 使用您的CA進行證書驗證。

相關問題