使用Wireshark解密SSL/TLS數據包並調試

使用Wireshark解密SSL/TLS數據

我們使用wireshark抓取的HTTPS數據包,可以使用wireshark通過以下兩種方式直接解密查看

1. 用服務器證書私鑰解碼

第一種方法是:使用服務器證書的私鑰進行解碼。

在IIS上導出服務器證書私鑰

第一步我們需要從網站服務器上導出證書私鑰,這裏拿IIS服務器舉例。

  1. 打開IIS站點所綁定的服務器證書,點擊查看 詳細信息 頁,點擊 複製到文件。

  1. 嚮導中點擊下一步,當詢問是否導出私鑰時選擇 是,導出私鑰,點擊 下一步 繼續。

  1. 選擇 個人信息交換(.PFX),下面的三個複選框不用勾選,點擊 下一步 繼續。

  1. 勾選 密碼,設置一個密碼,點擊 下一步 繼續,導出PFX文件。

Wireshark中設置以服務器證書私鑰解碼SSL協議

有了PFX私鑰文件,接下來就可以通過Wireshark設置使用該私鑰來解碼SSL、TLS網絡包了。這一步既可以在服務器上的Wireshark中設置,也可以在客戶端的Wireshark中設置,取決於你想在哪一端查看(抓取)網絡包。

  1. 在Wireshark中,進入菜單 Edit -> Preferences…。
  2. 展開 Protocols -> SSL,點擊 Edit 按鈕編輯 RSA key lists。

  1. 配置如下:

IP address:目標服務器的IP地址,也可以填寫 “any” 應用到所有IP地址。
Port:HTTPS端口號,一般均爲:“443”。
Protocol:填寫 “http”。
Key File:選取剛纔導出的服務器證書私鑰(PFX文件)。
Password:輸入服務器證書私鑰的密碼。

設置完成後,當前正在查看的網絡包或將來抓取的網絡包就會以設定的規則解碼了。

如果網絡包依然無法被解碼,那麼很有可能是因爲服務器和客戶端之間使用了Diffie-Hellman加密算法。比如使用ECDHE,這種數據包無法使用wireshark解密。

2. 用SSLKEYLOGFILE解碼

第二種解碼TLS、SSL的方法是:設置環境變量 SSLKEYLOGFILE,將其指向一個可寫入的文本文件。Chrome和Firefox在啓動時會檢查這個環境變量,如果存在的話,它會向指定的文件寫入訪問HTTPS站點時使用的密鑰。我們可以在客戶端配置Wireshark讀取這個文件來解碼TLS、 SSL網絡包。

  1. 右鍵計算機,查看屬性,打開高級系統設置,查看高級選項卡,點擊環境變量。

  1. 新建一個系統變量。

  1. 指定變量名爲:SSLKEYLOGFILE,變量值爲一個可寫入的文本文件。文件夾必須提前創建,若文件尚未創建,可以打開Chrome或Firefox一下,文件會被自動創建。

  1. 在Wireshark中,進入菜單 Edit -> Preferences…。
  2. 展開 Protocols -> SSL,將 (Pre)-Master-Secret log filename 設爲步驟3中指定的值。

  1. 點擊確認後,就會正確解碼HTTPS網絡包了。使用 SSLKEYLOGFILE 的好處就是它可以解Diffie-Hellman加密算法。

使用Wireshark調試SSL/TLS解密數據

導出SSL/TLS密鑰

  1. 點擊wireshark如下配置,導出SSL會話密鑰

  1. 導出的文件如下所示


上圖中的“Master-Key”爲主密鑰,主密鑰並不是最終加解密使用的密鑰,會話密鑰是通過主密鑰再進一步計算獲得。

導出wireshark調試日誌

  1. 在wireshark中設置調試日誌保存的位置,如下圖所示

  1. 設置如上配置後,點擊OK後,數據包會重新在加載,然後就可以打開上圖中保存的日誌文件,下邊截取部分日誌查看


日誌中輸出了客戶端和服務端在協商階段,計算密鑰過程的中間輸出,比如“預主密鑰”、“主密鑰”、客戶端和服務端隨機數等。

參考資料

https://www.joji.me/zh-cn/blog/walkthrough-decrypt-ssl-tls-traffic-https-and-http2-in-wireshark/#md-sslkeylogfile

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章