當不是鏈的一部分時,IE/Chrome 如何知道要使用哪個中間 CA?
我網路上的伺服器使用 RapidSSL CA 頒發的證書進行簽名,但不提供完整的頒發者鏈(RapidSSL CA 的證書由 GeoTrust CA 頒發,它是受信任的根權威)。
當我使用 firefox 訪問該站點時,出現以下錯誤:
The certificate is not trusted because no issuer chain was provided. (Error code: sec_error_unknown_issuer)
但是,如果我使用 IE 或 chrome 連接到該站點,它可以工作,並且我注意到 RapidSSL 之後會作為中間 CA 載入。我不明白 Chrome/IE(我假設它使用 Windows 證書儲存)如何知道將 RapidSSL 添加為中間 CA。
openssl s_client
當我用來調試連接時,我得到了預期的行為(根據我) 。僅將 GeoTrust 用作 CA 時,我得到以下資訊:
Verify return code: 21 (unable to verify the first certificate)
僅使用 RapidSSL 作為 CA:
Verify return code: 2 (unable to get issuer certificate)
兩者同時使用時:
Verify return code: 0 (ok)
誰能幫助我了解 Windows 如何知道將 RapidSSL CA 載入為中間權限?
CA 證書是根據頒發證書的授權資訊訪問 (AIA) 擴展中的 URL 資訊下載的。
我上次聽說的 Firefox 使用自己的證書儲存和/或連結引擎。Chrome 和 IE 在 Windows 中使用一個。
證書驗證過程
當證書送出給應用程序時,應用程序必須使用證書連結引擎來確定證書的有效性。只有在證書鏈驗證成功後,應用程序才能信任證書和證書所代表的身份。三個不同但相互關聯的過程用於確定證書的有效性:
■證書發現要建構證書鏈,證書連結引擎必須收集頒發 CA 證書和所有 CA 證書,直至根 CA 證書。CA 證書是從 CryptoAPI 記憶體、組策略或企業策略收集的,或者作為最後的手段,從頒發的證書中的權威資訊訪問 (AIA) 統一資源定位器 (URL) 下載。從 CryptoAPI 記憶體以外的位置下載證書後,它會被添加到使用者的 CryptoAPI 記憶體中,以便更快地檢索。
■路徑驗證當證書連結引擎驗證證書時,它不會停止在提供的證書上。在達到自簽名根證書之前,必須驗證證書鏈中的每個證書。驗證測試可以包括驗證驗證碼簽名、確定頒發的 CA 證書是否包含在 NTAuth 儲存中,或者是否包含特定的應用程序或證書策略對象標識符 (OID)。如果一個證書未通過有效性測試,則整個鏈可能會被視為無效並且不被呼叫應用程序使用。