t13d1516h2_8daaf6152771_e5627efa2ab1
在瀏覽器本機執行,貼上的內容不會傳送到任何地方。
格式
可讀:協定、版本、SNI、加密套件數、擴充功能數、首個 ALPN 值。
加密套件排序後進行 SHA-256,截取 12 個字元。
擴充功能排序(不含 SNI 及 ALPN),再按原有次序附上簽章演算法,以相同方式雜湊。
JA3 與 JA4
| 項目 | JA3 | JA4 |
|---|---|---|
| 雜湊 | 對所有欄位進行一次 MD5 | 可讀前綴加兩個簡短 SHA-256 雜湊 |
| 擴充功能次序 | 按傳送次序雜湊,Chrome 打亂次序後每次連線都會得到新的 JA3 | 先行排序,次序不影響結果 |
| 毋須查表即可閱讀 | 否 | 協定、版本、SNI、計數、ALPN |
| QUIC | 沒有標記 | 以 q 開頭 |
| 授權 | BSD 3-Clause | BSD 3-Clause(僅限 JA4) |
來源
只有終止 TLS 的一方才能看到 ClientHello,頁面中的指令碼永遠看不到。
Bot Management 在規則中提供 cf.bot_management.ja4,在 Workers 中提供 request.cf.botManagement.ja4。
規則可比對 JA4 指紋,WAF 記錄亦會保存它。
任何終止 TLS 的元件都能計算 JA4,並透過 X-JA4 等標頭傳遞。
FoxIO 的外掛程式為封包擷取加入 JA4 欄位。
Agentscan
在每次 Agentscan 檢查中附上 JA4。它會與判定、位址及網絡一併儲存,記錄可顯示每個請求背後的 TLS 用戶端。
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"
}'常見問題
一個描述 TLS ClientHello 的短字串:用戶端提供的協定及版本、是否傳送伺服器名稱、列出多少加密套件及擴充功能、首個 ALPN 值,其後是這些清單的兩個雜湊。FoxIO 於 2023 年發布,作為 JA3 的後繼方案。
基於 TCP 的 TLS、1.3 版本、SNI 中帶有網域名稱、15 個加密套件、16 個擴充功能,首個 ALPN 值為 HTTP/2。每個 JA4 均以這樣的部分開頭,這亦是唯一毋須查表便能讀懂的部分。
JA3 是按傳送次序對交握欄位進行的一次 MD5。Chrome 自 2023 年起打亂擴充功能次序,令同一瀏覽器每次連線都得到新的 JA3。JA4 先將清單排序,因此保持穩定,並保留可讀前綴。
可以。curl-impersonate、uTLS 等工具能複製瀏覽器的 ClientHello,因此單憑瀏覽器 JA4 不能證明對方是瀏覽器。它在與其他訊號矛盾時最為有用,例如 Chrome 的 User-Agent 卻帶著 Python 的交握。
不可以。b 及 c 部分是截短為 12 個字元的 SHA-256 雜湊。如要查看背後的加密套件及擴充功能,請記錄 JA4_r,它以明文保留這些清單。
從終止 TLS 的環節取得:CDN、負載平衡器或反向代理伺服器。頁面中的 JavaScript 無法讀取,因為交握在任何指令碼執行前已經結束。
JA4(TLS 用戶端指紋)採用 BSD 3-Clause 授權。其他 JA4+ 方法(JA4S、JA4H、JA4X、JA4T 等)採用 FoxIO License 1.1,對商業用途設有條件,將它們整合至產品前請先閱讀該授權。