
I believe this is called the "Master Secret". Then the TLS protocol proceeds by using symmetric encryption (AES) based on that shared secret. The client and server construct a shared secret which is known to both, but is too hard/impossible for a nosy observer to guess without having access to the Private Keys involved.

The client receives a proof that it is talking to someone who possesses a key that was signed by a Certificate Authority that it trusts.The details will vary depending on the cipher suite that the client and server agree on using, but the gist of it remains the same: In the typical use case, TLS works by using asymmetric cryptography (certificates, trust chains, public/private keys, etc) to achieve two things. This method works by logging important fragments of the key-exchange part of the TLS protocol in a somewhat standardized format that Wireshark understands. *EDIT: I re-hosted the wayback machine version of this article since its no longer online. If you haven't done this before and you haven't read Jim's article, I recommend skimming it before you continue here. Jim Shaver's excellent post on the subject: Decrypting TLS Browser Traffic With Wireshark – The Easy Way*, or at least become familiar with the (Pre)-Master-Secret logging method (usually called SSLKEYLOGFILE in web browsers). If you are a Wireshark veteran, you may have already seen Mr. Wireshark and the (Pre)-Master-Secret/SSLKEYLOGFILE We won't be able to access the HTTP protocol which is wrapped inside the strong encryption of the TLS session.

But we will only be able to see the session initiation of the TLS protocol. If we simply run tcpdump on the server where the Java application is running, we will get a packet capture, yes.

If you are interested in node.js apps instead, see part 2! How can I capture the traffic so that I can see the contents of the requests and responses?

I have a Java application that is talking HTTPS with some server I don't have access to.
