HTTPS的數字證書驗證原理

HTTPS的數字證書驗證原理

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接: https://blog.csdn.net/liuxingrong666/article/details/83869161

網絡請求方式一般分爲兩種,分別是HTTP請求和HTTPS請求,其中HTTP的傳輸屬於明文傳輸,在傳輸的過程當中容易被人截取而且偷窺其中的內容,而HTTPS是一種在HTTP的基礎上加了SSL/TLS層(安全套接層)的安全的超文本傳輸協議,其傳輸的內容是經過加密獲得的,因此說是一種安全的傳輸。html

說到加密算法,先來了解一下兩種經常使用的加密方式,分別是對稱加密和非對稱加密:算法

1.對稱加密:加密使用的祕鑰和解密使用的祕鑰是相同的,也就是說加密和解密都使用同一個祕鑰,加密算法是公開的,祕鑰是加密者和解密者絕對保密的。瀏覽器

2.非對稱加密:加密使用的祕鑰和解密使用的祕鑰是不相同的,HTTPS在數字證書驗證的時候,採用的RSA密碼體制就是一種非對稱加密。安全

RSA是一種公鑰祕鑰密碼體制,如今使用很是普遍,這個密碼體制分爲三部分,公鑰、私鑰、加密算法,其中公鑰和加密算法是公佈的,私鑰是本身保密的。這種機制最大的特色是,經過公鑰加密的密文只有對應的私鑰才能解密,一樣經過私鑰加密的密文也只有對應的公鑰才能解密。下面咱們將會講到HTTPS是如何經過RSA這種密碼體制去驗證身份的。服務器

首先了解一下數字證書,它有點像身份證,是由權威的CA機構頒發的,證書的主要內容有:公鑰(Public Key)、ISSUER(證書的發佈機構)、Subject(證書持有者)、證書有效期、簽名算法、指紋及指紋算法。網絡

下面csdn博客的CA證書內容:網站

能夠看到公鑰是一串很長的2048 Bits的字符串,同時也能夠看到<使用者>的內容包含了csdn.net網址,這個網址是CSDN惟一擁有的,後面驗證連接url是否正確的時候用到,還有頒發者、有效期、簽名哈希算法等等。固然還有指紋及指紋算法等其餘內容,咱們滾動到下面看看另一個截圖加密

上面是CSDN網站CA證書,頒發者是GeoTrust,它就是權威的CA機構之一。到這裏特別說明一下,CA機構除了給別人頒發證書之外,它也有本身的證書,爲了區分咱們稱它爲根證書,根證書也有本身的公鑰和私鑰,咱們稱之爲根公鑰和根私鑰。而後根公鑰和加密算法是向外公佈的,而根私鑰是機構本身絕對保密的。這個根證書在驗證證書的過程當中起着核心的做用。url

指紋是什麼?指紋是一個證書的簽名,是經過指紋算法sha1計算出來的一個hash值,是用來驗證證書內容有沒有被篡改的。證書在發佈以前,CA機構會把所頒發證書的內容用本身的根私鑰經過指紋算法計算獲得一個hash值,這個hash值只有對應的根公鑰才能解密,因此在驗證證書的時候,咱們經過一樣的指紋算法將證書內容經過計算獲得另外一個hash值,若是這個hash值跟證書上的簽名解析出來的hash值相同,就表明證書沒有被篡改過。spa

下面基於一個簡單的圖例,去分析整個HTTPS的數字證書驗證過程:

圖示以下:

假設這是一個瀏覽器的HTTPS請求

一:首先瀏覽器經過URL網址去請求某個後臺服務器,後臺接收到請求後,就會給瀏覽器發送一個本身的CA數字證書。

二:瀏覽器接收到數字證書之後,就要開始進行驗證工做了。首先從證書的內容中獲取證書的頒發機構,而後從瀏覽器系統中去尋找此頒發機構是否爲瀏覽器的信任機構。這裏解析一下,世界上就幾個權威的CA機構,這幾個機構的信息都是預先嵌入到咱們的瀏覽器系統中的。若是收到的一個數字證書但其頒發機構沒有在咱們瀏覽器系統中的,那麼就會有警告提示沒法確認證書的真假。若是是受信任的機構,那麼就到下一步。

