Fingerprinting

The Secret Handshake: A Beginner's Guide to TLS Fingerprinting & JA4

Learn how TLS handshake characteristics and JA4 signatures help classify connecting software, and why shared signatures do not uniquely identify a person.

In this guide

When your browser establishes a TLS connection to a website, it sends a cryptographic message before the page even begins to load. This message — the TLS ClientHello — reveals which encryption standards your software supports, how it orders them, and what extensions it requests. Servers collect these details, hash them into a compact identifier, and use the result to recognize your software stack across sessions, networks, and even VPN tunnels. This technique is called Transport Layer Security (TLS) fingerprinting. It helps classify software, but shared signatures do not uniquely identify a person or device.

Understanding TLS fingerprinting matters whether you are a privacy-conscious user, a security engineer defending against botnets, or a developer building automated tooling. This guide explains the full mechanics of the cryptographic handshake, compares TLS fingerprinting to browser fingerprinting, traces the evolution from the legacy JA3 standard to the modern JA4+ suite, reveals how enterprise Web Application Firewalls (WAFs) use these signatures to stop bots, and debunks the most dangerous myths about VPNs and digital anonymity.

The Mechanics of the Cryptographic Handshake

TLS is the successor to the now-deprecated SSL protocol and the universal standard for encrypting web traffic. Its purpose is straightforward: encrypt the communication channel between a client and a server so that no third party can eavesdrop, tamper with, or forge the data in transit.

Before any encrypted payload can flow, the two sides must agree on how to communicate. This negotiation is called the TLS handshake, and it begins with a single, unencrypted packet sent from the client to the server — the ClientHello message.

Without additional protection, ClientHello fields can be visible to observers along the network path. A VPN hides the inner handshake from observers before its exit, while Encrypted Client Hello (ECH) encrypts an inner ClientHello and exposes an outer one. The TLS-terminating server can inspect the handshake it receives.

The ClientHello is far more than a simple greeting. It is a rich dossier of cryptographic configuration parameters, including:

  • The TLS versions the client supports (e.g., TLS 1.2, TLS 1.3).
  • A prioritized list of cipher suites it can compute.
  • Supported TLS extensions (SNI, ALPN, key share, session tickets, etc.).
  • Elliptic curve groups and signature algorithms it accepts.

Different software stacks arrange these values in highly specific ways. The widely used OpenSSL library — which powers default Python scripts and many Linux utilities — formats the ClientHello in a structurally different manner than the BoringSSL library used by Google Chrome, which in turn looks entirely different from Apple's Secure Transport framework in Safari.

The destination server ingests this combination of ciphers, extensions, and ordering, then produces a mathematical hash — a fingerprint. By matching that fingerprint against a database of known signatures, network defenders can estimate the software family connecting to their infrastructure without decrypting any subsequent traffic or interacting with the application layer.

Illustrative animation of the ClientHello stage, not a live TLS measurement or a complete handshake.

💻

Example Browser

Chrome, Safari, Firefox

ClientHello

  • 🔒 Ver: TLS 1.3
  • 🔑 Ciphers: [AES, GCM...]
  • 🧩 Extensions: [SNI, ALPN...]
Click "Start Handshake"
🏢

Website Server

Google, Facebook, Bank

What makes a TLS fingerprint?

TLS clients advertise cipher suites, extensions, and other capabilities. These can help distinguish client configurations, but many browsers share the same pattern. JA4 sorts cipher-suite and extension identifiers, so changing only their order does not change those sorted inputs.

The "Fingerprint"

Security tools summarize ClientHello attributes into fingerprints such as JA4. A match associated with bot traffic can inform a policy alongside behavior and other signals. It does not prove a visitor is a bot or determine a block by itself.

Browser Fingerprinting vs TLS Fingerprinting

Both techniques describe characteristics of a client. Combined signals may help distinguish browsers, while a TLS fingerprint alone commonly groups many clients with similar software configurations.

Browser fingerprinting (Application Layer): Tracking scripts embedded in a webpage actively query the browser environment via JavaScript. They collect screen resolution, installed fonts, time zone, CPU architecture, battery status, WebGL rendering output, and Canvas API results. Because the fingerprint is computed inside the browser, script blocking or privacy settings can reduce API-based collection. Request metadata can still provide fingerprinting signals when JavaScript is disabled.

