[https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog


姊妹篇: 

[ipsec][strongswan] 使用wireshark查看strongswan ipsec esp ikev1 ikev2的加密內容

[https][tls] 如何使用wireshark查看tls/https加密消息--使用私鑰

需求

學習SSL/TLS的過程中, 使用wireshark轉包分析,是常用的手段.

我自建nginx自簽名證書, 抓了一個訪問請求的包, 是這樣的.

 

 我們可以看到, 從第8個包開始, 便出現了密文. 即使我不關心TLS上層的業務內容, 第八和第九個包里邊的最后兩段加密數據段, 也是需要關心的. 他們是Finshed報文,是協商報文的一部分.

 

配置

wirshark

我們知道wireshark具體解密TLS密文的能力. (我們當然知道, 因為我們經驗豐富), 而且我們還知道從下邊的這個地方進行配置:

edit->preferences->protocols->tls

 

情況A: 當我們使用RSA進行秘鑰交互的時候, 就對RSA keys list項進行配置, 導入server端的私鑰.

情況B:  當我們使用DH進行秘鑰交互的時候, 就對Master Secret log filename進行配置, 導入單次會話的主密鑰.  因為DH的秘鑰交互過程是明文交互的, 所以只配這個,也能解開全部的密文.

 

curl或firefox

情況A並沒有這個步驟. 下面討論情況B

wireshark的配置中需要的配置文件, 是用來保存主秘鑰的. 稱為 SSLKEYLOGFILE

在通過curl或firefox訪問之前, 設置環境變量SSLKEYLOGFILE的值為目標文件, 在執行過curl或firefox之后, 主密鑰會被自動記錄到該文件中, 如下以curl為例, firefox同樣適用:

┬─[tong@T7:~/Works/tls]─[08:22:58 PM]
╰─>$ export |grep SSL
SSLKEYLOGFILE /home/tong/Works/tls/keylog
┬─[tong@T7:~/Works/tls]─[08:23:59 PM]
╰─>$ curl --cacert ~/Keys/https/root/root.cer https://TTTrust:443/

 

可以看到該文件的內容:

┬─[tong@T7:~/Works/tls]─[08:24:02 PM]
╰─>$ cat keylog 
CLIENT_RANDOM db23bf9a63b494ba72ecfaef831f55954f887576xxxxa2c45e46e7f631ea160d bfc5346bb7c0573b95e637a973524884ec912b67d5ce747c1a169e1d6ba57643ff8a1e97b33b11c5d6ff249961efxxxx

 

效果

現在, 按前文配置該文件在wireshark中, 可以看見下面的效果:

協商包與數據包都被解開了.

 

 

參考

<<everything curl>>是curl主頁上推薦的官方書面, 其中一個章節講述了以上方法

https://ec.haxx.se/tls-sslkeylogfile.html

 


免責聲明!

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



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