1. 程式人生 > >HTTPS 通訊流程(簽名、數字證書)

HTTPS 通訊流程(簽名、數字證書)

一、簡介

前一篇文章,我總結了下,如何部署https服務,開通ssl通道。但是對於https整個通訊流程還有許多疑惑的地方,所以花了好幾天看了各種資料,其中有的資料也誤導了我,導致我走了些彎路。接下來我就來總結一下,幫助初學者理清https通訊流程。

二、名詞解釋

1、簽名

簽名就是在資訊的後面再加上一段內容,可以證明資訊沒有被修改過,怎麼樣可以達到這個效果呢?一般是對資訊做一個hash計算得到一個hash值,注意,這個過程是不可逆的,也就是說無法通過hash值得出原來的資訊內容。在把資訊傳送出去時,把這個hash值加密後做為一個簽名和資訊一起發出去。接收方在收到資訊後,會重新計算資訊的hash值,並和資訊所附帶的hash值(解密後)進行對比,如果一致,就說明資訊的內容沒有被修改過,因為這裡hash計算可以保證不同的內容一定會得到不同的hash值,所以只要內容一被修改,根據資訊內容計算的hash值就會變化。當然,不懷好意的人也可以修改資訊內容的同時也修改hash值,從而讓它們可以相匹配,為了防止這種情況,hash值一般都會加密後(也就是簽名)再和資訊一起傳送,以保證這個hash值不被修改。但是客戶端如何解密呢?這就涉及到數字證書

了。

2、數字證書

主要包含這幾大塊:

·        證書的釋出機構

·        證書的有效期

·        公鑰

·        證書所有者(Subject)

·        簽名所使用的演算法

·        指紋以及指紋演算法

數字證書可以保證數字證書裡的公鑰確實是這個證書的所有者(Subject)的,或者證書可以用來確認對方的身份。

3、   公鑰私鑰

剛開始的時候以為https只能用公鑰進行加密,私鑰解密,後來看來“公鑰密碼體制”,才知道,其實兩者都可以加密、解密。

4、RSA(非對稱加密)

RSA是一種公鑰密碼體制,現在使用得很廣泛。公鑰公開,私鑰保密,它的加密解密演算法是公開的。由公鑰加密的內容可以並且只能由私鑰進行解密,並且由私鑰加密的內容可以並且只能由公鑰進行解密。也就是說,RSA的這一對公鑰、私鑰都可以用來加密和解密,並且一方加密的內容可以由並且只能由對方進行解密。可用於驗證

hTTPS中各種金鑰的加密。

5、對稱加密

加密使用的金鑰和解密使用的金鑰是相同的。因此對稱加密演算法要保證安全性的話,金鑰要做好保密,只能讓使用的人知道,不能對外公開。

三、通訊流程

為了搞清楚,https是怎樣運轉的,接下來是借鑑一篇博文,並稍加改動,形象易懂的解釋了整個流程。

step1: “客戶”向服務端傳送一個通訊請求

客戶”->“伺服器:你好

step2: “伺服器”向客戶傳送自己的數字證書。證書中有一個公鑰用來加密資訊,私鑰由“伺服器”持有

伺服器”->“客戶:你好,我是伺服器,這裡是我的數字證書

step3: “客戶”收到“伺服器”的證書後,它會去驗證這個數字證書

到底是不是“伺服器”的,數字證書有沒有什麼問題,數字證書如果檢查沒有問題,就說明數字證書中的公鑰確實是“伺服器”的。檢查數字證書後,“客戶”會發送一個隨機的字串給“伺服器”用私鑰去加密。

客戶”->“伺服器:向我證明你就是伺服器,這是一個隨機字串

step4:伺服器把加密的結果返回給“客戶”。

伺服器”->“客戶{一個隨機字串}(用私鑰進行RSA加密)

step5:“客戶”用公鑰解密這個返回結果,如果解密結果與之前生成的隨機字串一致,那說明對方確實是私鑰的持有者,或者說對方確實是“伺服器”。 驗證“伺服器”的身份後,“客戶”生成一個對稱加密演算法金鑰,用於後面的通訊的加密和解密。這個對稱加密演算法金鑰,“客戶”會用公鑰加密後傳送給“伺服器”,別人截獲了也沒用,因為只有“伺服器”手中有可以解密的私鑰。這樣,後面“伺服器”和“客戶”就都可以用對稱加密演算法來加密和解密通訊內容了。

伺服器”->“客戶{OK,已經收到你發來的對稱加密演算法和金鑰!有什麼可以幫到你的?}(用金鑰進行對稱加密)

客戶”->“伺服器{我的帳號是aaa,密碼是123,把我的餘額的資訊發給我看看}(用金鑰進行對稱加密)

伺服器”->“客戶{你好,你的餘額是100}(用金鑰進行對稱加密)