1. 客戶端傳送乙個hello訊息給伺服器,該訊息包含以下引數:
* 客戶端支援的ssl的版本列表
* 客戶端所支援的加密演算法列表
* 隨機數 clienthello.random
2.1 伺服器端回應乙個hello訊息給客戶端,該訊息包含以下內容:
* 握手期間使用的ssl的版本
* 握手期間將使用的金鑰交換演算法 (deffie-hellman演算法,基於rsa的金鑰交換演算法等)
* 握手期間將使用的加密演算法 (des,rc4,rc2,des3等)
* 握手最後使用的mac演算法 (md5或sha-1)
* 隨機數 serverhello.random
2.2 服務端傳送自己的x.509證書或證書鏈 (除了匿名dh交換演算法都需要)
2.3 伺服器傳送server_key_exchange請求
- 可選,僅三種情況需要:
a. 伺服器無證書
b. 伺服器有證書,但是僅能當作簽名 (rsa演算法中步驟3中發出去的證書裡包含的是dss或dsa公鑰,不能拿來加密)
c. 使用fortezza/dms密碼交換
2.4 伺服器傳送certificate_request請求,要求客戶端提供它的證書 (可選)
2.5 伺服器傳送server_done,等待應答
3.1 客戶端檢查伺服器證書,做校驗
3.2 如果服務端請求證書,客戶端傳送自己的證書過去
3.3 客戶端傳送client_key_exchange請求
- 若採用rsa,會產生乙個新的隨機數作為premaster secret,將該隨機數通過證書中公鑰或者server_key_exchange訊息內的臨時rsa金鑰加密發過去
客戶端根據premaster secret, clienthello.random, serverhello.random三個值算出master secret作為對稱金鑰
伺服器端收到premaster secret以後,也根據這三個值算出master secret
- 若採用dh,證書中已包含了dh演算法需要的兩個整數p,g,直接通過演算法根據已經交換的兩個隨機數可以算出premaster secret,伺服器端也可以算出同樣的premaster secret
3.4 如果客戶端傳送了自己的證書,那麼它還會發乙個certificate_verify訊息,對第一條訊息以來所有的握手訊息的hmac值用master secret進行簽名。
3.5 客戶端傳送乙個change_cipher_spec訊息,並將協商好的加密資訊拷貝到當前連線的狀態中,保證以後所有的訊息都用新的密碼規範加解密和認證
3.5 客戶端傳送乙個finished訊息
4. 服務端同樣傳送change_ciper_spec訊息和finish訊息
至此,握手完成,客戶端和伺服器可以進行資料通訊了。
握手時用非對稱加密演算法,保證安全;通訊時用對稱演算法,保證效率。
SSL 握手過程
出處 一 ssl握手有三個目的 1.客戶端與伺服器需要就一組用於 保護資料的演算法達成一致 2.它們需要確立一組由那些演算法所使用的 加密金鑰 3.握手還可以選擇 對客戶端進行認證。三 ssl記錄協議 3.1 記錄頭訊息 記錄頭資訊的工作就是為接收實現 receiving implementatio...
SSL握手過程
一 ssl握手有三個目的 1.客戶端與伺服器需要就一組用於保護資料的演算法達成一致 2.它們需要確立一組由那些演算法所使用的加密金鑰 3.握手還可以選擇對客戶端進行認證。5.客戶端將所有握手訊息的mac值傳送給伺服器 6.伺服器將所有握手訊息的mac值傳送給客戶端。第5與第6步用以防止握手本身遭受篡...
SSL握手過程
一 ssl握手有三個目的 1.客戶端與伺服器需要就一組用於保護資料的演算法達成一致 2.它們需要確立一組由那些演算法所使用的加密金鑰 3.握手還可以選擇對客戶端進行認證。三 ssl記錄協議 3.1 記錄頭訊息 記錄頭資訊的工作就是為接收實現 receiving implementation 提供對記...