(1) 客戶端->服務器端 發送ClientHello:
客戶端向服務器發送ClientHello信息,如:協議的版本號,版本信息,隨機 數C1ientHello1.Random,加密方式(對稱加密算法有DES和RC5,密鑰交換算 法有RSA和DH,摘要算法有MD5和SHA),客戶端公鑰等發送給服務器;
(2) 服務器端->客戶端 發送ServerHello:
服務器向客戶端回答ServerHello, 以及確定加密的組合方式等信息。
(3) 服務器端->客戶端 發送Certificate:
服務器產生一個隨機數ServerHello.Random,和服務器的公鑰(同常和其數字 證書Certificate放在同一個文件),這些都經由之前獲取到的客戶端的公鑰進 行加密後發送給客戶端,
(4) 服務器端->客戶端 發送ServerHelloDone:
驗證成功後,服務器向客戶端發送ServerHelloDone消息,達成了握手協議,即雙方握手接通。
服務器向客戶端要求證書(這是可選擇的,即:可以不向客戶端索要)。
(5) 客戶端->服務器端 發送ClientKeyExchange,ChangeCipherSpec,Finished:
客戶端用客戶端的私鑰解密收到的信息,從解密後的信息中獲取服務器公鑰和證書信息。
if(用手頭的CA公鑰解密服務器的證書後,驗證通過)
if(服務器端未索要證書)
單向認證,客戶端向服務器端發送Finished信息;
else if(服務器端索要了證書)
雙向認證,客戶端向服務器端發送證書,並且服務器端必須對 此證書驗證。
if(服務器端驗證通過)
客戶端向服務器端發送Finished信息;
elseif(驗證未通過)
斷開連接,握手失敗,exit 1
產生新的隨機數,然後用獲取到的服務器公鑰加密隨機數 C1ientHello2.Random、ClientKeyExchange和ChangeCipherSpec信息,
然後發送給服務器。
else if(驗證失敗)
斷開連接, 握手失敗, exit 1。
(6) 服務器端->客戶端 發送ChangecipherSpec和Finished:
服務器端用服務器的私鑰解密獲取到的隨機數C1ientHello2.Random和ClientKeyExchange和ChangeCipherSpec信息
服務器發送握手完成的信息Finished,SSL安全通道開啓;
(7) 服務器端<->客戶端 對稱加密傳輸:
客戶端和服務器端開始使用相同的對稱密鑰進行數據通訊,同時進行通訊完整性的檢驗。