TLS/SSL 協議 - ClientHello


ClientHello

在一次新的握手流程中,ClientHello消息總是第一條消息。這條消息將客戶端的功能和首選項傳送給服務器。客戶端會在新建連接后,希望重新協商或者響應服務器發起的重新協商請求(由HelloRequest消息指示)時,發送這條消息。

Wireshark 抓取ClientHello消息:

  • Version
    協議版本(protocol version)指示客戶端支持的最佳協議版本。從低到高依次 SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2,當前基本不再使用低於 TLSv1 的版本;

  • Random
    隨機數(random)字段包含32字節的數據。當然,只有28字節是隨機生成的;剩余的4字節包含額外的信息,受客戶端時鍾的影響。4個字節以Unix時間格式記錄了客戶端的協調世界時間(UTC)。協調世界時間是從1970年1月1日開始到當前時刻所經歷的秒數,那么時間是不斷的上漲的,通過前4字節填寫時間方式,有效的避免了周期性的出現一樣的隨機數。使得“隨機”更加“隨機”。隨機數是用來生成對稱密鑰的。
    在握手時,客戶端和服務器都會提供隨機數。這種隨機性對每次握手都是獨一無二的,在身份驗證中起着舉足輕重的作用。它可以防止重放攻擊,並確認初始數據交換的完整性。

  • Session ID
    在第一次連接時,會話ID(session ID)字段是空的,這表示客戶端並不希望恢復某個已
    存在的會話。在后續的連接中,這個字段可以保存會話的唯一標識。服務器可以借助會話ID在自己的緩存中找到對應的會話狀態。
    如果Session id length有值,對於 SSL 2.0 Session id length 0~16字節,其后的版本擴大到32字節。本報文中Session id length是0,后面就沒有跟Session id,直接是Cipher suit length。
    Session id並不一定是32字節,RFC規定可以0~32字節。只是Session id由服務器生成,服務器普遍采用OpenSSL,而OpenSSL基本只生成32字節的session id,如果碰到其他字節長度的Session id,切莫認為是異常client hello。

  • Cipher Suites

密碼套件(cipher suite)塊是由客戶端支持的所有密碼套件組成的列表,該列表是按優先級順序排列的。加密套件列出了客戶端能夠支持的加密方式、算法等信息。不同的加密套件性能不一樣,安全性不一樣,也導致了SSL交互報文的不一樣。

例如,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 各字段含義:

字段 TLS ECDHE RSA WITH AES_256_GCM SHA384
解釋 代表TLS協議 對稱加密密鑰交換算法 非對稱密鑰算法,也就是公鑰/私鑰算法 分割作用 對稱加密算法 哈希算法

示例1:
TLS_RSA_WITH_RC4_128_SHA1,它表示,密鑰交換使用RSA,身份認證算法用RSA(證書是身份認證一部分,我們還需要用RSA去驗證證書),對稱加密算法使用RC4,摘要算法使用SHA1。

示例2:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA1,它表示,密鑰交換算法使用ECDHE(短暫橢圓曲線),身份認證算法使用ECDSA,對稱加密算法使用AES_128_CBC,摘要算法使用SHA1。

客戶端把自己所支持的加密套件全部發送給服務器,服務器會從中選擇一個加密套件。每個加密套件用2字節表示。每個加密套件用2字節表示,這里一共30個加密套件,所以理所當然的,Cipher Suits Length是30 * 2 = 60字節。

  • Compression
    客戶端可以提交一個或多個支持壓縮的方法。默認的壓縮方法是null,代表沒有壓縮。
  • Extensions
    擴展(extension)塊由任意數量的擴展組成。這些擴展會攜帶額外數據。TLS擴展是一種通用目的的擴展機制,使用這種機制可以在不修改協議本身的條件下為TLS協議增加功能。
    例如:Server_name(SNI):

SSL存在驗證證書的時候,有這么一個判斷:比較“瀏覽器輸入的地址”和“獲取的證書的名稱”。如果一樣,那么接着驗證,如果不一樣,那么認為證書是不可信的。

[參考文獻]

  1. 百度百科 SSL
  2. 《HTTPS 權威指南:在服務器和Web應用上部署SSL/TLS和PKI》
  3. SSL/TLS握手過程 https://www.cnblogs.com/barrywxx/p/8570715.html
  4. TLS/SSL 協議詳解 (9) Client hello https://blog.csdn.net/mrpre/article/details/77867439
  5. 例說圖解TCP/IP協議族--TLS篇(1)抓包分析SSL/TLS握手 https://blog.csdn.net/Wendy019900107/article/details/90042622


免責聲明!

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



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