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的這一對公鑰、私鑰都可以用來加密和解密,並且一方加密的內容可以由並且只能由對方進行解密。可用於驗證
5、對稱加密
加密使用的金鑰和解密使用的金鑰是相同的。因此對稱加密演算法要保證安全性的話,金鑰要做好保密,只能讓使用的人知道,不能對外公開。
三、通訊流程
為了搞清楚,https是怎樣運轉的,接下來是借鑑一篇博文,並稍加改動,形象易懂的解釋了整個流程。
step1: “客戶”向服務端傳送一個通訊請求
“客戶”->“伺服器”:你好
step2: “伺服器”向客戶傳送自己的數字證書。證書中有一個公鑰用來加密資訊,私鑰由“伺服器”持有
“伺服器”->“客戶”:你好,我是伺服器,這裡是我的數字證書
step3: “客戶”收到“伺服器”的證書後,它會去驗證這個數字證書
“客戶”->“伺服器”:向我證明你就是伺服器,這是一個隨機字串
step4:伺服器把加密的結果返回給“客戶”。
“伺服器”->“客戶”:{一個隨機字串}(用私鑰進行RSA加密)
step5:“客戶”用公鑰解密這個返回結果,如果解密結果與之前生成的隨機字串一致,那說明對方確實是私鑰的持有者,或者說對方確實是“伺服器”。 驗證“伺服器”的身份後,“客戶”生成一個對稱加密演算法和金鑰,用於後面的通訊的加密和解密。這個對稱加密演算法和金鑰,“客戶”會用公鑰加密後傳送給“伺服器”,別人截獲了也沒用,因為只有“伺服器”手中有可以解密的私鑰。這樣,後面“伺服器”和“客戶”就都可以用對稱加密演算法來加密和解密通訊內容了。
“伺服器”->“客戶”:{OK,已經收到你發來的對稱加密演算法和金鑰!有什麼可以幫到你的?}(用金鑰進行對稱加密)
“客戶”->“伺服器”:{我的帳號是aaa,密碼是123,把我的餘額的資訊發給我看看}(用金鑰進行對稱加密)
“伺服器”->“客戶”:{你好,你的餘額是100元}(用金鑰進行對稱加密)