SSL或TLS握手的概述
SSL或TLS握手創建了用於客戶端和服務端通訊的祕鑰。算法
客戶端和服務端SSL或TLS可以相互通訊的基本步驟:加密
- 確認使用協議的版本
- 選擇加密算法
- 經過交換和驗證數字證書對彼此進行身份驗證
- 使用非對稱加密技術生成共享密鑰,避免了密鑰分發問題。而後SSL或TLS使用共享密鑰對消息進行對稱加密解密,這比非對稱加密更快
綜上所述SSL握手的步驟以下:字符串
- SSL或TLS客戶端先向服務端發送一個加密通訊請求,叫作ClientHello請求。該請求包含如下信息:
- 客戶端支持的SSL或者TLS版本
- 客戶端生成的隨機數,用於生成後續通訊的隨機字符串("對話密鑰")
- 客戶端支持的加密算法
- SSL或TLS服務端收到客戶端請求後,向客戶端發出響應,叫作ServerHello。該響應包含如下信息:
- 服務端從客戶端提供的SSL或TLS列表中選擇的版本
- Sesstion ID 和 另外生成的隨機數
- 服務端的數字證書(若是服務端須要用於客戶端身份驗證的數字證書,則服務端發送一個客戶端證書請求,其中包含受支持的證書類型列表和可接受的認證機構(CAs)的專有名稱。)
- 確認使用的加密算法
- 客戶端收到服務端響應後,首先校驗服務端發來的數字證書決定是否繼續通訊。
- 證書校驗經過,會像服務端發送如下信息:
- 生成一個隨機數,並對這個隨機數用從服務端數字證書中取出的公鑰加密(用與生成後續通訊的「隨機密鑰」)
- 若是服務端發送了一個客戶端證書請求,客戶端將會發送一個用客戶端私鑰加密的隨機字符串和客戶端的數字證書,或者沒有數字證書的警告。在某些強制客戶端證書的實現中,若是客戶端沒有數字證書責握手會失敗
- 服務端接受並驗證客戶端證書
- 客戶端向服務端發送一條完成的消息,該消息使用密鑰加密,表示握手的客戶端部分已經完成。
- 服務端向客戶端發送一條完成的消息,該消息使用密鑰加密,表示握手的服務端部分已經完成
- 在SSL或TLS會話期間,服務端和客戶端如今能夠交換使用共享密鑰對稱加密的消息