握手協定是指使用者端和伺服器之間交換的一系列訊息。
型別 | 長度 | 內容 |
---|---|---|
1位元組 | 3位元組 | ≥0位元組 |
表示10種訊息中的一種。所有型別如下:
hello_request | 空 |
---|---|
client_hello | 建立初始的邏輯連線 |
server_hello | 同上 |
certificate | 一系列證書 |
certificate_request | 請求證書 |
certificate_verify | 證書驗證 |
server_key_change | 伺服器祕鑰交換 |
client_key_change | 使用者端祕鑰交換 |
server_done | 訊息結束,等待回覆 |
finished | 密碼已經變更完成 |
訊息長度(位元組)。
由使用者端發起,建立初始的邏輯連線,併為後面的階段交換所需引數。
client hello訊息內容:
server hello訊息:
版本號:決定使用的版本號。
亂數:伺服器生成的亂數(也同時生成了時間戳)。
對談標識:
若使用者端發的是0值:則伺服器生成一個新連線,發回新ID。
若使用者端是非0值:則伺服器傳送同樣的數值。
密碼組:決定使用的密碼組。
壓縮方法:決定使用的壓縮方法。
密碼組詳情
- 交換金鑰的方法
① RSA 非對稱加密
② 固定DH
③ 瞬時DH
④ 匿名DH- cipher spec 密碼說明
① 密碼演演算法(任何演演算法,如RC4,DES3,IDEA等)
② MAC演演算法(MD5,SHA-1)
③ 密碼型別(流 / 塊)
④ 可否出口(可 / 不可)???
⑤ 雜湊長度(0 / 16(MD5) / 20(SHA-1))
⑥ 金鑰材料???
⑦ IV大小(CBC分組的初始向量大小)
.
.
伺服器承接階段1,繼續傳送訊息,可能傳送 對自己身份的認證,金鑰引數(哪個金鑰?)和請求使用者端表明身份等等。
certificate 訊息:
server_key_change 訊息:
certificate request訊息:
server done 訊息:
表明伺服器hello結束,等待使用者端應答。
無引數
.
.
在收到server done後,使用者端檢驗伺服器的證書合不合法,再檢驗server hello的引數能否接受。一切無誤之後,開始向伺服器傳送訊息。
certificate 訊息:
client key change 訊息:
certificate verify 訊息:
.
.
change cipher spce 訊息(不屬於握手協定):
client finished 訊息:
change cipher spce 訊息(不屬於握手協定):
server finished 訊息:
.
.
.
.
.
.