問題

網站更換憑證後在電腦瀏覽器上可正常瀏覽,但手機端卻出現憑證無效的錯誤。

1
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

原因:缺乏中繼憑證

👀 以下截自 【茶包射手日記】網站憑證無效案例分析

這篇問題的確單純就是沒裝中繼 CA 憑證,而這問題用PC瀏覽器是測不出來的,因為PC瀏覽器在缺少中繼憑證時,會從憑證的擴充欄位>授權資訊存取>憑證授權單位簽發者中的網址,自動下載中繼憑證,所以不會有問題。但PC瀏覽器以外的client如手機版瀏覽器、curl、寫程式連線等都沒有這個自動下載。

另外 SSLLab 其實會指出這個問題,在Additional Certificates (if supplied)區塊就會列出server提供了哪些憑證,如果有缺少中繼憑證問題也會顯示Chain issues: Incomplete

簡單來說就是:

  1. 伺服器端沒提供中繼憑證,導致憑證無效。
  2. PC 上的瀏覽器因為會自動從憑證授權單位自動下載中繼憑證,所以不會有問題。
  3. 其他類型的 Client 沒有這個自動下載的機制,所以會有問題。

驗證問題

嘗試手動將中繼憑證加入手機中,確認可以正常瀏覽。

使用 What’s My Chain Cert 憑證設定檢查網站,比對兩個網址的設定,也確實異常的那個網站是有錯誤的。

網站憑證在 PC 端有效但 Android 上出現無效憑證問題操作畫面1 網站憑證在 PC 端有效但 Android 上出現無效憑證問題操作畫面2

解決方案

很簡單,伺服器端修正憑證設定即可。

補充案例

2023/05/30 App 下載離線圖資失敗,經查測後發現一樣是在瀏覽器上可正常連線,但是 App 無法連線。

使用 What’s My Chain Cert 憑證設定檢查網站 檢查,確認是 Misconfigured。

網站憑證在 PC 端有效但 Android 上出現無效憑證問題操作畫面3

改用 SSLChecker 憑證設定檢查網站 ,更明確指出斷在哪裡。

網站憑證在 PC 端有效但 Android 上出現無效憑證問題操作畫面4

伺服器端匯入中繼憑證後,使用 SSLShopper SSL Checker 檢查通過。

網站憑證在 PC 端有效但 Android 上出現無效憑證問題操作畫面5

參考資料

憑證檢查網站