🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

TLS指纹识别是什么?JA3与JA4解析

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

14-Jul-2026

TL;DR:

  • TLS指纹识别通过TLS握手识别客户端软件,在发送HTTP之前的第一个字节。 服务器读取ClientHello — 客户端提供的TLS版本、密码套件和扩展 — 并生成一个哈希,表明“这是Chrome”或“这是一个Python脚本”。
  • JA3是最初的方法;JA4是它的现代替代品。 JA3(来自Salesforce)按顺序哈希原始ClientHello字段,因此,当Chrome开始随机化其TLS扩展顺序时,JA3哈希变得不稳定。JA4首先对密码和扩展进行排序,因此指纹保持稳定。
  • JA4是人类可读的,而不是单一的不透明哈希。 它的a_b_c格式在前面编码TLS版本、SNI存在、密码和扩展计数,以及ALPN,然后哈希已排序的密码和扩展列表 — 因此您可以匹配其部分内容,而不仅仅是整体。
  • 定制的HTTP客户端具有非浏览器指纹。 requestscurl或修补库发送的密码/扩展集合与真实的Chrome不同,因此其JA4即使在干净的IP后也会突出显示。
  • 真实浏览器是可靠的答案。 Scrapeless Scraping Browser是真正的Chromium,因此其ClientHello — 因此其JA3/JA4 — 与普通访客的完全无差异。
  • 免费开始。 新的Scrapeless账户包括免费的Scraping Browser运行时 — 请在app.scrapeless.com注册。

引言:握手在HTTP之前揭示了你

TLS指纹识别通过连接打开TLS会话的方式识别背后的软件,而不是它之后发送的任何内容。每个HTTPS连接以ClientHello消息开始,客户端在其中宣传其支持的TLS版本、首选的密码套件和扩展列表。这些选择在真实的Chrome、Go程序和Python脚本之间存在差异,服务器可以将其哈希为一个紧凑的标识符,即使IP、用户代理和Cookie看起来完全正常,它仍然有效。

这就是为什么抓取程序可以轮换住家代理,伪装成Chrome用户代理,仍然被阻止的原因:它发送的TLS 1.3握手从一开始就从未表现得像Chrome。 本指南解释了什么是TLS指纹,JA3和JA4是如何计算指纹的,以及运行真实浏览器是呈现所属指纹的持久方法。


TLS指纹的构建基础

TLS指纹是ClientHello字段的哈希,这是客户端在打开TLS连接时发送的第一条消息。输入是客户端的TLS库和配置的稳定属性:

  • 提供的TLS版本(例如,TLS 1.2或1.3)。
  • 客户端支持的密码套件,按列出的顺序。
  • 客户端包含的扩展(SNI、ALPN、支持的组、签名算法等)。
  • 它广告的椭圆曲线和点格式

浏览器的TLS栈产生这些值的特定、一致的组合;而脚本库产生的是不同的组合。因为指纹是从传输层派生的,因此与头部和Cookie无关 — 更改用户代理对它没有影响。

JA3:最初的TLS指纹,以及它为何失效

JA3是第一种广泛采用的TLS指纹,由Salesforce的工程师在2017年发布。它按出现的顺序连接五个ClientHello字段 — TLS版本、密码套件、扩展、椭圆曲线和椭圆曲线点格式 — 然后对该字符串取MD5,忽略TLS规范保留的GREASE值。

依赖顺序成为JA3的弱点。在2023年,Chrome开始在每个连接中随机化其TLS扩展的顺序,因此同一Chrome安装从一个请求到另一个请求生成了不同的JA3哈希。每次连接都更改的指纹对于识别客户端是无用的,因此检测供应商需要一种不依赖于排序的方法。

JA4:现代且稳定的替代品

JA4是**JA4+**中的TLS客户端指纹,这是一套由FoxIO的John Althouse创建的网络指纹识别方法。它的定义步骤是在哈希之前对密码和扩展进行排序,这使得指纹即使在Chrome的扩展顺序随机化下也能保持稳定。它也是人类可读的:指纹以a_b_c格式分为三个部分排列,因此分析人员可以匹配任何部分,而不是一个不透明的哈希。

以示例指纹JA4=t13d1516h2_8daaf6152771_02713d6af862为例:

  • a 部分 — t13d1516h2 是可读的元数据。t 代表传输(t 表示通过 TCP 的 TLS,q 表示 QUIC,d 表示 DTLS);13 是 TLS 版本(1.3);d 表示存在 SNI 域(i 表示没有 SNI 或是 IP);15 是密码套件数量,16 是扩展数量,均不包括 GREASE;h2 是第一个 ALPN 值的首尾字符。
  • b 部分 — 8daaf6152771 是密码套件的 12 个字符截断 SHA-256,转换为十六进制并排序。
  • c 部分 是扩展的 12 个字符截断 SHA-256,按十六进制值排序,后面跟着签名算法。SNI 和 ALPN 扩展在此计算中被移除,因此同一客户端无论连接到域名还是 IP,保持相同的 c 部分。

排序是破解随机化的切入点,JA3 的问题正是如此:不管你怎么重新排列 Chrome 的扩展,排序后的列表——因此 JA4——都是相同的。

JA4+ 套件不仅仅是 TLS

JA4 指纹识别 TLS 客户端,但它是更大家族中的一个成员。更广泛的 JA4+ 指纹识别套件 涵盖连接的多个层面,包括:

