HTTPS的數字證書驗證原理
我們知道,網路請求中我們的網址分為兩種,分別是HTTP請求和HTTPS請求,而HTTPS是一種在HTTP的基礎上加了SSL/TLS層(安全套接層)的安全的超文字傳輸協議。HTTP的傳輸屬於明文傳輸,所以說是不安全,在傳輸的過程中容易被人擷取並且偷窺其中的內容,而HTTPS傳輸的資訊是通過加密的,也是一種安全的傳輸。
說到加密演算法,我們先來了解一下兩種常用的加密方式,分別是對稱加密和非對稱加密:
1.對稱加密:加密使用的祕鑰和解密使用的祕鑰是相同的,也就是說加密和解密都使用同一個祕鑰,加密演算法是公開的,祕鑰是加密者和解密者絕對保密的。
2.非對稱加密:加密使用的祕鑰和解密使用的祕鑰是不相同的,HTTPS在數字證書驗證的時候,採用的RSA密碼體制就是一種非對稱加密。
RSA是一種公鑰祕鑰密碼體制,現在使用非常廣泛,這個密碼體制分為三部分,公鑰、私鑰、加密演算法,其中公鑰和加密演算法是公佈的,私鑰是自己保密的。這種機制最大的特點是,通過公鑰加密的密文只有對應的私鑰才能解密,同樣通過私鑰加密的密文也是隻有對應的公鑰才能解密。下面我們將會講到HTTPS是如何通過RSA這種密碼體制去驗證身份的。
我們講解一下這個數字證書,這個有點像身份證,是由權威的CA機構頒發的,證書的主要內容有:公鑰、ISSUER(證書的釋出機構)、subject(證書持有者)、證書有效期、簽名演算法、指紋及指紋演算法。其中指紋是指這個證書是簽名,這個很重要,是用來驗證證書內容有沒有被篡改的。證書在釋出之前,ca機構會把證書內容用自己的私鑰通過指紋演算法計算出一個hash值,這個hash值只能通過頒發證書的ca機構的公鑰去解密,所以在驗證證書的時候,我們通過同樣的指紋演算法把接收到的證書內容進行hash計算得到另一個hash值,如果這個hash值跟證書上自帶的hash值相同,就代表證書沒有被修改過。
下面我們通過簡單的圖例來解析一下,整個HTTPS的數字證書的驗證過程是怎麼樣的,通過下面的分析,我們就可以明瞭為什麼HTTPS傳輸是安全的了。
圖示如下:
下面我們基於整個流程圖來講解數字證書的驗證過程,假設我們是一個瀏覽器的HTTPS請求。
1.首先我們的瀏覽器通過URL網址去請求某個後臺伺服器,伺服器接收到請求後,就會給瀏覽器傳送一個自己的ca數字證書。
2.瀏覽器接收到數字證書以後,就要進行驗證工作了。首先從證書的內容中獲取當前證書的頒發機構,然後從瀏覽器系統中去尋找此頒發機構是否為瀏覽器的信任機構。這裡解析一下,世界上就幾個權威的ca機構,這幾個機構都是預先嵌入到我們的瀏覽器系統中的。如果接收到的證書的頒發機構沒有在我們瀏覽器系統中的,那麼就會有警告提示,無法確認證書的真假。如果是受信任的機構,那麼就到下一步。
此時我們就可以從瀏覽器中找到機構根證書上的公鑰,用這個公鑰去可以去解析證書的簽名得到一個hash值H1,上面提到過,這個簽名是證書釋出之前機構用自己的私鑰加密而成的,所以這裡只能由對應的公鑰去解析。然後我們用證書的指紋演算法對證書的內容也進行一次hash計算得到另一個hash值H2,通過H1和H2的比對,如果相等,就代表證書沒有被修改過,可以信任的。此時我們再檢查證書的持有者的ID即對應的URL是否為我們請求的URL,如果是,那麼就可以證明瀏覽器當前連線的是正確的網址,而不是一些釣魚網之類的。
這裡我們假設,如果瀏覽器的連線被某個釣魚網截取了,釣魚網也是可以發一個自己的證書給瀏覽器,此時通過上面的驗證步驟,首先我們在證書沒有被篡改的情況下,我們對比證書上的URL和我們請求的URL,就可以知道我們連線的那個網址是不是正確的。所以說釣魚網就不能騙過我們了。
3.此時第二步完成了,我們可以確認是瀏覽器的連線網址是正確的,是我們想要連線的那個伺服器,而此時我們也拿到了證書上的公鑰。下一步有一個很重要的任務就是,將一個對稱加密演算法的祕鑰安全地發給伺服器。我們是這樣做的,我們將隨機產生一個字串R作為我們的祕鑰,然後通過證書公鑰加密成密文,然後將密文傳送給伺服器。因為此密文是用公鑰加密的,這是一個非對稱加密,是公鑰密碼機制(RSA)下的加密,上面我們講解過,此機制情形下,只有祕鑰的持有者才能對這個密文進行解密。所以說只有持有祕鑰的伺服器才能解析到密文內容。任何沒有祕鑰的第三方擷取到密文也是沒用的,因為解析不出來。
這裡還有一個很重要的步驟是,傳送密文的時候,我們會對訊息內容進行簽名操作。簽名我們上面講解過,就是對密文內容進行一次hash計算得到一個hash值,同時將這個hash值進行加密和訊息內容一起傳送出去。接收方收到訊息以後,通過私鑰解析密文,同時也會對訊息內容進行同樣的hash計算得到hash值,通過比對兩個hash值是否相同來判斷密文是否有修改過。
4.通過第三步的操作,此時客戶端和伺服器都擁有了同樣的對稱加密演算法的祕鑰,因為只有它們兩者知道,所以這時它們就可以愉快地安全通訊了。
5.通過上面我們可以看到,有兩個非常重要的步驟,第一是驗證數字證書的正確性還有連線網址是否正確,第二是通過RSA機制的原理安全地進行了對稱加密演算法祕鑰的傳遞。這兩步安全完成以後,整個HTTPS的數字證書的驗證就算是成功了。
好了,通過上面 的講解,相信我們已經理解整個HTTPS請求是怎樣進行數字證書的安全驗證了。