What Is a JA3 Fingerprint? β Definition and How It Works
Learn what a JA3 fingerprint is, which handshake fields it hashes, what it identifies, and why extension randomisation reduced its usefulness.
A JA3 fingerprint summarises how a TLS client opens a connection. It is computed from the client hello, before any application data is exchanged, and it characterises the software making the request.
1. How It Is Computed
Five fields from the client hello are concatenated in order, separated by commas, and hashed:
TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats
β MD5 β 32-character hexadecimal fingerprint
Values within each field are joined by hyphens, and the entire string is order-sensitive β which turns out to be the scheme's central weakness.
2. What It Identifies
Software and configuration, not a person or a machine.
- Different HTTP libraries produce different fingerprints.
- Different browser versions produce different fingerprints.
- The same library on different platforms usually matches.
- Many unrelated users share a fingerprint.
It groups clients into families, which makes it useful for correlation and unsuitable for identification.
3. Why It Is Available So Early
The client hello is sent in the clear, before encryption is established. Any network device or server can read it without decrypting anything.
That is why a plain HTTP client can be classified before it has sent a single header: the handshake already announced what kind of software it is.
4. The Contradiction Signal
A request whose user agent claims a mainstream browser, over a handshake that browser never produces, is internally inconsistent.
Neither observation is suspicious alone β plenty of legitimate tooling identifies as itself, and plenty of browsers share handshakes. The mismatch is the signal, and it is why layering browser-like headers onto a scripting client tends to make classification worse.
5. Why Randomisation Broke It
Browsers began shuffling extension order, so the same browser produced a different JA3 hash on each connection. Lists keyed on JA3 became unreliable without any change in the underlying handshake.
That practical failure is what motivated JA4, which sorts values where order carries no meaning and produces a stable identifier despite shuffling.
6. Practical Limits
- Shared fingerprints mean false positives are inherent; blocking on JA3 alone is blunt.
- Version churn changes fingerprints whenever libraries or browsers update.
- Middleboxes that terminate TLS present their own fingerprint, not the client's.
- Maintenance of any list built on it is continuous.
7. What It Means in Practice
For operators, JA3 is one weak signal among several, valuable for correlation rather than for verdicts. For client authors, consistency across layers matters more than any particular value.
Both conclusions follow from the same fact: the fingerprint describes software, and software is shared.
8. Summary
JA3 hashes five ordered fields of the TLS client hello into a fingerprint that identifies the client's software family before any request is sent.
Its order sensitivity made it unreliable once browsers randomised extensions, which JA4 addresses. Its enduring lesson is that a connection reveals what kind of client it is before a single header arrives.