Outil gratuit
Collez un JA4 ou un JA4_r et lisez ce que le client a proposé dans sa poignée de main TLS.
t13d1516h2_8daaf6152771_e5627efa2ab1
Tout se passe dans votre navigateur. Rien de ce que vous collez n'est envoyé.
Format
Lisible : protocole, version, SNI, nombre de suites, nombre d'extensions, première valeur ALPN.
Suites de chiffrement triées, puis SHA-256 tronqué à 12 caractères.
Extensions triées, sans SNI ni ALPN, puis les algorithmes de signature dans leur ordre, hashés de la même façon.
JA3 vs JA4
| Critère | JA3 | JA4 |
|---|---|---|
| Hash | Un seul MD5 de tous les champs | Préfixe lisible et deux hashes SHA-256 courts |
| Ordre des extensions | Hashé tel qu'envoyé : l'ordre mélangé de Chrome donne un nouveau JA3 à chaque connexion | Trié d'abord, l'ordre ne compte pas |
| Lisible sans base de données | Non | Protocole, version, SNI, nombres, ALPN |
| QUIC | Aucune marque | Commence par q |
| Licence | BSD 3-Clause | BSD 3-Clause (JA4 seul) |
D'où il vient
Seul celui qui termine TLS voit le ClientHello. Un script dans la page, jamais.
Bot Management le fournit dans cf.bot_management.ja4 pour les règles et dans request.cf.botManagement.ja4 dans les Workers.
Les règles peuvent filtrer sur l'empreinte JA4, et les journaux du WAF l'enregistrent.
Tout ce qui termine TLS peut le calculer et le transmettre dans un en-tête comme X-JA4.
Le plugin de FoxIO ajoute des colonnes JA4 aux captures de paquets.
Agentscan
Envoyez le JA4 avec chaque vérification Agentscan. Il est stocké avec le verdict, l'adresse et le réseau, et le journal montre quel client TLS se trouvait derrière chaque requête.
curl -X POST https://ipscanner.io/v1/agentscan/check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ip": "203.0.113.7",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
"ja4": "t13d1516h2_8daaf6152771_e5627efa2ab1"
}'FAQ
Une courte chaîne qui décrit un ClientHello TLS : le protocole et la version proposés par le client, s'il a envoyé un nom de serveur, combien de suites de chiffrement et d'extensions il a listées et sa première valeur ALPN, suivis de deux hashes de ces listes. FoxIO l'a publiée en 2023 pour succéder à JA3.
TLS sur TCP, version 1.3, un nom de domaine dans le SNI, 15 suites de chiffrement, 16 extensions et HTTP/2 comme première valeur ALPN. Chaque JA4 commence par une partie de ce type, la seule lisible sans base de données.
JA3 est un seul MD5 des champs de la poignée de main, dans l'ordre d'envoi. Chrome mélange l'ordre de ses extensions depuis 2023, ce qui donne au même navigateur un nouveau JA3 à chaque connexion. JA4 trie d'abord les listes, reste donc stable et garde un préfixe lisible.
Oui. Des outils comme curl-impersonate et uTLS copient le ClientHello d'un navigateur : un JA4 de navigateur ne prouve donc pas à lui seul la présence d'un navigateur. Il sert surtout quand il contredit autre chose, par exemple un user agent Chrome arrivé avec une poignée de main Python.
Non. Les parties b et c sont des hashes SHA-256 tronqués à 12 caractères. Pour voir les suites de chiffrement et les extensions derrière, journalisez le JA4_r, qui garde les listes en clair.
Auprès de ce qui termine TLS : votre CDN, votre load balancer ou votre reverse proxy. Le JavaScript de la page ne peut pas le lire, car la poignée de main est terminée avant qu'un script ne s'exécute.
JA4, l'empreinte du client TLS, est sous licence BSD 3-Clause. Les autres méthodes JA4+ (JA4S, JA4H, JA4X, JA4T et les suivantes) relèvent de la FoxIO License 1.1, qui pose des conditions à l'usage commercial : lisez-la avant de les intégrer à un produit.