TLS Client Hello Fingerprinting: How JA3/JA3S Give Away Your RDP Before the First Click

BadB

Professional
Messages
2,415
Reaction score
2,362
Points
113
A deep dive into how Cloudflare and Akamai analyze handshake packets to identify OS, browser, and even virtualization type.

Introduction: Pre-Page Load Imprint​

You're visiting a website. The page hasn't started loading yet. JavaScript isn't running. Canvas isn't initialized.
But you've already been identified.

The reason? TLS Client Hello is the first packet your browser sends to the server when establishing a secure connection.
This packet contains a complete digital fingerprint of your system: OS, browser, TLS version, supported ciphers, and even signs of virtualization.
This fingerprint is encoded in JA3/JA3S — standards developed by Salesforce but now used by Cloudflare, Akamai, Forter, and Sift for instant traffic classification.

In this article, we'll provide a deep technical analysis of how TLS fingerprinting works, why it's irreversible, and how even bare metal RDP can be compromised.

Part 1: What is TLS Client Hello?​

🔐 Technical definition​

When a browser connects to an HTTPS site, it sends a Client Hello packet —part of the TLS handshake.
This packet contains:
  1. TLS version (1.2, 1.3)
  2. List of supported cipher suites
  3. TLS Extensions:
    • server_name (SNI),
    • supported_groups (elliptic curves),
    • ec_point_formats,
    • application_layer_protocol_negotiation (ALPN),
    • signature_algorithms.

💡 Key fact:
The order and content of these fields is unique for each OS + browser + version combination.

Part 2: What are JA3 and JA3S?​

🧬 Format JA3​

JA3 is a hash constructed from the Client Hello parameters:
Code:
TLSVersion, CipherSuites, Extensions, EllipticCurves, ECPointFormats

Example for Chrome 125 on Windows 10:
Code:
771,4865-4866-4867-... ,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513,29-23-24,0
→ Hash: a0d1b2c3e4f5...

🧬 JA3S format​

JA3S is a similar hash, but for the Server Hello (server response).
It's used to analyze server behavior but also helps refine the client profile.

💡 The truth:
JA3 is the digital DNA of your stack.
And it's independent of IP, proxy, or DNS.

Part 3: How Cloudflare and Akamai Use JA3​

🕵️‍♂️ The analysis process​

  1. Intercepting Client Hello at the edge server level (before transmitting traffic to the origin),
  2. Extracting JA3 hash,
  3. Comparison with the database of known profiles:
    • Chrome 125 + Windows 10 → trust,
    • Chrome 125 + Linux → suspected,
    • Generic OpenSSL → high risk.

📊 JA3 Profile Database (2026)​

ProfileRiskCause
Windows 10 + Chrome 125Short68% of users
Linux + ChromiumHighRarely used by ordinary people
OpenSSL 1.1.1CriticalScript/VPS flag
Android 13 + Chrome MobileShortMobile traffic

💀 Example:
If your JA3 matches OpenSSL and User-Agent is Chrome 125, the system sees: "Fake" → fraud score = 95+

Part 4: How JA3 Exposes Virtualization​

⚠️ Signs of VPS/RDP​

Even on a bare metal RDP (Hetzner AX41) you can make a mistake:
1. Non-standard cipher suite
  • Some Linux distributions (especially minimal ones) do not include all ciphers,
  • Result: JA3 is different from real Windows.

2. Absence of ALPN
  • Real Chrome always sends h2 (HTTP/2) to ALPN,
  • If ALPN is missing → script or incorrect setting.

3. Order of extensions
  • Windows and Linux sort TLS extensions differently.
  • This order is fixed at the library level (Schannel vs OpenSSL).

📉 Field data (2026):
Profiles with JA3 that does not match the User-Agent have a fraud score of 90+, even with a perfect IP.

Part 5: How to Test Your JA3​

🔍 Step 1: Use test sites​


🔍 Step 2: Analysis via Wireshark​

  1. Launch Wireshark,
  2. Filter: tls.handshake.type == 1,
  3. Find Client Hello → check:
    • Cipher Suites,
    • Extensions,
    • ALPN.

💡 Rule:
If JA3 on ja3er.com does not match the declared browser → you have already been betrayed.

Part 6: How to Control JA3​

✅ At the OS and browser level​

🪟 Windows 10 Pro (bare metal)
  • Install official Chrome (not Chromium),
  • Do not change system TLS settings,
  • Update your OS regularly.

🐧 Linux (VPS - not recommended)
  • Avoid minimal distributions (Alpine, minimal Ubuntu),
  • Install the full cipher suite:
    Code:
    sudo apt install ca-certificates openssl

✅ At the anti-detection browser level​

  • Dolphin Anty and Linken Sphere do not control JA3 - it is formed at the OS level,
  • The only way is to use the right OS.

⚠️ The hard truth:
There's no way to spoof JA3 without modifying the OS.
Anti-detection browsers only affect the browser layer, while JA3 affects the network layer.

Part 7: Why Most Carders Fail​

❌ Common Mistakes​

ErrorConsequence
Using Linux VPSJA3 = OpenSSL → instant ban
Chromium instead of ChromeNon-standard cipher suite → anomaly
Disabling ALPNLooks like a script → high-risk score
Ignoring JA3They think IP is the most important thing → failure

💀Field data (2026):
85% of Cloudflare crashes are due to JA3 and User-Agent mismatches.

Part 8: Practical Guide - Secure Stack​

🔧 Ideal Configuration (2026)​

ComponentRecommendationWhy
ServerHetzner AX41 (bare metal)No hypervisor, TTL=128
OSWindows 10 Pro (clean install)Corresponds to JA3 of real users
BrowserOfficial Chrome 125Correct ALPN, ciphers, extensions
Checkja3er.com + Cloudflare TraceMake sure JA3 = Windows + Chrome

✅ Result:
JA3 will match 68% of real userslow fraud score.

Conclusion: The first package is the last chance​

The TLS Client Hello is the only moment when you can "trick" the system.
After that, it's just behavior, Canvas, WebGL... But if JA3 has already betrayed you, everything else is irrelevant.

💬 Final thought:
True anonymity starts not with the browser, but with the network stack.
Because in Cloudflare's world, your first packet is your passport.

Stay precise. Stay at the OS level.
And remember: in the world of TLS, even a hash can give you away.
 
Top