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:tfor TCP/TLS,qfor QUICversion:13(TLS 1.3),12(TLS 1.2),11(TLS 1.1),10(TLS 1.0),s3(SSL 3.0)sni:d(domain present) ori(IP/missing)cipher_count: Number of cipher suites (excluding GREASE), 2 digitsext_count: Number of extensions (excluding GREASE), 2 digitsalpn_first: First two characters of first ALPN, or00if 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 connection13: TLS 1.3d: Domain present in SNI15: 15 cipher suites16: 16 extensionsh2: 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:tfor TCP/TLS,qfor QUICversion:13(TLS 1.3),12(TLS 1.2), etc.ext_count: Number of extensions (excluding GREASE), 2 digitsalpn: First and last character of selected ALPN, or00if 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
Resistant to TLS extension randomization: JA4 sorts extensions, so Chrome's randomization doesn't affect the fingerprint
Human-readable: The JA4_a component is immediately interpretable
QUIC support: Works with QUIC protocol connections
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:
Threat Intelligence: JA4 fingerprint databases are being developed. In the meantime, you can use the human-readable JA4_a component for basic client identification.
Filtering/Detection Rules: Update rules to match on
Ja4field instead of the formerJa3field.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