客戶端通過以下步驟檢查中間CA的簽名是否由受信任的根CA簽發:
1. 證書鏈的構建
服務器發送的證書鏈通常包含:
? 服務器證書(由中間CA簽發)
? 中間CA證書(由根CA簽發)
? 根CA證書(通常不發送,預裝在客戶端中)
客戶端需要從中間CA證書的頒發者(Issuer)信息,找到對應的根CA證書。
2. 驗證簽名
(1) 提取中間CA的簽名信息
? 中間CA證書中包含一個數字簽名,該簽名是中間CA的公鑰對證書內容(包括頒發者、有效期、域名等)的哈希值加密后的結果。
(2) 獲取根CA的公鑰
? 客戶端從內置的根證書列表中查找與中間CA證書的“Issuer”字段匹配的根CA證書。
? 根CA證書是自簽名的,其公鑰直接存儲在客戶端中。
(3) 驗證簽名合法性
? 客戶端使用根CA的公鑰解密中間CA證書的簽名,得到哈希值。
? 客戶端對中間CA證書的內容(除簽名外)重新計算哈希值,并與解密后的哈希值比對。
? 如果一致,說明中間CA證書確實由對應的根CA簽發。
3. 信任鏈的傳遞
? 中間CA證書的“Issuer”必須與根CA證書的“Subject”完全匹配(包括國家、組織、通用名稱等字段)。
? 根CA證書必須是客戶端內置的受信任根證書(如Windows的根證書存儲或瀏覽器內置列表)。
4. 示例流程(以Let’s Encrypt為例)
-
服務器發送證書鏈:
? 服務器證書(由中間CALet's Encrypt Authority X3
簽發)? 中間CA證書(由根CA
ISRG Root X1
簽發) -
客戶端驗證中間CA簽名:
? 提取中間CA證書的“Issuer”字段:ISRG Root X1
。? 客戶端查找內置根證書中是否存在
ISRG Root X1
。? 使用
ISRG Root X1
的公鑰解密中間CA證書的簽名,驗證哈希值是否匹配。 -
信任鏈成立:
? 如果簽名驗證通過,且根CA受信任,則中間CA的合法性被確認。
5. 關鍵檢查點
? 頒發者匹配:中間CA的“Issuer”必須對應某個根CA的“Subject”。
? 根CA受信任:根CA必須存在于客戶端的預裝信任列表中。
? 簽名算法有效性:客戶端需支持中間CA證書使用的簽名算法(如RSA、ECDSA)。
6. 異常情況處理
? 中間CA未找到對應的根CA:客戶端提示“此證書由不受信任的機構頒發”。
? 簽名不匹配:客戶端提示“證書簽名無效”。
? 根CA未預裝:用戶需手動安裝根CA證書(如企業內網場景)。
7. 技術補充
? 證書擴展驗證:客戶端還會檢查中間CA證書的擴展字段(如 Basic Constraints
),確保證書類型允許簽發子證書。
? 證書吊銷狀態:即使簽名合法,若中間CA證書被吊銷,客戶端仍會終止連接(通過CRL或OCSP)。
總結:
客戶端通過比對中間CA證書的“Issuer”與根CA的“Subject”,并用根CA的公鑰驗證簽名,確保中間CA的合法性。這一過程是HTTPS信任鏈的核心,缺一不可。