TLS fingerprinting (Network Layer): This technique operates below the browser's rendering engine entirely. It does not require JavaScript or interact with the DOM, so blocking page scripts does not hide it. It analyzes the cryptographic handshake that occurs before the webpage begins to load. A service that collects these handshake characteristics can compute a fingerprint even when page scripts are blocked.

FeatureBrowser FingerprintingTLS Fingerprinting
LayerApplication (Layer 7 — DOM/Browser)Connection handshake, below page rendering
MechanismJavaScript, Canvas API, WebGL APIAnalysis of ClientHello characteristics visible to the observer
Data CollectedScreen size, fonts, GPU, battery, pluginsTLS version, cipher suites, extensions, ALPN, curves
Computed WhereClient-side (inside the user's browser)Server-side (on the host server, WAF, or load balancer)
Blockable?Script blocking reduces API collection; request metadata can remain visibleScript blocking does not hide it; depends on the TLS implementation and configuration
Use CaseAd tracking, targeted marketing, user profilingBot mitigation, DDoS protection, WAF access control

Privacy browsers reduce some application-layer signals by standardizing responses or restricting hardware access. TLS profiles reflect the application's TLS implementation and configuration, so protecting JavaScript APIs alone does not hide those profiles from the TLS-terminating server.

The JA3 Era: The First Standard for TLS Fingerprinting

In 2017, a team of researchers at Salesforce introduced the JA3 fingerprint — the framework that became the cornerstone of network-layer identification. JA3 worked by extracting the decimal values of the TLS version, accepted ciphers, extensions, supported groups, and elliptic curve formats from the ClientHello. It concatenated these values into a single string, separated by dashes, and processed the result through an MD5 hash function.

The MD5 output was concise enough to fit into automated threat feeds, database columns, and firewall rules while giving every vendor a standardized identifier format. For years, JA3 was the industry standard adopted by WAFs, DDoS mitigation engines, and malware analysts to differentiate human traffic from automated scripts.

Why JA3 Broke: The Randomization Crisis

JA3's fatal flaw was that its MD5 hash depended on the exact ordered sequence of cipher suites and extensions. If a single extension swapped positions, the resulting hash changed completely.

In early 2023, Google began randomizing the order of TLS extensions in Chromium browsers on every connection. This was not an attack on security tools — it was a proactive measure to prevent "ecosystem ossification," where rigid middleboxes broke connections whenever browsers introduced new security features. By shuffling extensions, Google forced servers to become adaptable rather than relying on fixed patterns.

Extension reordering can give the same client different JA3 hashes across connections. This makes exact matching less useful for such clients; it does not mean every JA3 signature or existing dataset is unusable.

The JA4 Standard: Modern TLS Fingerprinting Explained

Recognizing the collapse of string-concatenation methods, the cybersecurity firm FoxIO developed the successor: the JA4+ suite. Released in late 2023, JA4 was engineered from the ground up to be resilient against extension randomization, human-readable for analysts, and modular enough to accommodate future protocol changes.

Instead of a single opaque MD5 hash, a JA4 fingerprint is a 36-character structured string in three sections — the a_b_c format:

  • Section A (Protocol Foundation): Human-readable metadata including the TLS version (e.g., t13 for TLS 1.3), an SNI indicator (d or i), cipher suite count, extension count, and the ALPN value (HTTP/1.1, HTTP/2, or HTTP/3).
  • Section B (Cipher Hash): A truncated hash of the cipher suites, sorted by their hexadecimal IDs before hashing. Reordering an otherwise unchanged cipher list does not change this section.
  • Section C (Extension Hash): Sorts extension IDs, excluding SNI and ALPN, then appends signature algorithms in their original order before hashing. See the official JA4 specification.

Example JA4 Fingerprint (Interactive)

Choose a section above

Explore this fixed example. It does not measure your connection.

JA3 vs JA4: A Direct Comparison

FeatureLegacy JA3Modern JA4
OutputSingle 32-char opaque MD5 hash36-char modular string (a_b_c)
Order SensitivityHighly sensitive — any reorder breaks the hashSorts cipher and extension IDs; preserves signature-algorithm order
Randomization ResilienceChanges when included extension or cipher order changesNormalizes cipher and extension order; other changes can alter the fingerprint
Human ReadabilityOpaque — requires database lookupTransparent — shows TLS version, ALPN, counts
Threat HuntingBinary match only (exact hash or nothing)Granular pivoting on ab, ac, or c independently
ScopeClientHello packets onlyPart of JA4+ suite: JA4S (server), JA4SSH, JA4T (TCP), JA4H (HTTP)

The modularity of JA4 gives security teams a powerful advantage during threat hunting. If a malicious scanner constantly rotates cipher suites but leaves extensions static, an analyst can drop the volatile "B" section and track the actor using only the "A" and "C" components — helping find traffic with shared characteristics across different infrastructure. The JA4+ suite is now integrated into major platforms including VirusTotal, where researchers track evolving malware via specialized behavior_network search modifiers.

Why Websites Use TLS Fingerprinting to Block Bots

The modern internet faces an unprecedented volume of automated traffic. Malicious actors deploy globally distributed botnets to execute credential stuffing attacks, scrape proprietary content, hoard limited retail inventory, and launch Distributed Denial of Service (DDoS) campaigns. Defending against these threats requires mechanisms that can instantaneously, passively differentiate a real user from a script.

Historically, WAFs relied on IP reputation and HTTP headers like the User-Agent string. But advanced attackers trivially rotate residential proxy IPs and spoof HTTP headers to perfectly mimic Chrome or Firefox.

TLS analysis adds another signal. A default Python requests client can produce a handshake that differs from Chrome, even if it sends a Chrome User-Agent. Such a mismatch may indicate automation, but TLS-aware clients can imitate browser profiles and legitimate clients can share signatures.

Illustrative Client Categories

These example proportions are not measured traffic or detection rates. Browser, automation and API clients can share TLS profiles; a JA4 signature alone cannot establish intent or reliably separate these categories.

  • Browser-like ClientsExample: 60%
  • Automated ClientsExample: 25%
  • API / Tool ClientsExample: 15%

Example proportions only; not a JA4 classification result

Common Automation Signatures and Their Limits

Default client libraries can expose profiles that differ from mainstream browsers. Whether a request is allowed, challenged, or blocked depends on site policy, library versions, configuration, and other signals. These examples are qualitative; they are not measured detection rates.

Tool / LibrarySignature CharacteristicsInterpretation Limit
Python requests (urllib3)Static OpenSSL profile, no HTTP/2, missing browser extensionsDepends on TLS library version and configuration
Standard cURL 7.xProfile depends on the selected TLS backend and optionsLegitimate command-line clients also use cURL
Go http.ClientGo TLS defaults can differ from browser profilesCustom TLS implementations can change the profile
Node.js httpsNode.js TLS configuration, commonly backed by OpenSSLJavaScript execution does not imply a browser TLS profile
Custom MalwareDeprecated ciphers, uncommon curves, embedded outdated TLS stacksA signature alone cannot establish malicious intent

Security systems can combine TLS profiles with HTTP behavior and other signals. Depending on the site’s rules, a request may be allowed, rate-limited, challenged or blocked. A shared signature or an unusual handshake does not determine that outcome on its own.

How TLS Fingerprinting Impacts Normal Users

While TLS fingerprinting is primarily a tool for enterprise security teams, its global deployment significantly affects everyday internet users in three ways.

The Invisible Shield: Security and Availability

For most consumers, this technology works as a silent protective layer. By identifying and dropping automated DDoS floods at the network edge, CDNs and service providers keep websites fast and available. When bots attempt credential stuffing against a banking portal, TLS profiles can contribute to a broader detection system. A fingerprint alone cannot establish that a request is malicious.

The Accessibility Risk: False Positives

Rules based too heavily on shared signatures can block legitimate clients. A profile associated with unwanted traffic may also appear in legitimate applications. Site operators need additional signals and a way to investigate false positives. Cloudflare's documentation describes both blocking unwanted traffic and allowing legitimate traffic that shares a signature.

The Privacy Paradox: Unconsented Tracking

Passive fingerprinting can create privacy concerns without a visible browser prompt. A TLS signature describes a software configuration and may contribute to profiling when combined with other data. Applicable privacy obligations depend on jurisdiction, purpose, and how collected data is used.

Common Myths About VPNs and Digital Anonymity

As public awareness of tracking has grown, a massive commercial industry has emerged around VPNs and privacy tools. Unfortunately, aggressive marketing has fostered dangerous misconceptions about what these tools actually protect against.

Myth 1: A VPN Makes You Completely Anonymous

A VPN creates an encrypted tunnel and changes the public IP for traffic it routes. It is not designed to disguise your browser's TLS profile from the destination or prevent browser API fingerprinting. Profiles can still vary with protocol choices, configuration, and software updates; a matching signature does not establish that two sessions came from the same person.

Simulated Action

You are browsing the web using Google Chrome on Windows normally.

Visible Data

  • IP Address:198.51.100.55 (example)
  • Cookies:Present
  • User Agent:Chrome/120

Resulting TLS Fingerprint

8daaf615...
Consistent with a Chrome TLS profile
Example: website allows connection

Normal: This illustrative fingerprint is consistent with the claimed browser. Many clients can share it.

Many clients share a JA4 fingerprint. It can help classify connecting software, but linking sessions across different IPs requires additional evidence. FoxIO also warns that fingerprints change as application TLS libraries are updated.

Myth 2: Identical Hardware Produces Identical Signatures

Identical hardware does not guarantee identical browser API results: fonts, browser versions, and configuration can differ. Conversely, many different devices share a TLS profile. Neither hardware similarity nor a matching JA4 value establishes a person's identity.

Myth 3: Clearing Cookies Resets Your Digital Identity

Clearing cookies removes some stored identifiers, but does not reliably change the application's TLS profile. A private window separates session storage; it does not promise to hide every connection characteristic. TLS profiles are also not permanent identifiers and can change with software and settings.

The Realistic Threat Model

A VPN protects traffic routed through its tunnel from local network observers and changes the public address seen by destinations. It does not by itself remove cookies, account identifiers or browser fingerprinting signals. Choose additional privacy controls according to those separate exposures.

How to Check Your TLS Fingerprint

Given the invisible nature of TLS tracking, several analytical platforms allow you to see exactly what data your device leaks during every connection:

  1. BrowserLeaks: An extensive suite of diagnostic tests that reveals your SSL/TLS capabilities including supported protocols, extensions, and key exchange groups. It displays both the legacy JA3 hash and the modern JA4 string, plus deep-dive metrics on WebRTC leaks, Canvas uniqueness, and WebGL hardware fingerprints.
  2. Scrapfly Tools: Originally built for web scraping optimization, Scrapfly displays the JA3 hash, JA4 string, and proprietary HTTP/2 fingerprint strings used by specific WAF vendors like Akamai. These observations help developers compare client behavior; they do not establish how every WAF will classify it.
  3. VirusTotal: Beyond file scanning, VirusTotal integrates FoxIO's JA4 standard. Analysts can extract the JA4 fingerprint from sandboxed malware communicating with Command & Control servers and search for related observations that share the signature.
  4. AmIUnique: An academic project that compares browser API and configuration signals with its observation sample. Its browser fingerprinting results address different signals from a TLS-only profile.

These tools show how handshake metadata can reveal software characteristics before a login or page script runs. A matching TLS profile alone cannot establish which person or device made a connection.

TLS-aware clients let developers compare and reproduce handshake behavior. Their capabilities and the profiles supported by each version change over time, so inspect the observed output when testing.

The Rise of Cryptographic Impersonation

Changing the HTTP User-Agent alone does not change a TLS profile. Specialized clients can also modify their TLS handshakes and HTTP behavior to imitate supported browser configurations. Matching a profile does not guarantee that a client will pass a site's other checks.

Two specialized libraries exemplify this approach:

  • curl-impersonate: A modified build of cURL compiled with custom cryptographic libraries, allowing a simple script to imitate TLS and HTTP/2 behavior of supported browser versions.
  • uTLS (Go): A low-level fork of Go's crypto library that lets developers construct custom ClientHello messages byte-by-byte, enabling scripts to rotate signatures or masquerade as legitimate mobile applications.

In response, WAF vendors are moving beyond static handshake analysis. Modern defenses now incorporate behavioral heuristics, timing analysis (measuring millisecond delays between cryptographic state changes), and cross-request consistency checks to catch anomalies that even the best spoofing libraries fail to replicate over multiple connections.

Consumer Privacy Strategies: Blending, Randomization, and Compartmentalization

Attempting to manually spoof individual tracking vectors with a patchwork of extensions often creates a paradoxically unique profile — the "privacy paradox." Modern strategies take a different approach:

  • Standardized Blending: The Tor Browser and Mullvad Browser reduce some differences between users by standardizing browser behavior and limiting exposed information. These protections do not guarantee that users are indistinguishable, especially when accounts or other identifying data are involved.
  • API Randomization: Brave describes adding noise to selected fingerprintable API outputs in its farbling design. This reduces some tracking signals; it does not hide every identifier or guarantee protection from tracking.
  • Compartmentalization: Security experts recommend using multiple browsers for different threat models — a mainstream browser for authenticated sessions (banking, email) where identity is already known, and a privacy-hardened browser for general research, preventing cross-contamination of digital signatures.

As cookie-based tracking continues to decline, advertising networks and data brokers are expected to lean heavily on passive network-layer profiling. The ability to control your digital signature will transition from a niche cybersecurity skill into a fundamental requirement for everyday privacy.

Frequently Asked Questions

What is TLS fingerprinting?

TLS fingerprinting analyzes characteristics of a ClientHello message, such as TLS versions, cipher suites, and extensions, without requiring JavaScript. It helps classify client software. Many clients can share a fingerprint, so the result does not uniquely identify a person or device.

What is the difference between JA3 and JA4?

JA3 is the legacy standard introduced by Salesforce in 2017 that produces a single MD5 hash from the ClientHello parameters in their original order. JA4, developed by FoxIO in 2023, sorts cipher suites and extensions before hashing, making it resilient to the extension randomization introduced by modern browsers like Chrome. JA4 also uses a human-readable 36-character a_b_c format and is part of the broader JA4+ suite covering server responses, SSH, TCP, and HTTP.

Does a VPN protect me from TLS fingerprinting?

A conventional VPN is not designed to disguise your browser's TLS profile from the destination server. It changes the network path and public IP for traffic it routes, but the browser still negotiates TLS. Fingerprints can nevertheless vary with protocol, configuration, and software updates; a matching value does not prove identity.

Can I change or spoof my TLS fingerprint?

TLS fingerprints depend on the application's TLS implementation and configuration. Changing those can change the fingerprint. Tools such as curl-impersonate and uTLS can imitate browser handshakes. Privacy browsers reduce some fingerprint differences, but cannot guarantee that individuals are indistinguishable.

How is TLS fingerprinting different from browser fingerprinting?

Browser fingerprinting can combine JavaScript API results with request metadata. Blocking scripts reduces API-based collection but does not remove all fingerprinting signals. TLS fingerprinting analyzes the connection handshake and does not require JavaScript.

How do websites use TLS fingerprinting to block bots?

Web Application Firewalls can use TLS fingerprints alongside IP reputation, request behavior, and browser signals. A mismatch with the claimed User-Agent may contribute to a bot score. Blocking or challenging a request depends on site policy, and automated clients can also imitate browser handshakes.

Does clearing cookies or using incognito mode reset my TLS fingerprint?

Clearing cookies or opening a private window does not reliably change your TLS profile. The profile primarily reflects the application's TLS implementation and configuration. Values can still change with protocol choices and software updates, so a fingerprint should not be treated as a permanent identifier.

How can I check my own TLS fingerprint?

Several online tools display your TLS fingerprint in real time. BrowserLeaks shows both JA3 and JA4 hashes alongside detailed TLS capability data. Scrapfly Tools displays your fingerprint as WAF vendors see it. AmIUnique profiles your overall browser uniqueness. These platforms reveal exactly what data your device broadcasts during every HTTPS connection.

Conclusion

TLS fingerprinting summarizes characteristics of a client's handshake without requiring JavaScript. JA4 normalizes some ordering differences, helping analysts group similar client configurations. Shared signatures can describe software families but cannot independently identify a person or device.

Security teams can combine TLS profiles with behavior, request metadata, and other evidence. Decisions based on a fingerprint alone risk false positives, and automated clients can imitate browser handshakes.

A VPN can protect the routed connection from local network observers, while the destination still receives a TLS handshake. Private browsing and cookie clearing address different exposures. Choose privacy controls for the information you want to protect, and treat a diagnostic fingerprint as one observation rather than proof of identity or security.

Check the evidence

Review supported browser and connection observations alongside the limits explained in this guide.

Inspect browser signals