如何利用Wireshark解密SSL和TLS流量
來源 https://support.citrix.com/article/CTX135121
概要
本文介紹在Wireshark網絡協議分析儀中如果解密SSL和TLS流量
要求
- 以下基本知識:
• 網絡追蹤
• 網絡,TCP/IP和SSL/TLS協議
• 證書和公私鑰的使用
• Wireshark網絡協議分析儀
- Wireshark 軟件支持SSL解密
- 服務器或設備的私鑰,私鑰格式為PKCS#8 PEM
背景
在Wireshark中,SSL解析器功能完整,且支持高級特性,如提供加密私鑰時的SSL解密。這對於使用SSL或TLS加密的思傑產品的排錯有很大的幫助。
步驟
Wireshark 設置
- 在Wireshark中,SSL解析器功能完整,且支持高級特性,如提供加密私鑰時的SSL解密。這對於使用SSL或TLS加密的思傑產品的排錯有很大的幫助。

- 從菜單中選擇Edit > Preferences.

- 打開Preferences 窗口,展開Protocols.

- 下拉選擇 SSL.

- 在RSA keys list后的空白處,提供以下信息<ip>,<port>,<protocol>,<key_file_name> (如上圖所示)
其中:
<ip>是具有私鑰的服務器或設備的IP地址
<port> 是SSL/TLS端口號,通常是443
<protocol> 通常是HTTP
<key_file_name> 是私鑰的名稱和路徑is the location and file name of the private key
Note: 逗號間沒有符號。而且,使用分號間隔用於不同條目。
“<ip>,<port>,<protocol>,<key_file_name>;<ip>,<port>,<protocol>,<key_file_name>;<ip>,<port>,<protocol>,<key_file_name>”.
- 在SSL debug file后的空白處填入排錯文件的路徑和文件名
- 點擊 OK.
- SSL則被解密(解密的SSL如下圖所示)

私鑰格式
Wireshark只要有私鑰就可以解密SSL流量。私鑰需要時decrypted PKCS#8 PEM format (RSA)格式。你可以打開私鑰看它的內容。如果是二進制,則是DER格式,不能用於Wireshark解密。
你可以使用OpenSSL轉換密鑰格式。例如,可以將PKCS#8 DER格式的密鑰轉化成decrypted PKCS#8 PEM format (RSA)格式。在$提示符后輸入如下指令:
openssl pkcs8 -nocrypt -in der.key -informat DER -out pem.key -outformat PEM
其中:
der.key 是DER密鑰文件的文件名和路徑
pem.key是pem文件的文件名和路徑
解密后的decrypted PKCS#8 PEM format (RSA)格式如下:

注意密鑰開頭為:
-----BEGIN RSA PRIVATE KEY-----
如果開頭為:
-----BEGIN ENCRYPTED PRIVATE KEY-----
則這個密鑰需要用適當的方法解密。OpenSSL可以實現。
- At the $ prompt, enter the command: 在$提示符,輸入命令:
openssl rsa
If you enter this command without arguments, you are prompted as follows: 如果輸入指令不帶參數,則出現以下字樣:
read RSA key
- 輸入解密的私鑰文件名
你可以在openssl rsa后加上參數,假如你知道私鑰和解密的PEM的文件名。例如,私鑰的文件名是myprivkey.pvk和解密的文件名問keyout.pem,命令如下:
openssl rsa –in myprivkeypvk -out keyout.pem
附加信息
http://www.wireshark.org/docs/dfref/s/ssl.html
http://www.openssl.org/docs/apps/rsa.html#EXAMPLES
http://sourceforge.net/project/showfiles.php?group_id=23617&release_id=4880
=============
使用 Wireshark 解密 SSL 流量,支持兩種方式:
- 使用證書解密,需要配置對端服務器私鑰
- 不使用證書解密,需要設置 WSSLKEYLOGFILE
私鑰
如何利用 Wireshark 解密 SSL 和 TLS 流量
edit -> preferences -> protocols -> ssl: rsa keys list
WSSLKEYLOGFILE
WSSLKEYLOGFILE 是 NSS 底層密碼庫提出的一種技術,所有基於 NSS 的應用程序在運行期間可以將通信過程中的會話密鑰導出到一個文件中,一旦有了這個密碼文件,Wireshark 就能夠解密所有的 TLS 流量了。
現在 OpenSSL 等其他的 TLS 實現也能支持這種方式,通過 Chrome 和 Firefox 瀏覽器捕獲 TLS 流量,Wireshark 就能夠解密
配置
ubuntu 下使用命令行啟動瀏覽器為了保證能讀到環境變量
$ export SSLKEYLOGFILE=/tmp/keylog.txt $ /opt/google/chrome/chrome $ /usr/bin/firefox
使用
在wireshark中設置key log路徑
edit -> preferences -> protocols -> ssl: (Pre)-Master-Secret log filename: /tmp/keylog.txt
設置之后可以解密 SSL 流量,可以看到 SSL 交互過程,可以 Follow SSL Stream 查看完整 HTTPS 數據
Ref
======== End
