SSL/TLS握手協定

2020-09-25 11:01:29

握手協定是指使用者端和伺服器之間交換的一系列訊息。

訊息格式

型別長度內容
1位元組3位元組≥0位元組
型別

表示10種訊息中的一種。所有型別如下:

hello_request
client_hello建立初始的邏輯連線
server_hello同上
certificate一系列證書
certificate_request請求證書
certificate_verify證書驗證
server_key_change伺服器祕鑰交換
client_key_change使用者端祕鑰交換
server_done訊息結束,等待回覆
finished密碼已經變更完成
長度

訊息長度(位元組)。

內容

階段1:建立安全功能

由使用者端發起,建立初始的邏輯連線,併為後面的階段交換所需引數。
在這裡插入圖片描述

client hello訊息內容:

  1. 版本號:使用者端支援的最高TLS版本。
  2. 亂數:32位元的時間戳 + 使用者端生成的28位元組的亂數。可以為這次握手防止重放攻擊,但不作為後續金鑰的引數。
  3. 對談標誌:分為0值和非零值。
    0值:使用者端想在新對談上建立一個新連線。
    非0值:在原對談上建立一個新連線。
  4. 密碼組:按優先順序降序排列的密碼演演算法列表。表中每行包括2個元素:金鑰交換方法和CipherSpec(密碼說明)。
  5. 壓縮方法:使用者端支援的所有壓縮方法的列表。

server hello訊息:

  1. 版本號:決定使用的版本號。

  2. 亂數:伺服器生成的亂數(也同時生成了時間戳)。

  3. 對談標識:
    若使用者端發的是0值:則伺服器生成一個新連線,發回新ID。
    若使用者端是非0值:則伺服器傳送同樣的數值。

  4. 密碼組:決定使用的密碼組。

  5. 壓縮方法:決定使用的壓縮方法。

密碼組詳情

  1. 交換金鑰的方法
    ① RSA 非對稱加密
    ② 固定DH
    ③ 瞬時DH
    ④ 匿名DH
  2. cipher spec 密碼說明
    ① 密碼演演算法(任何演演算法,如RC4,DES3,IDEA等)
    ② MAC演演算法(MD5,SHA-1)
    ③ 密碼型別(流 / 塊)
    ④ 可否出口(可 / 不可)???
    ⑤ 雜湊長度(0 / 16(MD5) / 20(SHA-1))
    ⑥ 金鑰材料???
    ⑦ IV大小(CBC分組的初始向量大小)

.
.

階段2:伺服器的認證和金鑰交換

伺服器承接階段1,繼續傳送訊息,可能傳送 對自己身份的認證,金鑰引數(哪個金鑰?)和請求使用者端表明身份等等。
在這裡插入圖片描述
certificate 訊息:

  • 內容:一個或一組X.509證書(證明伺服器身份,具體檢視X.509部分)。
  • 不需要certificate訊息:使用匿名DH 。
  • 若是固定DH 會在此訊息中附加伺服器DH公鑰的引數(後面無需再發server key change訊息)

server_key_change 訊息:

  • 不需要此訊息的情況:
    ① 若伺服器傳送了帶有固定DH的引數的certificate訊息;
    ② 若使用RSA金鑰交換(???)。
    .
  • 必需此訊息的情況:
    ① 匿名DH(兩個全域性DH值 和 伺服器DH公鑰)。
    ② 瞬時DH(三個DH引數))。
    ③ RSA,且伺服器僅用了RSA簽名金鑰。???

certificate request訊息:

  • 內容:證書型別 + 簽證機構。
  • 證書型別:表明公鑰演演算法和它對應的用途???
    RSA:僅用於簽名
    DSS:僅用於簽名
    固定DH的RSA:傳送RSA簽名證書,其簽名僅用於認證。
    固定DH的DSS:僅用於認證。
  • 簽證機構:可接受的簽證機構列表

server done 訊息:

  • 表明伺服器hello結束,等待使用者端應答。

  • 無引數

.
.

階段3:使用者端的認證和金鑰交換

在收到server done後,使用者端檢驗伺服器的證書合不合法,再檢驗server hello的引數能否接受。一切無誤之後,開始向伺服器傳送訊息。

階段3
certificate 訊息:

  • 如果伺服器發了certificate request,那麼使用者端才會迴應certificate。
    若不能提供合適的證書,使用者端會發一條「無證書警告」。

client key change 訊息:

  • 內容 依賴於雙方共同決定的金鑰交換型別:
    ① RSA:.使用者端生成的48位元組次金鑰,並用伺服器certificate中的公鑰 / server key change中的臨時RSA金鑰加密。後面用它生成主金鑰。???
    ② 瞬時DH 和 匿名DH:傳送使用者端DH公鑰引數。
    ③ 固定DH:由於certificate訊息中已包含DH引數,故此條訊息為空。

certificate verify 訊息:

  • 提供對使用者端證書的精準認證。(只有使用者端證書具有簽名能力時才會傳送)???

.
.

階段4:完成

4
change cipher spce 訊息(不屬於握手協定):

  • 使用者端示意 變更密碼規範,並從cipher spec中複製,以掛起cipher spec。
  • 於是使用者端開始以新的演演算法和金鑰傳送訊息

client finished 訊息

  • 使用者端傳送完成訊息。

change cipher spce 訊息(不屬於握手協定):

  • 在收到上面2個訊息後,伺服器 變更密碼規範,也從cipher spec中複製,以掛起cipher spec。
  • 於是伺服器開始以新的演演算法和金鑰傳送訊息

server finished 訊息

  • 伺服器傳送完成訊息。

.

此時 握手完成,使用者端和伺服器開始交換應用層資料。

.
.
.

.
.