You cannot directly filter TLS protocols while capturing. However, if you know the TCP port used (see above), you can filter on that one, for example using
tcp port 443.
Using the (Pre)-Master-Secret
The master secret enables TLS decryption in Wireshark and can be supplied via the Key Log File. The pre-master secret is the result from the key exchange and can be converted to a master secret by Wireshark. This pre-master secret can be obtained when a RSA private key is provided and a RSA key exchange is in use.
Step-by-step instructions to decrypt TLS traffic from Chrome or Firefox in Wireshark:
- Close the browser completely (check your task manager just to be sure). 确定所有浏览器已关闭，任务管理器中查看。
- Set environment variable
SSLKEYLOGFILEto the absolute path of a writable file.
- Start the browser.
- Verify that the location from step 2 is created.
- In Wireshark, go to Edit -> Preferences -> Protocols -> TLS, and change the (Pre)-Master-Secret log filename preference to the path from step 2.
- Start the Wireshark capture.
- Open a website, for example https://www.wireshark.org/
- Check that the decrypted data is visible. For example, using the
tls and (http or http2)filter.
For Windows, an environment variable can be set globally as described in this walkthrough, but this is not recommended since it is easy to forget about and may be a security issue since it allows decryption of all your TLS traffic. A better way to set the environment variable is via a batch file. Create a file
@echo off set SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txt start firefox
For Linux, you open a terminal then start the browser with:
export SSLKEYLOGFILE=$HOME/Desktop/keylogfile.txt firefox
For macos, you open a terminal then start the browser with:
export SSLKEYLOGFILE=$HOME/Desktop/keylogfile.txt open -a firefox
SSLKEYLOGFILE path as needed, and replace
chrome for Google Chrome. This mechanism currently (2019) does not work for Safari, Microsoft Edge, and others since their TLS libraries (Microsoft SChannel/Apple SecureTransport) do not support this mechanism. This mechanism works for applications other than web browsers as well, but it dependent on the TLS library used by the application.
Note: Chromium based versions of Edge (version 79+) should work too.
Examples of other applications:
Applications using OpenSSL could use a GDB or a LD_PRELOAD trick to extract the secrets. This includes Python.
- For a walkthrough for Apache HTTP Server using this libsslkeylog.so library, see this post.
For Java programs, secrets can be extracted from the TLS debug log preference, or output directly in the format Wireshark requires via a Java agent. Two similar projects:
- jSSLKeyLog: http://jsslkeylog.sourceforge.net/
- extract-tls-secrets: https://github.com/neykov/extract-tls-secrets
- Python scripts can be edited to dump keys as well.
For a survey of supported TLS applications and libraries, see also page 19 of Peter Wu’s SSL/TLS Decryption SharkFest’18 EU presentation.
Embedding decryption secrets in a pcapng file
Since Wireshark 3.0 you can embed the TLS key log file in a pcapng file. This makes it much easier to distribute capture files with decryption secrets, and makes switching between capture files easier since the TLS protocol preference does not have to be updated. To add the contents of key log file
keys.txt to capture file
in.pcap and write the result to
editcap --inject-secrets tls,keys.txt in.pcap out-dsb.pcapng
The dsb suffix stands for Decryption Secrets Block (DSB) and is part of the pcapng specification.
A key log file might contain keys that are not related to a capture file. To ensure that unnecessary keys are not leaked, you can use the
inject-tls-secrets.py script from https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 to filter the key log file and add the required secrets to a capture file. The shell script has been tested with Linux and macOS, but a Python 3 version is also available for all platforms including Windows. Example:
git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its ~/its/inject-tls-secrets.py keys.txt some.pcap
Some other protocols are derived from TLS. This includes:
- DTLS is based on the TLS standard and runs on top of UDP as a transport protocol.
- QUIC is an in-development protocol that uses TLS for its encryption, Wireshark’s status can be tracked at https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.
- https://en.wikipedia.org/wiki/Transport_Layer_Security Wikipedia article for TLS
- https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdf SharkFest’16 EU presentation by Sake Blok on troubleshooting SSL with Wireshark/Tshark (or watch the video of the presentation at https://youtu.be/oDaDY9QCnXk)
- https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf SharkFest’18 EU presentation by Peter Wu on TLS decryption (video for an earlier talk in Asia at https://youtu.be/bwJEBwgoeBg)
- https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf SharkFest’19 US presentation by Peter Wu describing TLS decryption and use of embedded decryption secrets (https://youtu.be/Ha4SLHceF6w).
- How does SSL/TLS work? – Information Security Stack Exchange
- Keyless SSL: The Nitty Gritty Technical Details with a good introduction in TLS
- PolarProxy from Netresec is a transparent SSL/TLS proxy created for incident responders and malware researchers that is primarily designed to intercept and decrypt TLS encrypted traffic from malware. PolarProxy decrypts and re-encrypts TLS traffic, while also saving the decrypted traffic in a PCAP file that can be loaded into Wireshark or an intrusion detection system (IDS).