The Decrypt TLS Traffic profile setting allows users to decrypt TLS traffic within a capture file. TLS traffic can only be decrypted if the user has access either to the appropriate RSA key, or a client keylog file.
Note that RSA keys must be imported and shared by admin users. See the section on RSA key management in the Admin Guide for more information on adding and managing keys.
The client keylog data can be pasted into CloudShark and used for TLS decryption. Additionally the upload API method supports uploading a keylog file when a capture file is uploaded.
Web browsers like Firefox and Chrome are able to save keys used when visiting
websites by generating a keylog. The
curl command-line clients
are also able to generate a keylog. All of these applications check for an
SSLKEYLOGFILE set to the location of a text file. Once
set these applications will write the key data to the log file specified.
An RSA key can be dragged from the box of Available Keys to the Active RSA Keys box. Multiple unique decryption rules can be defined for each capture. Once a valid decryption rule has been configured and applied, the TLS traffic for that rule will be automatically decrypted and visible in the decode window.
Once an TLS session has been decrypted, CloudShark provides a tool for following TLS streams. This tool can be used to provide the familiar follow stream view for decrypted TLS streams. The Follow TLS analysis tool menu option will be active for captures that have TLS decryption rules applied.
Sometimes TLS decryption may now work as expected. Here are some reasons why TLS traffic may not be decrypted.
You can not use decryption if a Diffie-Hellman based cipher is in use.
Look at the TLS exchange and look for the Server Hello message. This
will normally report the chosen cipher. If it contains a DH, then
Diffie-Hellman is in use and the decryption using the TLS server key
will not work. For example view the following capture using the filter
tls.handshake.type == 2.
One potential work around is to reconfigure your server to exclude Diffie-Hellman based Ciphers.
You can not use decryption if your TLS session was reused and the full TLS handshake is not in your capture. If you are having trouble with TLS decryption and suspect TLS Session Reuse try using the following filter expression:
!tls.handshake.session_ticket || tls.handshake.session_id_length == 0
If any packets match this filter expression it is likely that the TLS was used during this capture and the full handshake may not have been captured.
Here are a couple of example captures to show the difference between the full TLS handshake, and one where an TLS session was reused.
Here is also an article which describes TLS session reuse and includes a diagram to explain the handshake in both cases.
Possible workarounds to avoid TLS session reuse include configuring your server to disable TLS session reuse or clearing any TLS caches created by the client before capturing TLS traffic.