詳解HTTPS中數(shù)字證書(shū)驗(yàn)證系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)于瀏覽器驗(yàn)證網(wǎng)站數(shù)字證書(shū)的流程網(wǎng)上的資料一般講的都不是很清楚。在查閱了不少資料后終于搞清楚這部分。
CA下發(fā)給網(wǎng)站的證書(shū)都是一個(gè)證書(shū)鏈,也就是一層一層的證書(shū),從根證書(shū)開(kāi)始,到下級(jí)CA,一層一層,最后一層就是網(wǎng)站證書(shū)。
瀏覽器收到服務(wù)器發(fā)送的證書(shū)后,需要驗(yàn)證其真實(shí)性。而證書(shū)的簽名是通過(guò)簽名算法和上級(jí)CA的私鑰生成的,并非很多文章里簡(jiǎn)單說(shuō)的靠CA私鑰生成。瀏覽器需要用上級(jí)CA的公鑰才能解密簽名,并與生成的指紋對(duì)比,那么問(wèn)題來(lái)了,這個(gè)上級(jí)CA的公鑰從哪來(lái)呢?
答案是此公鑰來(lái)自于證書(shū)鏈該層的上級(jí)CA的證書(shū)明文內(nèi)。單個(gè)X509v3證書(shū)由以下部分組成:
X.509v3證書(shū)由三部分組成:
tbsCertificate (to be signed certificate),待簽名證書(shū)。 SignatureAlgorithm,簽名算法。 SignatureValue,簽名值。
tbsCertificate又包含10項(xiàng)內(nèi)容,在HTTPS握手過(guò)程中以明文方式傳輸:
Version Number,版本號(hào)。 Serial Number,序列號(hào)。 Signature Algorithm ID,簽名算法ID。 Issuer Name,發(fā)行者。 Validity period,有效時(shí)間。 Subject name ,證書(shū)主體名稱。 Subject Public Key Info ,證書(shū)主體公鑰信息,包含公鑰算法和公鑰值。 Issuer Unique Identifier (optional),發(fā)行商唯一ID。 Subject Unique Identifier (optional),主體唯一ID。 Extensions (optional),擴(kuò)展。
證書(shū)鏈由多個(gè)證書(shū)一層一層組成的,除了最底層的網(wǎng)站證書(shū)的公鑰是給用戶加密報(bào)文外,其他層證書(shū)中的公鑰均用于解密底層的證書(shū)指紋簽名。最高層的根證書(shū)是自簽名的,也就是自己頒發(fā)給自己,所以它的公鑰不僅用來(lái)解密下層的簽名,也用來(lái)給自己的簽名解密。
驗(yàn)證證書(shū)是否真實(shí)的任務(wù)完成了,那么證書(shū)是否可靠如何驗(yàn)證呢?一句話,只要根證書(shū)可靠,整個(gè)證書(shū)鏈就可靠,而根證書(shū)是否可靠要看這個(gè)根證書(shū)是否在操作系統(tǒng)或?yàn)g覽器內(nèi)置的可信根證書(shū)內(nèi),在的話就可信。