SSL/TLS 鏈接的建立/握手


HTTPS 即 HTTP-within-SSL/TLS,其中 SSL/TLS 又分別表示:

  • SSL:Secure Sockets Layer
  • TLS:Transport Layer Security

SSL/TLS 建立鏈接及握手的過程為:

SSL/TLS 建立鏈接及握手的示意圖

SSL/TLS 建立鏈接及握手的示意圖

階段一

  • Client Hello
    • 客戶端向服務器發送
      • 隨機數 Random1
      • 客戶端支持的加密套件 Support Ciphers
      • SSL 版本
  • Server Hello
    • 服務器向客戶端發送
    • 從客戶端發送加密套件列表中選擇一個,加密套件決定了后續加密及生成摘要的算法
    • 生成隨機數Random2。兩端的隨機數會在后續生成對稱密鑰時使用。

階段二

  • Certificate
    • 服務器將自己的證書下發給客戶端,讓客戶端驗證服務器的身份。( 12306 曾經使用國內自己簽發的證書,結果 Chrome 不認就是這個道理)
    • 客戶端驗證后從證書取出公鑰
  • Server Key Exchange
    • DH 算法需要此步驟,發送服務器使用的 DH參數,RSA 不需要
  • Certificate Request
    • 可選。服務器要求客戶端上報證書。對安全性要求極高時使用。
  • Server Hello Done
    • 通知客戶端 Server Hello 結束

階段三

  • Certificate Verify

    • 客戶端收到證書后從CA驗證其合法性。
    • 驗證合法后從證書取出公鑰,生成隨機數 Random3
    • 使用公鑰非對稱加密Random3 生成 PreMaster Key
  • Client Key Exchange

    • 客戶端將 PreMaster Key 發送服務器,服務器用自己的私鑰解出 Random3。
    • 此時兩端都擁有 Random 1~3
    • 兩端使用相同的算法生成密鑰,握手結束后的數據傳輸都使用此密鑰進行對稱加密。
  • 為何需要三個隨機數?

    • 因為SSL/TSL 握手過程數據明文傳輸,多個隨機數種子生成的密鑰不容易暴力破解。

階段四

  • Change Cipher Spec (Client)
    • 這是一條事件消息
    • 客戶端通知服務端后續消息都會使用前面協商出來的密鑰加密。
  • Encrypted Handshake Message (Client)
    • 這是條 Client Finish 消息
      • 客戶端將前面的握手消息生成摘要,使用前面協商的密鑰加密。
    • 這是客戶端發出的第一條加密消息
    • 服務端使用密鑰解密,解密成功說明密鑰一致。
  • Change Cipher Spec (Server)
    • 事件消息
    • 服務端通知客戶端后續消息都使用加密。
  • Encrypted Handshake Message (Server)
    • Server Finish 消息
    • 服務端將握手過程生成摘要
    • 使用密鑰加密發送給客戶端
    • 這是服務端發送的第一條加密消息
    • 客戶端收到后解密,成功說明密鑰一致。

相關資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM