使用wireshark抓包瞭解https

背景

  • Https即HTTP over TLS。為避免Http明文傳輸帶來的安全隱患,我們可以對傳輸的數據進行加密,考慮到性能問題,使用對稱加密算法。
  • 客戶端需要知道服務端使用的密鑰及加密算法,如何保證密鑰的安全傳輸呢?這裡可以使用非對稱加密算法,使用服務端的公鑰pubKey來加密傳輸密鑰key。
  • 公鑰是明文傳輸的,中間人仍然可以使用自己的公鑰加密key欺騙客戶端。

  • 使用wireshark抓包瞭解https


  • TLS使用證書進行身份認證,保證服務端是受信任的,同時證書中使用數字簽名防止被篡改。這樣保證了pubKey的安全傳輸
  • TLS使用協商機制來選擇對稱加密使用的算法
  • 抓包分析

    1. 選擇使用的網卡,設置捕捉過濾器host blog.csdn.net (也可以不設置,抓包後通過顯示過濾器查看),開始抓取。


    使用wireshark抓包瞭解https

    2. 使用curl https://blog.csdn.net/u010648018/article/details/103447167發起一次https請求

    3. 可以看到,首先是tcp的三次握手,然後是tls協商加密算法與密鑰交換過程

    使用wireshark抓包瞭解https

    4. Client Hello,客戶端向服務端發送一個隨機數和支持的加密算法

    使用wireshark抓包瞭解https

    5. Server Hello,服務端向客戶端發送隨機數和選擇的加密算法(ECDHE)

    使用wireshark抓包瞭解https

    1. Certificate, Server Key Exchange, Server Hello Done
    • Certificate 服務端向客戶端發送證書鏈。證書用於身份認證,其中包含服務端公鑰PubKey
    • Server Key Exchange 根據上面具體選擇的加密算法(ECDHE)準備生成密鑰需要的一些參數(premaster)。(RSA算法沒有該步驟)
    • Server Hello Done 表明服務端的Hello消息發送完畢
    使用wireshark抓包瞭解https

    1. Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
    • Client Key Exchange 在驗證服務端發送證書可信後,生成加密算法所需的一些參數
    • Change Cipher Spec 告訴服務端以後要使用選擇的加密算法加密數據
    • Encrypted Handshake Message 根據之前客戶端和服務端生成的隨機數、加密算法所需的一些參數生成會話密鑰key,對之前的握手消息的Hash值和Mac值進行加密,來驗證該加密密鑰是否可用。服務端以相同的方法生成會話密鑰解密該消息,校驗其中的Hash值和Mac值。
    使用wireshark抓包瞭解https

    1. Change Cipher Spec, Encrypted Handshake Message
    • Change Cipher Spec 告訴客戶端以後要使用該加密算法來加密數據
    • Encrypted Handshake Message 使用會話密鑰key加密之前的握手消息的Hash值和Mac值,發送給客戶端校驗
    使用wireshark抓包瞭解https

    9. 雙方校驗完成,發送加密的應用數據

    使用wireshark抓包瞭解https

    整體流程

    使用wireshark抓包瞭解https


    分享到:


    相關文章: