1. 程式人生 > >SSL協議握手過程

SSL協議握手過程

今天學習了一下SSL協議的握手內容,在此整理一下,做一個總結。

據說SSL應用廣泛,但本人孤陋寡聞,只知道在http協議的基礎上加上SSL協議即為https協議。眾所周知,https協議比http協議更安全,那麼究竟安全在何處呢,這就要探究SSL協議的機制。

我們以客戶端A和伺服器B的通訊為例講解一下SSL協議的握手過程。

在開始通訊前,需要進行握手(當然了,最重要的還是先建立TCP連線)SSL協議的握手過程如下:

1.客戶端傳送隨機數s1,SSL版本號以及可選的加密演算法給伺服器B

2.伺服器B從可選的加密演算法中選擇其中一種作為伺服器支援的加密演算法(暫且稱其為m),並且產生一個隨機數

s2

伺服器將ms2和一份包含伺服器BRSA公鑰的數字證書傳送給客戶端;該證書還包含了用於認證目的的伺服器標識。

3.客戶端A使用該證書的認證機構CA公開發布的RSA公鑰對該證書進行驗證(如果認證機構不靠譜,那就很難受了),同時客戶端A又產生一個隨機數s3(產生這麼多隨機數我也很絕望),其實s3有一個專門名稱,叫做pre_master_secret。客戶端將使用伺服器B傳送過來的伺服器RSA金鑰匙(就是存放在數字證書中的那個金鑰)s3進行加密後,得到的內容message,將其傳送給B

4.B用自己的私鑰將message解密,此時,客戶端和伺服器都擁有s1,s2,s3的內容,它們將分別利用這三者的內容獨立計算出共享的對稱會話金鑰

(至於怎麼計算的,可自行搜尋DH金鑰交換演算法瞭解,當然我自己也準備寫一篇文章來介紹)。本來有了對稱金鑰,就可以進行通訊了,但是為了防止握手本身遭受篡改,還需要進行以下兩步檢驗:

5.客戶端將所有握手訊息的MAC值傳送給伺服器;

6.伺服器將所有握手訊息的MAC值傳送給客戶端;

圖解過程如下:

有了對稱金鑰後,AB就能更為安全地進行通訊啦!