指纹 简称 识别内容
JA4 JA4 TLS 客户端
JA4Server JA4S TLS 服务器响应
JA4HTTP JA4H HTTP 客户端
JA4X509 JA4X X.509 TLS 证书
JA4SSH JA4SSH SSH 流量
JA4TCP JA4T TCP 客户端
JA4Latency JA4L 客户端到服务器的延迟

JA4 TLS 客户端方法以 BSD 3-Clause 许可发布;其余 JA4+ 方法在 FoxIO License 1.1 下,且申请了专利。对于爬虫而言,JA4(TLS)和 JA4H(HTTP)是最常决定请求是被视为浏览器还是爬虫的两个方法。

为什么 TLS 指纹识别会阻止爬虫

TLS 指纹识别会阻止爬虫,因为请求一开始就没有呈现浏览器的指纹。像 requestshttpxcurl 或隐蔽补丁库这样的 HTTP 客户端,使用其自有库的密码和扩展集合进行 TLS 协商——这些集合没有真实的 Chrome 或 Firefox 生成。生成的 JA4 会归结为已知的非浏览器值,服务器可以拒绝或挑战该连接,无论请求头有多么可信。

这是用户代理伪装和代理轮换无法触及的层面。你可以从一个家庭 IP 发送 Mozilla/5.0 (… Chrome/126 …) 但仍然被标记,因为下面的 TLS 握手是由 OpenSSL 或 Go 的 crypto/tls 生成的,而不是 Chrome。手动匹配浏览器的 JA4 意味着要重现其确切的密码顺序、扩展集合和 ALPN——然后要跟上浏览器的更改。

如何呈现一个真实的 TLS 指纹

呈现浏览器 JA4 的可靠方法就是实际成为一个浏览器。Scrapeless Scraping Browser 是真实的、自主开发的 Chromium,因此它使用 Chrome 自有的堆栈进行 TLS 协商。它的 ClientHello——因此它的 JA3 和 JA4——是一个真正的 Chrome,这正是指纹识别服务器期待普通访问者的。专门用于爬虫,它带来了:

  • 真实的 Chromium TLS 堆栈——密码套件、扩展和 ALPN 来源于 Chrome,因此 JA4 匹配真实的浏览器,而不是脚本库。
  • 会话间一致的指纹,覆盖 TLS 和浏览器层面,没有 navigator.webdriver 的指示与之矛盾。
  • 覆盖 195 个国家的家庭出口,因此 IP 声誉与浏览器指纹匹配,而不是暴露数据中心地址。

app.scrapeless.com 的免费计划中获取你的 API 密钥。

在免费计划中获取你的 API 密钥: app.scrapeless.com

结论:指纹必须归属,而不仅仅是看起来正确

TLS指纹识别通过握手读取客户端,因此唯一持久的答案是一个真正属于浏览器的握手。JA3对原始ClientHello进行了哈希处理,但当Chrome随机化其扩展顺序时它就失效了;JA4对密码和扩展进行了排序并保持稳定,这就是为什么它现在是爬虫遇到的指纹。一个打补丁的HTTP客户端可以伪造头部并轮换IP,但在TLS层仍可能失败。运行真实的Chromium——带有Chrome的TLS堆栈、一致的指纹和住宅出口——呈现一个与普通访问者匹配的JA4。本文着眼于机制:有关如何通过该浏览器路由爬虫堆栈的操作工作流程,请参见清除TLS指纹检查的指南;有关相关的反检测层,请参见Scrapling生产爬虫指南,并在Scrapeless定价页面上比较计划。


准备呈现浏览器级TLS指纹?

加入我们的社区,索取免费计划,并与围绕基于指纹检测工作的开发者联系:Discord · Telegram

app.scrapeless.com注册以获取免费的爬虫浏览器运行时,让真实的Chromium呈现目标所期望的TLS指纹。


常见问题

问:JA3和JA4有什么区别?
JA3是原始顺序中ClientHello字段的MD5哈希;JA4在哈希之前对密码套件和扩展进行排序,并添加了可读的元数据前缀。排序使JA4在TLS扩展顺序随机化的情况下保持稳定,这使JA3哈希在不同连接间发生变化。

问:我可以通过更改用户代理来更改我的TLS指纹吗?
不可以。用户代理是握手后发送的HTTP头部;TLS指纹是源自握手本身的。它们是独立的层,这就是为什么伪造的用户代理对你的JA3或JA4没有任何影响。

问:即使使用住宅代理,我的爬虫为什么仍然被阻止?
住宅IP修复了网络层,但如果你的HTTP客户端与非浏览器的密码和扩展集协商TLS,它的JA4仍然将其识别为脚本。指纹和IP必须一致。

问:Scrapeless爬虫浏览器会将我的JA4更改为假的Chrome吗?
它不伪造任何东西——它是真正的Chromium,因此它与Chrome的实际堆栈协商TLS。它呈现的JA3/JA4属于真实的Chrome,因为握手确实来自Chrome。

问:TLS指纹识别与浏览器指纹识别是一样的吗?
不是。TLS指纹识别读取传输握手(密码、扩展、ALPN);浏览器指纹识别读取页面内部的属性(画布、字体、navigator值)。一个令人信服的会话需要两者结合才能看起来像真实浏览器。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录