2017-08-03 89 views
3

您已經設置了一個小服務器,生成一個免費證書讓我們加密並配置Nginx以使用該證書(fullchain.pem和privkey 。質子交換膜)讓我們在Android上加密給出java.security.cert.CertPathValidatorException:找不到證書路徑的信任錨

然而,當我試圖從我的Android應用(與OkHttp3) 撥打電話我得到這個錯誤

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 

是不是由Android的證書信任存儲信任讓我們的加密根證書?或者我在設置nginx時錯過了什麼? 這是什麼工作如果我仍然想使用讓我們加密證書?

+0

「讓我們加密不被Android證書信任存儲所信任的根證書?」 - 它將部分取決於Android的版本。舊設備更可能有問題。 「或者我在設置nginx時錯過了什麼?」 - 使用常規的Web瀏覽器進行測試,看看瀏覽器是否存在抱怨。 「什麼是解決此問題的方法」 - 在OkHttp中設置證書鎖定,鎖定Let's Encrypt根證書。 – CommonsWare

+0

使用常規的Android瀏覽器工作得很好。看起來更像是JDK信任存儲的問題:/ – Johny19

+0

您是否找到了解決方案?我有同樣的問題 – jaumard

回答

1

我不知道它是有用的,但,在/etc/letsencrypt/live/<your domain>/README文件說:

該目錄包含您的密鑰和證書。

privkey.pem:證書的私鑰。

fullchain.pem:在大多數服務器軟件中使用的證書文件。

chain.pem:用於Nginx中的OCSP裝訂> = 1.3.7。

cert.pem:會中斷許多服務器配置,不應使用 而不讀取更多文檔(請參閱下面的鏈接)。

我們建議不要移動這些文件。有關更多信息,請參閱 Certbot用戶指南,網址爲 https://certbot.eff.org/docs/using.html#where-are-my-certificates

所以,也許你應該使用chain.pem

另一方面,對於那些甚至不使用Nginx,我從Android得到相同的錯誤,因爲我錯誤地使用了chain.pem而不是fullchain.pem Android應用程序的解決方案之一,需要您發送證書的整個鏈(即:fullchain.pem),因爲這裏說明:

https://developer.android.com/training/articles/security-ssl.html#CommonHostnameProbs

有解決這個問題的兩種方法:

  • 配置服務器以將中間CA包含在服務器 鏈中。大多數CA提供有關如何爲所有常見的 Web服務器執行此操作的文檔。如果您需要網站至少通過Android 4.2使用默認Android瀏覽器工作 ,則這是唯一的方法。

  • 或者,像對待其他未知CA一樣對待中間CA,並創建一個TrustManager直接信任它,如前兩個 部分所做的那樣。

希望它有幫助。

相關問題