此時咱們就能夠從瀏覽器中找到CA機構的根公鑰,用這個公鑰去解析證書的簽名獲得一個hash值H1,上面提到過,這個簽名是證書發佈以前CA機構用本身的根私鑰加密而成的,因此這裏只能由根證書的根公鑰去解密。而後用證書的指紋算法對證書的內容再進行hash計算獲得另外一個hash值H2,若是此時H1和H2是相等的,就表明證書沒有被修改過。在證書沒有被修改過的基礎上,再檢查證書上的使用者的URL(好比csdn.net)和咱們請求的URL是否相等,若是相等,那麼就能夠證實當前瀏覽器鏈接的網址也是正確的,而不是一些釣魚網之類的。

這裏咱們假設,若是瀏覽器的鏈接被某個釣魚網截取了,釣魚網也能夠發一個本身的證書給瀏覽器,而後也能夠經過證書沒有被篡改的驗證,可是在證書沒有被篡改的狀況下,經過對比證書上的URL和咱們請求的URL,就能夠發現這個證書的URL不是咱們所要鏈接的網址,因此說釣魚網也騙不了咱們。

看到這裏若是還不是很明白證書驗證過程的話,我特別解析一下,咱們知道CA機構有本身的根公鑰和根私鑰。在證書頒發以前,機構會用根私鑰將這個證書內容加密獲得一個簽名,這個簽名只能用對應的根公鑰去解密。在客戶端(瀏覽器)收到服務端發過來的證書之後,咱們首先從瀏覽器中拿到機構的根公鑰,用這個根公鑰去解析證書的簽名獲得一個哈希值H1,這個H1表明證書的原始內容,假設這個證書上的簽名是不法分子僞造的,可是僞造的簽名不多是根私鑰加密生成的(由於根私鑰是CA機構私有),因此根公鑰也不可能去解密任何第三方生成的簽名(加密內容只能由對應的公鑰私鑰解析)。而後咱們再用一樣的哈希算法對收證書內容進行計算獲得哈希值H2,經過對比H1和H2是否相等就知道證書有沒有被褚篡改過了。講到這裏,咱們應該明白證書是否被篡改的驗證機制了吧。

三:到這裏,已經驗證了證書是沒有被篡改的而且確認鏈接的URL也是正確的,而後咱們獲取到了證書上的公鑰。下一步有一個很重要的任務就是,如何將一個對稱加密算法的祕鑰安全地發給服務器。

首先隨機生成一個字符串S做爲咱們的祕鑰,而後經過證書公鑰加密成密文,將密文發送給服務器。由於此密文是用公鑰加密的,這是一個非對稱加密,咱們知道,這個密文只有私鑰的持有者才能進行解密,因此說任何第三方截取到密文也是沒用的,由於沒有對應的私鑰因此解析不出來。

一個關鍵步驟,發送密文的時候也會對消息內容進行簽名操做。簽名上面講解過,就是對密文內容進行hash計算獲得的一個hash值,將這個簽名加密之後和消息內容一塊兒發送出去。接收方收到消息之後,經過私鑰解析出密文和簽名的hash值,同時也會對接收的消息內容進行一樣的計算獲得另外一個hash值,經過比對兩個hash值是否相同來判斷密文是否有修改過。

四:經過了上面的步驟之後,此時客戶端和服務端都持有了對稱加密算法的祕鑰,而後兄弟兩就能夠愉快地安全通訊了。

總結:數字證書的驗證有兩個重要的步驟,第一是驗證數字證書沒有被篡改以及鏈接的URL是否正確,第二是經過RSA機制的原理安全地將對稱加密算法的祕鑰發送給對方。這兩步都完成之後,整個HTTPS的數字證書的驗證就算是成功了。

好了,經過上面 的講解,相信咱們已經掌握了https的數字證書驗證原理了。

相關文章
相關標籤/搜索