在介紹數(shù)字證書前蛤织,先談談簽名/驗簽的流程畜疾,當 A 向 B 發(fā)送數(shù)據(jù),
A 先通過非對稱加密算法挖帘,生成一對公鑰和私鑰瞒窒,并把公鑰公開
使用消息摘要算法(如 SHA捺僻、MD5 等),生成數(shù)據(jù)的摘要信息
使用私鑰“加密”得到簽名崇裁,并將簽名附加在數(shù)據(jù)上匕坯,一起發(fā)送給 B
這個流程稱為簽名。
B 收到后拔稳,
用消息摘要算法生成摘要
用公鑰“解密”簽名得到 A 生成的摘要
兩個摘要比對葛峻,如果一致則說明沒有第三方修改。
這個流程稱為驗簽巴比。
但這里如果 B 所保存的公鑰被 C 篡改成 C 的公鑰了术奖,C 就可以偽裝成 A 和 B 進行交流了。
所以 A 可以去可靠的數(shù)字證書認證機構(gòu)(即 CA轻绞,Certificate Authority)對自己的公鑰進行認證采记,CA 會用自己的私鑰“加密” A 的信息和公鑰,得到簽名政勃,并把 A 的信息唧龄、公鑰、簽名放在一起稼病,這就是數(shù)字證書选侨。
這樣 C 即使篡改了數(shù)字證書中 A 的公鑰掖鱼,B 只需要用 CA 公開的公鑰進行剛才所說的驗簽流程然走,即可驗證了。
其實戏挡,CA 使用私鑰簽名芍瑞,公開公鑰進行驗簽,和 A 與 B 之間發(fā)送數(shù)據(jù)的流程是類似的褐墅。那 CA 所公開的公鑰是不是也可能被篡改拆檬?解決方案是后面的證書鏈洪己。
先總結(jié)一下:
數(shù)字證書包含了公鑰、公鑰持有者信息竟贯、簽名以及證書有效期等信息答捕,它是用來認證公鑰、公鑰持有者身份的電子文件屑那。最常用的證書格式是 X.509 標準拱镐。
數(shù)字證書認證機構(gòu)(CA)是證書的簽發(fā)機構(gòu),它是 PKI 的核心持际。CA 是負責簽發(fā)證書沃琅、認證證書、管理已頒發(fā)證書的機關蜘欲。它要制定政策和具體步驟來驗證益眉、識別用戶身份,并對用戶證書進行簽名姥份,以確保證書持有者的身份和公鑰的擁有權(quán)郭脂。
數(shù)字證書簽發(fā)/驗證流程
有個很經(jīng)典的圖,講了大概流程:
證書鏈
打開一個支持 HTTPS 的網(wǎng)站殿衰,可以點擊地址欄的小鎖朱庆,查看這個網(wǎng)站的證書信息,可以看到證書路徑:
這里有 3 級證書闷祥,它們被分為:
end-user:即 www.google.com娱颊,是該網(wǎng)站使用 HTTPS 安裝的數(shù)字證書
intermediates:即 Google Internet Authority G3,是給 end-user 簽發(fā)證書的中間 CA 的證書凯砍,中間 CA 可能不止一個
root:即 Google Trust Services - GlobalSign Root CA-R2箱硕,是根 CA 的證書,它給中間 CA 簽發(fā)證書
證書鏈的形成
root 證書:由根 CA 自己對自己簽發(fā)的
intermediates 證書:根 CA 生成一對公鑰悟衩、私鑰剧罩,并用私鑰將中間 CA 的信息和公鑰進行“加密”生成簽名,并封裝得到 intermediates 證書座泳。上一級 CA 也是按照這個邏輯給下一級 CA 進行簽發(fā)證書惠昔。
end-user 證書:最后的 CA 生成公鑰私鑰,并私鑰將用戶信息挑势、公鑰進行“加密”得到 end-user 證書
證書這一級一級的關系就形成了證書鏈镇防。
為什么需要證書鏈
剛才也提到了,可以保證中間 CA 公開的公鑰安全潮饱,并且如果中間 CA 的私鑰泄漏了来氧,那用根 CA 再簽發(fā)一個就好了,不會影響到這個根 CA 的所有證書。GoDaddy 是這樣描述的:
Intermediate certificates are used as a stand-in for our root certificate. We use intermediate certificates as a proxy because we must keep our root certificate behind numerous layers of security, ensuring its keys are absolutely inaccessible.
However, because the root certificate itself signed the intermediate certificate, the intermediate certificate can be used to sign the SSLs our customers install and maintain the "Chain of Trust."
根證書可信嗎
根證書大部分是內(nèi)嵌在軟件中(如瀏覽器啦扬、操作系統(tǒng))中狂,所以理論上是可信的,當然也可以自己下載安裝證書扑毡。Apple 官網(wǎng) 可以看到 macOs 所支持的根證書胃榕。在 Windows 上可以運行 certmgr.msc,結(jié)果如: