known client
Node.js fetch / undici
Node 22 — bundled OpenSSL 3 (newer)
Matches Node.js fetch / undici in the ground-truth catalogue.
- JA4
- JA4_r
- JA3
- several builds share this JA4 under different JA3s — no single value is canonical.
- JA3_raw
- —
this JA3 also appears under:
- t13d5212h2_b262b3658495_8e6e362c5eac · 1,884 obs
One JA3 mapping to several JA4s means the same cipher/extension set arrived under different TLS versions or ALPNs — the JA4 is the finer identity.
Read
Spread measures reach, not intent: it can’t tell one scraper visiting 500 domains from 500 people visiting one each. Stability is a claim about software — whether the stack is deterministic — nothing about who runs it.
Footprint
ClientHello anatomy
The underscore groups of JA4_r are the raw cipher suites · extensions · signature algorithms behind the hash.
The post-quantum key share is a structural fact about the hello, not a verdict — GREASE values are flagged the same neutral way.
- 00x1302TLS_AES_256_GCM_SHA384
- 10x1303TLS_CHACHA20_POLY1305_SHA256
- 20x1301TLS_AES_128_GCM_SHA256
- 30xc02fTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- 40xc02bTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- 50xc030TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- 60xc02cTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- 70x009eTLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- 80xc027TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- 90x0067TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- 100xc028TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- 110x006bTLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- 120x00a3TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- 130x009fTLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- 140xcca9TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- 150xcca8TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
- 160xccaaTLS_DHE_RSA_WITH_CHACHA20_POLY1305
- 170xc0adTLS_ECDHE_ECDSA_WITH_AES_256_CCM
- 180xc09fTLS_DHE_RSA_WITH_AES_256_CCM
- 190xc05dTLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384
- 200xc061TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384
- 210xc057TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384
- 220xc053TLS_RSA_WITH_ARIA_256_GCM_SHA384
- 230x00a2TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- 240xc0acTLS_ECDHE_ECDSA_WITH_AES_128_CCM
- 250xc09eTLS_DHE_RSA_WITH_AES_128_CCM
- 260xc05cTLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256
- 270xc060TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256
- 280xc056TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256
- 290xc052TLS_RSA_WITH_ARIA_128_GCM_SHA256
- 300xc024TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- 310x006aTLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- 320xc023TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- 330x0040TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- 340xc00aTLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- 350xc014TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- 360x0039TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- 370x0038TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- 380xc009TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- 390xc013TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- 400x0033TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- 410x0032TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- 420x009dTLS_RSA_WITH_AES_256_GCM_SHA384
- 430xc09dTLS_RSA_WITH_AES_256_CCM
- 440xc051TLS_RSA_WITH_ARIA_256_CBC_SHA384
- 450x009cTLS_RSA_WITH_AES_128_GCM_SHA256
- 460xc09cTLS_RSA_WITH_AES_128_CCM
- 470xc050TLS_RSA_WITH_ARIA_128_CBC_SHA256
- 480x003dTLS_RSA_WITH_AES_256_CBC_SHA256
- 490x003cTLS_RSA_WITH_AES_128_CBC_SHA256
- 500x0035TLS_RSA_WITH_AES_256_CBC_SHA
- 510x002fTLS_RSA_WITH_AES_128_CBC_SHA
- 00x0000server_name (SNI)
- 10x000asupported_groups
- 20x000bec_point_formats
- 30x000dsignature_algorithms
- 40x0010application_layer_protocol_negotiation (ALPN)
- 50x0016encrypt_then_mac
- 60x0017extended_master_secret
- 70x0023session_ticket
- 80x002bsupported_versions
- 90x002dpsk_key_exchange_modes
- 100x0033key_share
- 110xff01renegotiation_info
Stored sorted — under one JA4 the wire order varies by construction, so no single order is “the” order.
- 00x11ecX25519MLKEM768 PQ
- 10x001dx25519
- 20x0017secp256r1 (P-256)
- 30x001ex448
- 40x0018secp384r1 (P-384)
- 50x0019secp521r1 (P-521)
- 60x0100ffdhe2048
- 70x0101ffdhe3072
- 00x0905unknown (0x0905)
- 10x0906unknown (0x0906)
- 20x0904unknown (0x0904)
- 30x0403ecdsa_secp256r1_sha256
- 40x0503ecdsa_secp384r1_sha384
- 50x0603ecdsa_secp521r1_sha512
- 60x0807ed25519
- 70x0808ed448
- 80x081aunknown (0x081a)
- 90x081bunknown (0x081b)
- 100x081cunknown (0x081c)
- 110x0809rsa_pss_pss_sha256
- 120x080arsa_pss_pss_sha384
- 130x080brsa_pss_pss_sha512
- 140x0804rsa_pss_rsae_sha256
- 150x0805rsa_pss_rsae_sha384
- 160x0806rsa_pss_rsae_sha512
- 170x0401rsa_pkcs1_sha256
- 180x0501rsa_pkcs1_sha384
- 190x0601rsa_pkcs1_sha512
- 200x0303rsa_pkcs1_sha512 (legacy)
- 210x0301rsa_pkcs1_sha256 (legacy)
- 220x0302rsa_pkcs1_sha384 (legacy)
- 230x0402rsa_pkcs1_sha384
- 240x0502ecdsa_secp384r1_sha384
- 250x0602ecdsa_secp521r1_sha512
JA3 variants
3 distinct JA3 hashes collapse into this one JA4.
| # | JA3 | JA3_raw | obs | share |
|---|---|---|---|---|
| 0 | 771,4866-4867-4865-491…-257,0-1-2 | 6,055 | 100% | |
| 1 | 771,4866-4867-4865-491…-260,0-1-2 | 20 | 0.3% | |
| 2 | 771,4866-4867-4865-491…-256-257,0 | 6 | <0.1% |
JA3 hashes preserve wire order, so a permuting client mints a new one per connection; JA4 sorts the same set, which is why they share one JA4. Every hash here belongs to this fingerprint — there is no per-JA3 page.
Reach — domains contacted
- 1.2%
- 1.1%
- 1.0%
- 0.9%
- 0.9%
- 0.6%
- 0.5%
- 0.5%
- 0.4%
- 0.4%
- 0.4%
- 0.3%
- 0.3%
- 0.3%
- 0.3%
Top 15 of 3,970. Share is the fraction of this fingerprint’s observations reaching each name.