證書鏈-證書校驗

先來打開一個網站的證書鏈看看:

它的結構是,頂端根證書DigiCert,中間證書GeoTrust RSA CA 2018,和最下級的服務器證書*.csdn.net。爲什麼會有中間證書?原因上一篇日誌說過,由於權威的CA機構數量不多,如果所有的服務器申請證書都將CSR證書請求文件發送到CA機構,那麼CA機構的工作量就會非常大,因此CA機構採取授權二級機構的方式來管理證書申請,經授權的二級機構也可以簽發服務器證書。CA機構授權使用根證書,簽發的二級結構證書,就是中間證書。

 

證書鏈順序

回到證書鏈,在證書認證過程中,由於校驗方,通常爲瀏覽器中,繼承的是權威CA機構的根證書,因此對於一些經授權的中間證書,瀏覽器卻識別不了(當然也有部分中間證書可以被識別),因此仔部署HTTPS網站時,需要構建正確的證書鏈,告訴驗證方,該服務器證書和它的簽署機構,以及根證書(權威CA機構)之間的關係。在證書鏈中,通常分三級結構,根證書,中間證書和服務器實體證書,正確的證書鏈順序中服務器實體證書處在最底端,裏面包含了些服務器域名,服務器公鑰和簽名值等。服務器證書上一級是中間證書,中間證書就是上面提到的由權威CA機構授權的二級機構,可以由它來簽發服務器證書。中間證書可以是由多張證書組合在一起,最上級的是根證書,也就是CA機構,對服務器身份進行校驗時,需要驗證一整個證書鏈,由於瀏覽器中集成了權威CA機構的根證書,因此主要是校驗中間證書和服務器實體證書的簽名值是否正確。

 

信任鏈

校驗服務器身份需要驗證整個證書鏈,從服務器實體證書開始,服務器實體證書的簽發者是上一級中間證書的使用者,中間證書的簽發者是上一級根證書的使用者。每一級證書都有簽名值,根證書使用自己的根CA公鑰驗證自己的簽名,也用來驗證中間證書的簽名值,中間證書的公鑰用來驗證下一級的服務器實體證書籤名值,以此構成一條信任鏈。

 

校驗信任鏈

看到每張證書中都有簽名值,以及上一級證書的公鑰用來驗證下一級證書的簽名值,可以看出,驗證信任鏈的方式用的是數字簽名技術。證書籤名方使用自己的私鑰對證書進行簽名,得到簽名值,然後把使用的簽名算法和簽名值一同放到證書中去,驗證方使用簽名方的公鑰驗證簽名值,如果驗證成功,表明該證書是由簽名方簽發的。下面來看看證書校驗方,也就是瀏覽器校驗證書鏈的過程,主要是校驗中間證書和服務器實體證書的簽名值是否正確。

獲取證書鏈

當瀏覽器訪問一個HTTPS網站時,進行身份驗證,由服務器發送自己的不包含根證書的完整證書鏈給瀏覽器,瀏覽器首先從服務器實體證書開始驗證,查看該域名是不是在證書使用者可選名稱擴展SAN擴展中包含的域名,如果包含,驗證域名成功,接着是證書的有效期驗證,擴展驗證,校驗服務器實體證書中的服務器公鑰,通過查看密鑰用法擴展,看這個服務器公鑰是否用來進行密鑰協商和數字簽名。

接下來,校驗方通過服務器證書中的CA密鑰標識符來獲取上一級的中間證書文件,開始中間證書的校驗。和服務器證書一樣,每一個擴展都由一個critical屬性,要驗證這個屬性的值必須爲true,接着進行日期驗證,密鑰用法擴展。中間證書的公鑰除了包含數字簽名用法外,還要包括Certificate Sign簽名證書用途,CRL Sign證書過期和吊銷簽署用途。最後校驗basic constraints基礎約束擴展,檢驗中間證書是否被允許簽發證書。

迭代驗證

身份驗證方(瀏覽器),在身份驗證時除了驗證服務器實體證書,還要驗證整條信任鏈,保證從服務器實體證書開始,服務器證書的簽發者是它的上一級中間證書的使用者,中間證書的簽發者是它的上一級根證書的使用者。校驗信任鏈的方式是迭代簽名驗證,使用數字簽名技術。從服務器實體證書開始,獲取其上一級中間證書的公鑰來驗證服務器實體證書的簽名值,接着再從中間證書的上一級根證書獲取的公鑰來驗證中間證書的簽名值,一直迭代下去,由於除根證書外,其他級證書的簽發者是其上一級證書的使用者,到達根證書後,根證書的簽發者和使用者都是它自己,所以瀏覽器在進行迭代驗證過程中,發現某一證書的簽發者和使用者都是自己後,表明找到了根證書,最後驗證跟證書時,使用的就是自己的公鑰驗證自己的簽名值,完整整個證書鏈的驗證。

信任錨

信任錨也就是信任的起點,對應的就是根證書,因爲身份校驗方瀏覽器集成了權威CA機構的根證書,即信任了根證書,也就是信任了由根證書籤發的其他證書。

上圖爲Windows中集成的根證書。

發佈了101 篇原創文章 · 獲贊 73 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章