首先說說證書的簽發(fā)過程:
-
服務(wù)方 S 向第三方機(jī)構(gòu)CA提交公鑰、組織信息、個人信息(域名)等信息并申請認(rèn)證;
-
CA 通過線上、線下等多種手段驗(yàn)證申請者提供信息的真實(shí)性,如組織是否存在、企業(yè)是否合法,是否擁有域名的所有權(quán)等;
-
如信息審核通過,CA 會向申請者簽發(fā)認(rèn)證文件-證書。
證書包含以下信息:申請者公鑰、申請者的組織信息和個人信息、簽發(fā)機(jī)構(gòu) CA 的信息、有效時間、證書序列號等信息的明文,同時包含一個簽名;
簽名的產(chǎn)生算法:首先,使用散列函數(shù)計(jì)算公開的明文信息的信息摘要,然后,采用 CA 的私鑰對信息摘要進(jìn)行加密,密文即簽名;
-
客戶端 C 向服務(wù)器 S 發(fā)出請求時,S 返回證書文件;
-
客戶端 C 讀取證書中的相關(guān)的明文信息,采用相同的散列函數(shù)計(jì)算得到信息摘要,然后,利用對應(yīng) CA 的公鑰解密簽名數(shù)據(jù),對比證書的信息摘要,如果一致,則可以確認(rèn)證書的合法性,即公鑰合法;
-
客戶端然后驗(yàn)證證書相關(guān)的域名信息、有效時間等信息;
-
客戶端會內(nèi)置信任 CA 的證書信息(包含公鑰),如果CA不被信任,則找不到對應(yīng) CA 的證書,證書也會被判定非法。
在這個過程注意幾點(diǎn):
- 申請證書不需要提供私鑰,確保私鑰永遠(yuǎn)只能服務(wù)器掌握;
- 證書的合法性仍然依賴于非對稱加密算法,證書主要是增加了服務(wù)器信息以及簽名;
- 內(nèi)置 CA 對應(yīng)的證書稱為根證書,頒發(fā)者和使用者相同,自己為自己簽名,即自簽名證書;
- 證書=公鑰+申請者與頒發(fā)者信息+簽名;
瀏覽器CA認(rèn)證流程
-
客戶端向一個需要https訪問的網(wǎng)站發(fā)起請求。
-
服務(wù)器將證書發(fā)送給客戶端進(jìn)行校驗(yàn)。證書里面包含了其公鑰。這里要特別說一下客戶端到底 如何來校驗(yàn)對方發(fā)過來的數(shù)字證書是否有效。
首先在本地電腦尋找是否有這個服務(wù)器證書上的ca機(jī)構(gòu)的根證書。如果有繼續(xù)下一步,如果沒有彈出警告。
使用ca機(jī)構(gòu)根證書的公鑰對服務(wù)器證書的指紋和指紋算法進(jìn)行解密。 得到指紋算法之后,拿著這個指紋算法對服務(wù)器證書的摘要進(jìn)行計(jì)算得到指紋。
將計(jì)算出的指紋和從服務(wù)器證書中解密出的指紋對比看是否一樣如果一樣則通過認(rèn)證。
-
校驗(yàn)成功之后,客戶端會生成一個隨機(jī)串然后使用服務(wù)器證書的公鑰進(jìn)行加密之后發(fā)送給服務(wù)器。
-
服務(wù)器通過使用自己的私鑰解密得到這個隨機(jī)值。
-
服務(wù)器從此開始使用這個隨機(jī)值進(jìn)行對稱加密開始和客戶端進(jìn)行通信。
-
客戶端拿到值用對稱加密方式 使用隨機(jī)值進(jìn)行解密。
為什么不一直使用非對稱進(jìn)行加密,而是在類似握手之后開始使用對稱加密算法進(jìn)行https通信:
非對稱加密的消耗和所需的計(jì)算以及時間遠(yuǎn)比對稱加密消耗要大,所以在握手和認(rèn)證之后,服務(wù)器和客戶端就開始按照約定的隨機(jī)串,對后續(xù)的數(shù)據(jù)傳輸進(jìn)行加密。
特點(diǎn):
非對稱加密相比對稱加密更加安全
非對稱加密算法對加密內(nèi)容的長度有限制
CA數(shù)字證書作用之一是公鑰分發(fā)
數(shù)字簽名的簽發(fā)過程是私鑰加密,公鑰解密
|