TLS Fingerprint (JA3 / JA4)

See what your browser looks like at the TLS handshake layer — a fingerprint JavaScript cannot change.

Captured directly — no proxy relay in between

The fingerprint beneath JavaScript

Before any page script runs, your browser completes a TLS handshake whose ClientHello message encodes cipher preferences, extension order and supported groups. Anti-fraud systems hash this into JA3/JA4 signatures — and because spoofing extensions operate in JavaScript, they cannot touch it.

What the fields mean

JA3 hashes version + ciphers + extensions into an MD5; JA4 encodes the same traits into a readable string like t13i1516h2 (TCP, TLS 1.3, 15 ciphers, 16 extensions, HTTP/2 ALPN). Browsers, curl, Python and Go each produce distinct signatures.

Why proxies get caught here

A browser spoofed as Chrome still sends Chrome-inconsistent TLS if traffic actually originates from a Go or Python client — and vice versa. Consistency between the TLS layer and the JavaScript layer is what risk engines verify, and this page shows you your own handshake plainly.

Need the in-depth Chinese version? Read the full guide.

Related articles

More in the blog index

Frequently asked questions

Why does my JA3 change between browsers or versions?

JA3 covers client configuration, which changes with browser updates, enabled features and platform. It identifies a client stack, not a person — the same person on Chrome and Firefox has two JA3s.

Can I change my TLS fingerprint?

Only by changing the actual TLS stack: using a different browser, a custom client library, or a TLS-level proxy. Browser extensions cannot alter ClientHello.

Does this tool store my fingerprint?

No. The fingerprint is computed live for display. Only an anonymous daily count of browser vs non-browser TLS clients contributes to the site-wide Network Pulse.