TLS 原理-TLS1.2及之前的版本


原理-TLS1.2及之前的版本

協議握手,建立會話

  1. 客戶端 Hello 消息,攜帶以下信息

    1. 協議版本,目前有 sslv2,sslv3,tls1.0,tls1.1,tls1.2,tls1.3
    2. 客戶端產生的隨機數,用於后面生成會話 key
    3. 客戶端支持加密算法列表,按優先級從高到低排序
  2. 服務器 Hello 消息,攜帶以下信息

    1. ssl 證書

    2. 服務器選擇的加密算法,根據客戶端發送的加密算法列表,和服務器端支持的加密算法,取交集,取優先級最高的;可能跟具體的軟件實現也有關系

    3. 服務器端產生的隨機數,用於后面產生會話 key

  3. 客戶端驗證服務器的 ssl 證書

    1. 協商一些加密算法的參數,比如 橢圓曲線類的加密算法,會協商一些額外的加密相關的參數

    2. 根據密鑰交換協議和加密算法協議,和服務器端協商出一個 預主密鑰

  4. 生成會話 key

    1. 從 客戶端隨機數,服務器隨機數,預主密鑰 生成會話 key
  5. 客戶端和服務器使用 會話 key 通信

密鑰交換協議

  1. 目前主要的密鑰交換協議,相關的密鑰交換協議又有各自的變體和增強
    1. RSA
      1. 靜態的RSA算法,在 TLS1.3 中已經禁止
    2. DH
      1. TLS1.3 中全面使用 ECDHE
    3. PSK
      1. TLS1.3 新增,用於復用之前的會話 key,減少連接建立時間,但是會缺乏前向安全性
  2. RSA 和 DH 不同的地方,主要是在 如何生成 預主密鑰,參看 https://www.cloudflare.com/zh-cn/learning/ssl/what-happens-in-a-tls-handshake/

加密套件的寫法

  1. RFC 和 不同的軟件實現,有不同的描述方式,但是實際的 16 進制編碼是一致的
    示例參看 https://ciphersuite.info/cs/TLS_PSK_WITH_3DES_EDE_CBC_SHA/
  2. 加密套件的寫法中,一般主要包括 3 個內容
    1. 密鑰交換算法,主要用於證書認證,協商加密算法,生成 預主密鑰等
      1. 又可以細分為
        1. 密鑰交互算法,如RSA, ECDHE, ECDH, SRP 等
        2. 證書認證算法,比如 DSA, ECDSA, RSA, PSK 等,DSA 證書在 TLS1.3 中禁用
        3. 如果不能識別,則使用 openssl ciphers -v 查看,或者上網查詢
    2. 加密算法,即根據會話 key 加密消息的算法
      1. 又可細分為
        1. 加密算法,如 AES-128, AES-256,SEED 等
        2. 加密模式,如 GCM, CBC, CBC3 等
        3. 如無法識別,可以使用 openssl ciphers -v 來確認,或者上網查看
    3. 摘要算法,用於對 ssl 會話中的 協議消息,數據消息,計算摘要和簽名,保證信息的完整性
  3. 由於在加密套件的寫法中,對於上述的 3 點沒有明顯的分隔符,因此在解讀不同的加密算法套件,需要自行上網查詢,確認當前加密算法套件中的 密鑰交換算法,加密算法,摘要算法
    1. 也可以使用 openssl ciphers -v 來查看加密套件,所使用的密鑰交互算法/加密算法/摘要算法
  4. 使用 curl, haproxy 這些軟件時,要注意,加密算法的參數都是直接傳遞給 ssl 協議實現的后端的
    1. 目前 linux 上主要使用的 ssl 協議
      1. openssl, 可以使用 openssl ciphers 查看支持的加密套件
        1. 目前已知 ubuntu 16.04 上的 haproxy 使用 openssl 編譯
        2. 加密算法套件的說明,見 man ciphers
      2. gnutls,可以使用 gnutls-cli -l 查看支持的加密套件
        1. 目前已知 ubuntu 16.04 上的 curl 使用gnutls 編譯
    2. 在處理 ssl 會話建立失敗時,要注意不同的 ssl 協議實現的區別

參看

  1. RFC8446: The Transport Layer Security (TLS) Protocol Version 1.3
  2. RFC5246: The Transport Layer Security (TLS) Protocol Version 1.2
  3. RFC4346: The Transport Layer Security (TLS) Protocol Version 1.1
  4. RFC6066: Transport Layer Security (TLS) Extensions: Extension Definitions


免責聲明!

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



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