TLS Fingerprinting

Identify client and server that are using encrypted connections

TLS Audit Records

Watch a quick demo of creating and exploring the TLSClientHello audit records on the command-line

JA4 Fingerprinting

JA4 is the successor to JA3, developed by FoxIO-LLC. It addresses JA3's limitations with modern browsers that randomize TLS extension order (like Chrome), and adds QUIC protocol support. Unlike JA3's MD5 hash, JA4 fingerprints are human-readable.

JA4 Format

JA4 consists of three parts separated by underscores:

JA4_a (10 characters): {protocol}{version}{sni}{cipher_count:2d}{ext_count:2d}{alpn_first}

  • protocol: t for TCP/TLS, q for QUIC

  • version: 13 (TLS 1.3), 12 (TLS 1.2), 11 (TLS 1.1), 10 (TLS 1.0), s3 (SSL 3.0)

  • sni: d (domain present) or i (IP/missing)

  • cipher_count: Number of cipher suites (excluding GREASE), 2 digits

  • ext_count: Number of extensions (excluding GREASE), 2 digits

  • alpn_first: First two characters of first ALPN, or 00 if none

JA4_b (12 characters): Truncated SHA256 of sorted cipher suites (GREASE filtered, comma-separated hex)

JA4_c (12 characters): Truncated SHA256 of sorted extensions (GREASE + SNI + ALPN filtered, comma-separated hex), followed by signature algorithms (if present) separated by underscore

Example:

This fingerprint indicates:

  • t: TCP/TLS connection

  • 13: TLS 1.3

  • d: Domain present in SNI

  • 15: 15 cipher suites

  • 16: 16 extensions

  • h2: HTTP/2 (first ALPN)

JA4S Format (Server Hello)

JA4S fingerprints the server's response:

JA4S_a (7 characters): {protocol}{version}{ext_count:2d}{alpn}

  • protocol: t for TCP/TLS, q for QUIC

  • version: 13 (TLS 1.3), 12 (TLS 1.2), etc.

  • ext_count: Number of extensions (excluding GREASE), 2 digits

  • alpn: First and last character of selected ALPN, or 00 if none

JA4S_b (4 characters): Cipher suite in hex

JA4S_c (12 characters): Truncated SHA256 of extensions (SNI and ALPN filtered, NOT sorted per spec)

Advantages over JA3

  1. Resistant to TLS extension randomization: JA4 sorts extensions, so Chrome's randomization doesn't affect the fingerprint

  2. Human-readable: The JA4_a component is immediately interpretable

  3. QUIC support: Works with QUIC protocol connections

  4. Includes ALPN: Captures application protocol negotiation details

References

License

JA4 (TLS Client Fingerprinting) is licensed under BSD 3-Clause. JA4S, JA4H, JA4X, JA4T, JA4SSH and other JA4+ methods are licensed under FoxIO License 1.1. See internal/ja4/LICENSE-JA4 for full license text.


Client Hello Audit Record

Server Hello Audit Record


Migration from JA3

JA3 support has been removed from netcap in favor of JA4. If you have existing JA3-based workflows:

  1. Threat Intelligence: JA4 fingerprint databases are being developed. In the meantime, you can use the human-readable JA4_a component for basic client identification.

  2. Filtering/Detection Rules: Update rules to match on Ja4 field instead of the former Ja3 field.

  3. Historical Data: Existing audit records with JA3 fields will remain readable, but new captures will only contain JA4 fingerprints.

Why JA3 Was Removed

Modern browsers (Chrome, Firefox, Edge) randomize TLS extension order to prevent fingerprinting-based tracking. This makes JA3 fingerprints inconsistent and unreliable for the same browser version. JA4's sorted extension approach provides stable fingerprints regardless of extension ordering.

Last updated