known client
curl / libcurl (curl, PHP ext-curl, Guzzle)
libcurl + OpenSSL 3, Alpine (musl); h2
Matches curl / libcurl (curl, PHP ext-curl, Guzzle) in the ground-truth catalogue.
- JA4
- JA4_r
- JA3
- JA3_raw
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
- 30xc02cTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- 40xc030TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- 50x009fTLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- 60xcca9TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- 70xcca8TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
- 80xccaaTLS_DHE_RSA_WITH_CHACHA20_POLY1305
- 90xc02bTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- 100xc02fTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- 110x009eTLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- 120xc024TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- 130xc028TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- 140x006bTLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- 150xc023TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- 160xc027TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- 170x0067TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- 180xc00aTLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- 190xc014TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- 200x0039TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- 210xc009TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- 220xc013TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- 230x0033TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- 240x009dTLS_RSA_WITH_AES_256_GCM_SHA384
- 250x009cTLS_RSA_WITH_AES_128_GCM_SHA256
- 260x003dTLS_RSA_WITH_AES_256_CBC_SHA256
- 270x003cTLS_RSA_WITH_AES_128_CBC_SHA256
- 280x0035TLS_RSA_WITH_AES_256_CBC_SHA
- 290x002fTLS_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
- 70x002bsupported_versions
- 80x002dpsk_key_exchange_modes
- 90x0031post_handshake_auth
- 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
Reach — domains contacted
- 71%
- 23%
- 1.8%
- 1.3%
- 1.0%
- 0.4%
- 0.3%
- 0.3%
- 0.1%
- 0.1%
- 0.1%
Top 11 of 11. Share is the fraction of this fingerprint’s observations reaching each name.