這是SSL在傳輸之前事先用來溝通雙方(用戶端與伺服器端)所使用的加密演算法或密鑰交換演算法,或是在伺服器和用戶端之間安全地交換密鑰及雙方的身分認證等相關規則,讓雙方有所遵循。在身分認證方面,SSLHandshake可用來認證伺服器的身分。SSL Handshake的運作流程如下所述:
▲SSL Handshake的運作流程。
(1) SSL用戶端利用Client Hello訊息將本身支援的SSL版本、加密演算法、演算法等資訊發送給SSL伺服器。
(2) SSL伺服器收到Client Hello訊息並確定本次通訊採用的SSL版本和加密套件後,利用Server Hello訊息回覆給SSL用戶端。
(3) SSL伺服器將利用Certificate訊息將本身公鑰的數位憑證傳給SSL用戶端。
(4) SSL伺服器發送Server Hello Done訊息,通知SSL用戶端版本和加密套件協商結束,並開始進行密鑰交換。
(5) 當SSL用戶端驗證SSL伺服器的證書合法後,利用伺服器的證書中之公鑰加密SSL用戶端隨機生成的Premaster Secret(這是一個用在對稱加密密鑰產生中的46位元組的亂數字),並透過Client Key Exchange消息發送給SSL伺服器。
(6) SSL用戶端發送Change Cipher Spec消息,通知SSL伺服器後續報文將採用協商好的密鑰和加密套件進行加密。
(7) SSL用戶端計算已交互的握手消息的Hash值,利用協商好的密鑰和加密演算法處理Hash值,並透過Finished消息發送給SSL伺服器。SSL伺服器利用同樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,如果兩者相同,則證明密鑰和加密套件協商成功。
(8) SSL伺服器發送Change Cipher Spec訊息,通知SSL用戶端後續傳輸將採用協商好的密鑰和加密套件進行加密。
(9) SSL伺服器計算已交互的握手消息的Hash值,利用協商好的密鑰和加密套件處理Hash值,並透過Finished消息發送給SSL用戶端。SSL用戶端利用同樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,如果兩者相同,且MAC值驗證成功,則證明密鑰和加密套件協商成功。在SSL用戶端接收到SSL伺服器發送的Finished消息後,如果解密成功,則可以判斷SSL伺服器是數位證書的擁有者,即SSL伺服器身分驗證成功。這是因為只有擁有私鑰的SSL伺服器才能從Client Key Exchange消息中解密得到Premaster Secret,從而間接地實現了SSL用戶端對SSL伺服器的身分驗證。