詳解SSL證書中的SSL握手協議
是一種數字證書,利用了SSL安全套接字協議,保證上層應用資料傳輸的保密性、完整性以及傳輸雙發身份的合法性。今天來具體說說SSL握手協議的工作流程。
第一階段:建立安全能力
客戶端-client_hello:
客戶端可以支援的SSL最高版本號;
客戶端生成的32位元組的隨機數;
會話識別符號ID;
客戶端可以支援的密碼套件列表;
客戶端可以支援的壓縮方法列表。
服務端-server_hello:
SSL版本號,取收到的客戶端SSL版本和服務端支援的最高版本中的較低者;
服務端生成的32位元組的隨機數;
會話識別符號ID;
從收到的客戶端密碼套件列表中選擇一個密碼套件(包含金鑰交換演算法、對稱加密演算法、摘要演算法);
從收到的客戶端壓縮方法列表中選擇一種壓縮方法。
第二階段:服務端驗證和金鑰交換
服務端-certificate:
含有公鑰資訊的服務端數字證書或到CA的完整證書鏈。
服務端-server_key_exchange:
可選,根據金鑰協商演算法而定,如果傳送給客戶端的服務端證書資料不足以按照第一階段選定的金鑰交換演算法協商金鑰,該步驟不足金鑰協商元素。ssl證書申請
服務端-certificate_request:
可選,請求驗證客戶端證書資訊,單向資料認證(只認證服務端)無此步驟。
服務端-server_hello_done:
通知客戶端版本號和加密套件協商結束。
第三階段:客戶端驗證和金鑰交換
客戶端-certificate:
可選,客戶端數字證書,雙向資料認證中服務端要求驗證客戶端身份合法性。
客戶端-client_key_exchange:
客戶端交換金鑰,視金鑰交換演算法而定,金鑰協商引數或pre-master key(服務端公鑰加密)。
客戶端-certificate_verify:
可選,客戶端將已互動的握手訊息、會話金鑰的摘要值用客戶端私鑰加密傳送給服務端。
第四階段:完成
客戶端-change_cipher_spec:
改變密碼格式資訊,告訴服務端之後的報文訊息用會話金鑰加密。
客戶端-finished:
向服務端宣佈握手協議完成。
服務端-change_cipher_spec:
改變密碼格式資訊,告訴客戶端之後的報文訊息用會話金鑰加密。
服務端-finished:
向客戶端宣佈握手協議完成。