Herramienta gratis
Pega un JA4 o JA4_r y lee lo que el cliente ofreció en su handshake TLS.
t13d1516h2_8daaf6152771_e5627efa2ab1
Se ejecuta en tu navegador. Nada de lo que pegas se envía.
Formato
Legible: protocolo, versión, SNI, número de cipher suites, número de extensiones, primer valor ALPN.
Cipher suites ordenadas y después SHA-256 recortado a 12 caracteres.
Extensiones ordenadas, sin SNI ni ALPN, y después los algoritmos de firma en su orden, con el mismo hash.
JA3 vs JA4
| Aspecto | JA3 | JA4 |
|---|---|---|
| Hash | Un solo MD5 de todos los campos | Prefijo legible más dos hashes SHA-256 cortos |
| Orden de las extensiones | Se hashea tal como se envía, así que el orden aleatorio de Chrome da un JA3 nuevo en cada conexión | Se ordena antes, el orden no importa |
| Legible sin consultar nada | No | Protocolo, versión, SNI, recuentos, ALPN |
| QUIC | Sin marca | Empieza por q |
| Licencia | BSD 3-Clause | BSD 3-Clause (solo JA4) |
De dónde sale
Solo quien termina TLS ve el ClientHello. Un script en la página, nunca.
Bot Management lo pone en cf.bot_management.ja4 para las reglas y en request.cf.botManagement.ja4 en Workers.
Las reglas pueden filtrar por la huella JA4, y los logs del WAF la registran.
Cualquier cosa que termine TLS puede calcularlo y pasarlo en una cabecera como X-JA4.
El plugin de FoxIO añade columnas JA4 a las capturas de paquetes.
Agentscan
Envía el JA4 con cada comprobación de Agentscan. Se guarda con el veredicto, la dirección y la red, y el log muestra qué cliente TLS había detrás de cada petición.
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
Una cadena corta que describe un ClientHello TLS: el protocolo y la versión que ofreció el cliente, si envió un nombre de servidor, cuántas cipher suites y extensiones listó y su primer valor ALPN, seguidos de dos hashes de esas listas. FoxIO la publicó en 2023 como sucesora de JA3.
TLS sobre TCP, versión 1.3, un nombre de dominio en el SNI, 15 cipher suites, 16 extensiones y HTTP/2 como primer valor ALPN. Todo JA4 empieza con una parte así, y es la única que se lee sin consultar nada.
JA3 es un solo MD5 de los campos del handshake en el orden en que se enviaron. Chrome empezó a mezclar el orden de sus extensiones en 2023, así que el mismo navegador obtiene un JA3 nuevo en cada conexión. JA4 ordena antes las listas, se mantiene estable y conserva un prefijo legible.
Sí. Herramientas como curl-impersonate y uTLS copian el ClientHello de un navegador, así que un JA4 de navegador no demuestra por sí solo que haya un navegador. Sirve sobre todo cuando contradice otra cosa, como un user agent de Chrome que llega con un handshake de Python.
No. Las partes b y c son hashes SHA-256 recortados a 12 caracteres. Para ver las cipher suites y extensiones que hay detrás, registra el JA4_r, que guarda las listas en claro.
De lo que termina TLS: tu CDN, tu balanceador de carga o tu proxy inverso. El JavaScript de la página no puede leerlo, porque el handshake termina antes de que se ejecute ningún script.
JA4, la huella del cliente TLS, tiene licencia BSD 3-Clause. Los demás métodos JA4+ (JA4S, JA4H, JA4X, JA4T y el resto) usan la FoxIO License 1.1, que pone condiciones al uso comercial, así que léela antes de integrarlos en un producto.