How to inspect TLS SNI and certificates in a PCAP

Encrypted application data does not make every handshake field invisible. Depending on the TLS version, capture position and use of ECH, a passive capture may still reveal server names, negotiated versions, cipher suites and certificate details.

By Stuart Mathieson8 minute readWireshark + tsharkUpdated 25 September 2026
In this guide
  1. Find TLS handshakes
  2. Extract SNI
  3. Inspect certificates
  4. Understand the limits
  5. Manual vs automated workflow

1. Find the handshake, not just port 443

Filtering on tcp.port == 443 misses TLS on non-standard ports and includes protocols such as QUIC that do not use TCP. Start with Wireshark's decoded protocol:

tls.handshake

For a compact tshark inventory:

tshark -r capture.pcapng -Y "tls.handshake" -T fields \
  -e frame.number -e ip.src -e ip.dst \
  -e tls.handshake.type -e tls.handshake.version

If no handshake is visible, the capture may have started after the connection was established, the traffic may use QUIC, the relevant packets may be missing, or the dissector may not recognise the flow as TLS.

2. Extract visible server names

The Server Name Indication extension normally appears in the ClientHello. Filter it with:

tls.handshake.extensions_server_name

Export unique observed names with tshark:

tshark -r capture.pcapng \
  -Y "tls.handshake.extensions_server_name" \
  -T fields -e tls.handshake.extensions_server_name \
  | sort -u

SNI is useful for discovering which named services a client attempted to reach, but it is not proof of the content transferred. One IP can host many names, a connection can fail after ClientHello, and Encrypted ClientHello can hide the real server name.

3. Review versions and cipher suites

Inspect both the client's offered capabilities and the server's negotiated choice. In modern TLS, version negotiation can be represented by the Supported Versions extension rather than the legacy record-layer version field. Rely on Wireshark's interpreted handshake fields rather than reading one raw version value in isolation.

Useful filters include:

tls.handshake.type == 1   # ClientHello
tls.handshake.type == 2   # ServerHello
tls.handshake.ciphersuite

A client offering an old option does not prove it was selected. Conversely, a negotiated legacy version or weak suite deserves context: confirm the handshake completed and identify the server endpoint before escalating.

4. Inspect certificates when they are visible

For TLS versions where the Certificate handshake is visible to the passive observer, Wireshark can decode subjects, issuers, validity dates and subject alternative names. Start with:

tls.handshake.certificate

Check whether the certificate was valid at the time of the capture, not merely today. A self-signed certificate may be intentional on a managed internal service; an expired public-facing certificate may be operationally important. Name mismatches also require the requested hostname, which may be absent or encrypted.

5. Know what passive TLS analysis cannot show

Do not promise decryption from a capture alone.

Application payload inspection requires suitable session secrets or supported key material. Neither a dashboard nor a display filter can recover keys that were never collected.

Manual method vs PCAPNG Analyzer

Manual method

  1. Filter for TLS handshakes.
  2. Inspect ClientHello and ServerHello fields.
  3. Extract visible SNI values.
  4. Review negotiated versions and suites.
  5. Inspect certificates where the protocol exposes them.

With PCAPNG Analyzer

  1. Upload the capture.
  2. Open the TLS summary and SNI breakdown.
  3. Review visible versions, cipher suites and certificate details.
  4. In Pro, review legacy-version, weak-cipher, expired, self-signed and SNI-mismatch findings.
  5. Validate important findings at packet level.
Honest scope

The app summarises TLS metadata that its decoder can see. It does not decrypt encrypted application content, defeat ECH, or make an absent TLS 1.3 certificate visible without keys.

Summarise visible TLS metadata locally

Keep the capture on your server and use the Free tier for TLS, DNS and conversation summaries.

Start freeView sample report