姊妹篇:
[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