詳解HTTPS中數(shù)字證書驗證系統(tǒng)
關于瀏覽器驗證網(wǎng)站數(shù)字證書的流程網(wǎng)上的資料一般講的都不是很清楚。在查閱了不少資料后終于搞清楚這部分。
CA下發(fā)給網(wǎng)站的證書都是一個證書鏈,也就是一層一層的證書,從根證書開始,到下級CA,一層一層,最后一層就是網(wǎng)站證書。
瀏覽器收到服務器發(fā)送的證書后,需要驗證其真實性。而證書的簽名是通過簽名算法和上級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,發(fā)行者。 Validity period,有效時間。 Subject name ,證書主體名稱。 Subject Public Key Info ,證書主體公鑰信息,包含公鑰算法和公鑰值。 Issuer Unique Identifier (optional),發(fā)行商唯一ID。 Subject Unique Identifier (optional),主體唯一ID。 Extensions (optional),擴展。
證書鏈由多個證書一層一層組成的,除了最底層的網(wǎng)站證書的公鑰是給用戶加密報文外,其他層證書中的公鑰均用于解密底層的證書指紋簽名。最高層的根證書是自簽名的,也就是自己頒發(fā)給自己,所以它的公鑰不僅用來解密下層的簽名,也用來給自己的簽名解密。
驗證證書是否真實的任務完成了,那么證書是否可靠如何驗證呢?一句話,只要根證書可靠,整個證書鏈就可靠,而根證書是否可靠要看這個根證書是否在操作系統(tǒng)或瀏覽器內置的可信根證書內,在的話就可信。





