什么是 JA4 指纹?TLS 结构与 JA3 对比

什么是 JA4 指纹?

Scrapeless Agent Browser 提供云端浏览会话,用于渲染动态页面并控制浏览器工作流。

JA4 指纹衡量什么?

JA4 指纹是由 FoxIO 定义的、对选定 TLS ClientHello 特征的结构化摘要。它将可读前缀与哈希组件结合在一起,使分析人员既可以比较整体客户端模式,也可以比较该模式的各个部分。

JA4 是更广泛 JA4+ 家族中的一种方法。TLS-client 的数值不应与该家族中的 HTTP、服务器或其他网络指纹混淆。在存储或讨论结果时,应指明具体的方法名称;仅使用“JA4+”范围过于宽泛,无法确定测量的字段。

该 JA4+ 项目规范 描述了该家族及其在网络分析中的预期用途。指纹是一种分组信号。它不能证明人为活动、账户所有权或执行应用操作的权限。

TL;DR

  • JA4 衡量的是 TLS 客户端握手模式。 它不衡量页面图像或 cookie 内容。
  • JA4 暴露有意义的组成部分。 分析人员可以检查部分模式,而不仅仅是一个不透明的摘要。
  • 排序减少了选定与顺序相关的差异。 其他变化仍然可能改变指纹。
  • JA4H 是不同的观测结果。 HTTP 客户端特征绝不能被误标为 TLS JA4 结果。

JA4 各部分是如何构建的?

JA4 通过协议和能力摘要、规范化的密码套件列表哈希,以及规范化的扩展与签名算法哈希来构建各部分。技术定义规定了规范化规则、排除项和编码方式。

可读前缀描述传输类别、算法所代表的 TLS 版本、SNI 的存在情况、提供的密码套件和扩展数量,以及 ALPN 摘要。SNI 和 ALPN 是协议特性,因此它们的表示应通过算法来理解,而不是凭便利标签猜测。

密码组件在哈希前会对包含的密码套件标识符进行排序。扩展组件对包含的扩展标识符进行排序,并按观测到的顺序合并签名算法。SNI 和 ALPN 在扩展哈希中被特殊处理,因为关于它们的信息已经出现在结构的其他位置。

该 JA4 TLS-client 技术定义 是这些细节的权威来源。采集方应始终如一地遵循该规范。不加区分地对所有输入字段排序会产生一种不同的方法,即便结果看起来类似。

JA4 对其哈希组件使用截断的 SHA-256 输出,并根据规范规则排除 GREASE 值。截断是一种紧凑表示的选择。可读前缀加紧凑哈希仍然是对更丰富握手的有损摘要。

为何规范化很重要?

规范化很重要,因为客户端可以在不改变基础能力集合的情况下改变所提供能力的顺序。保留每种顺序变化的指纹可能会将类似客户端分割成许多独立的分组。

JA4 对选定列表进行排序以减少这种变动来源。这使得在顺序发生变化的情况下比较仍然有用,同时保留其他差异。这并不意味着同一应用的每一次连接中 JA4 都保持不变。

TLS GREASE 行为 会添加保留值以检验可扩展性。采集方法需要将这些值与稳定能力区分开来。JA4 对 GREASE 的处理属于其规范化规则,而不是另一种“更改协议值即表示滥用”的说法。

客户端更新、能力变化、配置变更以及不同的连接路径都可能影响测量结果。如果指纹在更新后发生变化,应先检查原始观测数据,再将变化归因于新的操作者。规范化减少了某些差异,但不会抹除所有有意义的变化。

JA4 与 JA3 有何不同?

JA4 与 JA3 在输入处理和表示方式上不同。JA3 从选定的有序字段生成一个 MD5 摘要。JA4 暴露结构化前缀和分别哈希的规范化组件。这些数值不能互换。

维度JA3JA4 TLS 客户端
表示方式分隔字段序列的单个摘要可读前缀和分离的哈希组件
选定列表顺序在规范化输入中保留根据规范对选定列表进行排序
比较方式通常按完整摘要进行分组可按完整值或组件进行分析
身份主张不对设备进行认证不对设备进行身份验证

称 JA4 为一种较新的方法并不意味着现有的 JA3 遥测数据就失去了意义。历史调查可能依赖已经记录的 JA3 值。在迁移过程中,可以在适当的地方同时收集两者,同时保留算法标签并避免对不同类型的值进行比较。

通常情况下,无法将 JA3 摘要转换为 JA4,因为该摘要不包含底层的 ClientHello 数据。若你需要这两种方法,应获取相应的原始观测数据,并分别按照各自定义的流程进行计算。

JA4、JA4H 与 JavaScript 指纹

