關於瀏覽器驗證網站數位憑證的流程網上的資料一般講的都不是很清楚。在查閱了不少資料後終於搞清楚這部分。
CA下發給網站的認證都是一個憑證鏈結,也就是一層一層的認證,從根憑證開始,到下級CA,一層一層,最後一層就是網站認證。
瀏覽器收到伺服器發送的認證後,需要驗證其真實性。而認證的簽名是通過簽名演算法和上級CA的私密金鑰產生的,並非很多文章裡簡單說的靠CA私密金鑰產生。瀏覽器需要用上級CA的公開金鑰才能解密簽名,並與產生的指紋對比,那麼問題來了,這個上級CA的公開金鑰從哪來呢。
答案是此公開金鑰來自於憑證鏈結該層的上級CA的認證明文內。單個X509v3認證由以下部分組成:
X.509v3認證由三部分組成: tbsCertificate (to be signed certificate),待簽署憑證。 SignatureAlgorithm,簽名演算法。 SignatureValue,簽名值。
tbsCertificate又包含10項內容,在HTTPS握手過程中以明文方式傳輸: Version Number,版本號碼。 Serial Number,序號。 Signature Algorithm ID,簽名演算法ID。 Issuer Name,發行者。 Validity period,有效時間。 Subject name ,認證主體名稱。 Subject Public Key Info ,認證主體公開金鑰資訊,包含公開金鑰演算法和公開金鑰值。 Issuer Unique Identifier (optional),發行商唯一ID。 Subject Unique Identifier (optional),主體唯一ID。 Extensions (optional),擴充。
憑證鏈結由多個認證一層一層組成的,除了最底層的網站認證的公開金鑰是給使用者加密報文外,其他層認證中的公開金鑰均用於解密底層的認證指紋簽名。最高層的根憑證是自簽名的,也就是自己頒發給自己,所以它的公開金鑰不僅用來解密下層的簽名,也用來給自己的簽名解密。
驗證認證是否真實的任務完成了,那麼認證是否可靠如何驗證呢。一句話,只要根憑證可靠,整個憑證鏈結就可靠,而根憑證是否可靠要看這個根憑證是否在作業系統或瀏覽器內建的可信根憑證內,在的話就可信。