JA4、JA4H 和 JavaScript 指纹描述了不同的可观测行为。JA4 描述 TLS 客户端握手特征。JA4H 属于 HTTP 客户端指纹识别。JavaScript 指纹描述了页面代码可见的浏览器属性和执行情况。

安全平台可能会将它们全部关联起来,但诊断工具应报告它实际收集了哪些测量数据。一个读取屏幕尺寸的浏览器测试,并没有因此就测量 TLS ClientHello。一个记录握手的代理日志,并没有检查已渲染的页面。

这种区分也解释了为什么更改 User-Agent 并不能控制整个连接的身份。HTTP 头是在 TLS 连接握手之后产生的。客户端在头部中可以宣称自己属于某个浏览器家族,而其网络实现却会产生不同的模式。

即使是一组连贯的信号,也无法确定地确立用户意图。相同的浏览器构建可能同时支持阅读页面的人类用户、获准的测试,或是不受欢迎的自动化工作负载。应用策略和授权仍然需要各自独立的证据。

在哪里可以获得可信的 JA4 测量结果?

可信的 JA4 测量来自能够观察相关 ClientHello 并应用指定算法的组件。该组件可以是边缘服务、网络传感器,或你所控制的诊断端点。

识别被测量的跳点。一个终止 TLS 的网关会与源站创建单独的连接,因此源站可能观察到的是网关的 TLS 客户端,而不是原始浏览器。透传隧道可以保留原始客户端的握手。路由和终止是两个独立的问题。

The TLS 握手模型 为这些观察提供了协议背景。这也解释了为什么在终止基础设施之后运行的应用程序可能需要来自该基础设施的可信元数据,而不是尝试从普通请求头中重建握手。

将观测点、采集版本、时间以及相关客户端环境与结果一起存储。如果基础设施在某个请求头中传递了指纹,确保不受信任的调用方无法提供或覆盖该请求头。声明的指纹与测量得到的指纹是不同的。

一次受控的 JA4 调查

受控的 JA4 调查在更改一个明确定义的变量时,将连接观测与应用结果进行比较。它应当解决一个具体问题,例如客户端更新是否改变了其所提供的功能。

  1. 选择授权的观测端点。 确认它能识别到你打算测量的那个连接。
  2. 记录浏览器和路由。 包括相关版本以及 TLS 是否由中间实体终止。
  3. 请提供需要翻译的英文文本。 在适当情况下,保留规范化的字段详细信息,以便可以调查组件更改。
  4. 有意识地比较组件。 具有已更改哈希值的稳定前缀,其含义比完全更改的观测更狭窄。
  5. 请提供需要翻译的英文文本。 验证应用程序结果是否满足允许的任务。熟悉的 JA4 值并不能证明提取成功。

对于基于浏览器的收集, 代理浏览器文档 描述受管浏览器范围。 Scrapeless Agent 浏览器产品 提供浏览器运行时环境,而你的验证逻辑则用于确定目标页面和字段是否已到达。避免假设存在用于分配特定 JA4 值的未公开控制项。

相关 Node.js 浏览器指纹工作流程 对于基于浏览器的自动化来说是有用的上下文。比较 无爬取定价 根据你所测量的工作量和内容质量来进行判断,而不是将指纹匹配视为最终的验收标准。

结论

JA4 为分析人员提供了对所选 TLS 客户端特征的结构化视图,并减少了某些与顺序相关的变化。使用其组件来解释观测结果、保留测量上下文,并将其与 HTTP 和 JavaScript 指纹区分开来。该指纹用于支撑调查;应用程序的授权和可用响应仍是相互独立的决策。

构建一个可验证的工作流

选择适用于你许可数据来源的 Scrapeless 服务,然后根据你应用所需的字段检查返回的内容。

今天注册即可获得 5 美元的免费额度 — 无需信用卡.

领取你的 $5 额度 →

常见问题

问:JA4 是唯一的设备 ID 吗?

JA4 不是唯一的设备 ID。多个客户端可以共享一个握手模式,并且一个客户端的模式会随其环境而变化。

问:JA4 和 JA4H 是一样的吗?

JA4 TLS 客户端指纹和 JA4H HTTP 客户端指纹测量的是不同的层。请在每个记录的值中保留其方法名称。

问:可以把 JA3 哈希转换为 JA4 吗?

通常不能将 JA3 哈希转换为 JA4,因为它不会保留底层握手字段。请从适当的观测中分别计算每种方法。

问:匹配的 JA4 是否能保证网页访问?

匹配的 JA4 并不能保证访问。目标端还可以应用其他请求、会话、身份和应用策略。

参考资料