TLS 指纹

TLS 指纹读取 TLS ClientHello 的形状。 服务器在第一个 HTTP 请求之前看到此消息,因此它可以检查连接堆栈,而无需等待页面 JavaScript。

JA3 和 JA4 将选定的 ClientHello 字段转换为更易于比较的值。 密码套件、TLS 扩展、支持的组和协议详细信息可以帮助区分浏览器与移动应用程序、恶意软件样本或基本 HTTP 库。

有用的部分是一致性。 客户端可能会在其用户代理中声称自己是 Chrome。 它的 TLS 握手应该仍然适合该声明背后的浏览器和版本。 如果两层意见不一致,则该请求值得仔细检查。

这种不匹配只是一个信号。 TLS 指纹描述的是客户端堆栈,而不是人。 良好的风险系统会将其与 IP 历史记录、HTTP 行为和更广泛的 浏览器指纹 进行比较。

什么是 TLS 指纹?

TLS 保护客户端和服务器之间发送的数据。 在加密准备就绪之前,双方必须就连接设置达成一致。 客户端通过 ClientHello 开始协商。

不同的软件以可识别的方式构建此消息。 Chrome 使用 BoringSSL。 Firefox 使用 NSS。 许多脚本通过另一个库到达 OpenSSL。 它们支持的选项和扩展模式很少会意外地排列在一起。

CDN、Web 应用程序防火墙或源服务器可以记录选定的字段和组连接,并获得类似的结果。 它不需要解密页面或识别用户。 连接设置中已存在证据。

TLS 指纹如何工作?

典型的检查遵循五个步骤。

  1. 客户端打开 HTTPS 连接。
  2. 它发送一个 ClientHello 及其支持的连接选项。
  3. 服务器或 CDN 读取该消息中选定的字段。
  4. 指纹识别方法对这些字段进行标准化和总结。
  5. 安全系统将结果与已知模式和其他请求信号进行比较。

更改 HTTP 用户代理不会重建底层 TLS 堆栈。 因此,请求可以在像另一个应用程序一样连接时声明一个浏览器系列。

这是检查请求的原因,而不是一看到请求就阻止的原因。 公司网关、安全软件、不寻常的浏览器版本和 TLS 中介都可以改变服务器观察到的内容。

TLS 指纹中使用哪些信息?

指纹格式选择不同的字段和标准化规则。 大多数都取自 ClientHello 的相同部分。

信号它描述了什么重要限制
TLS版本客户端提供的协议版本同一版本被多个客户端共享
密码套件客户端支持的加密选项列表描述的是能力,而不是一个人
TLS 扩展ClientHello 中包含的额外功能现代浏览器可能会更改扩展顺序
支持的团体椭圆曲线和密钥交换组结果可能会随着库更新而改变
签名算法客户接受的签名方式多个应用程序可能使用相同的列表
ALPNHTTP/2 等应用协议它没有描述完整的 HTTP 行为
SNI 存在是否包含服务器名称紧凑的指纹可能不包含服务器名称本身
字段顺序和计数客户端如何构造消息某些格式对字段进行排序并放弃顺序

GREASE 值也需要特殊处理。 浏览器添加保留值来测试服务器是否可以容忍未来的协议更改。 JA3和JA4在正常指纹计算期间都会忽略这些值。

这些字段描述了实现选择。 运行相同浏览器版本的两台计算机可以产生相同的标准化结果。

什么是 JA3 指纹?

JA3是Salesforce研究人员在2017年推出的一种方法。 它需要来自 ClientHello 的五个有序组。

  1. TLS 或 SSL 版本
  2. 接受的密码套件
  3. TLS 扩展
  4. 支持的椭圆曲线
  5. 椭圆曲线点格式

JA3 将这些组中的十进制值连接成一个字符串。 然后它会生成 32 个字符的 MD5 哈希值。 哈希是一个紧凑的查找键。 此处未使用 MD5 来保护密码或证明数据完整性。

原始 JA3 项目 现已存档。 JA3 仍然很重要,因为多年来的网络工具和威胁情报都依赖于它的价值。

它的弱点是扩展顺序。 JA3 保留了它,而 Chrome 在 2023 年开始改变跨连接的顺序。 然后,一个浏览器可以在不改变其主要功能的情况下生成许多 JA3 哈希值。 快速记录了其网络上的效果。

什么是 JA4 指纹?

JA4 是 FoxIO 推出的一种较新的 TLS 客户端指纹格式。 它减少了因更改密码和扩展顺序而产生的噪音。

JA4 值具有三个部分。

部分主要内容
a传输、TLS 版本、SNI 存在、密码计数、扩展计数和 ALPN
b排序后的密码套件代码的短哈希值
c排序扩展代码和签名算法的短哈希

当唯一的区别是密码或扩展顺序时,排序使 JA4 稳定。 它还删除了该命令作为证据。 需要原始序列的安全团队应保留数据包或原始握手数据。

JA4属于更广泛的JA4网络指纹项目。 JA4 涵盖了客户问候。 JA4S 涵盖服务器响应。 JA4H 涵盖 HTTP 客户端行为。 它们是同一家族内的不同指纹。

对于新的收集管道,JA4 通常是更干净的起点。 当历史比赛和现有威胁数据很重要时,JA3 仍然能赢得一席之地。 许多团队在过渡期间都保留了两者。

JA3 与 JA4

区域JA3JA4
输入TLS 客户端HelloTLS、QUIC 或 DTLS 客户端问候
输出一个 MD5 哈希值三个结构化部分
密码顺序保存完好已排序
延期令保存完好已排序
润滑脂值被忽略被忽略
ALPN扩展存在有助于短 ALPN 表示可见
最适合历史匹配和现有威胁数据现代分组和部分比较

匹配意味着选定的握手字段产生相同的表示。 应将其视为客户端类型的分类,而不是用户身份匹配。

TLS 指纹与 HTTP 和浏览器指纹

真正的检测系统并不依赖于一个指纹。 他们比较来自多个层的信号,每个层回答不同的问题。

TLS 信号

TLS 信号描述客户端如何启动加密连接。 JA3 和 JA4 属于这里。 服务器可以在页面代码运行之前检查它们。

HTTP 信号

HTTP 信号包括标头名称、标头顺序、协议选择和请求结构。 HTTP/2 添加了 SETTINGS 框架、窗口大小和伪标头顺序。 这些详细信息可以支持 TLS 发现,但它们来自请求的不同阶段。

浏览器信号

浏览器信号来自标头和浏览器 API。 字体、屏幕详细信息、Canvas 输出、WebGL 指纹 和 音频指纹 可以揭示页面环境是否适合网络堆栈。 大多数这些检查都需要页面代码才能运行。

行为信号

行为信号描述了客户随着时间的推移所做的事情。 请求率、导航顺序、会话历史记录、鼠标输入和重复操作是 Bot 检测 的核心。 正确的握手不能使可疑行为合法化。

有用的决策来自于各层之间的共识。 Chrome 用户代理、Chrome 风格的 TLS 握手、预期的 HTTP/2 设置以及工作的浏览器 API 讲述了一个一致的故事。 人类意图仍然必须根据会话及其行为来判断。

TLS 指纹可以揭示什么?

TLS 指纹可用于估计:

  • 客户端是否类似于浏览器、应用程序、机器人或通用 HTTP 库
  • 哪个 TLS 实现或应用程序系列可能创建了连接
  • 握手是否适合报告的用户代理
  • 连接模式之前是否出现过
  • 流量是否属于威胁数据库中的已知组

这是一个很糟糕的主张的基础:

  • 用户的姓名或身份
  • 帐户的所有权
  • 独特的物理设备
  • 每种情况下的确切操作系统
  • 请求是否有害
  • 两个匹配请求是否共用一个算子

Cloudflare 在机器人管理中使用 JA3 和 JA4 作为更大信号集的一部分。 其 JA3 和 JA4 文档 还指出,未加密的请求或会话恢复避免新的握手时可能会丢失指纹。 默认情况下,缺失数据不应被视为可疑。

TLS 指纹在哪里使用?

TLS 指纹在可重复的安全工作中发挥其价值。

  • 威胁追踪可以对已知恶意软件家族的加密连接进行分组。
  • 机器人管理可以将浏览器声明与连接堆栈进行比较。
  • 欺诈系统可以将结果添加到账户或交易风险模型中。
  • API 团队可以将预期的客户与不寻常的库分开。
  • Web 应用程序防火墙可以监视或限制已知指纹组的速率。
  • 运营团队可以找到旧的或意外的 TLS 实施。

隐私问题同样实际。 TLS 数据不依赖于 cookie 或本地存储。 当它与更广泛的浏览器指纹相结合时,它可以支持跨访问识别。

VPN 或代理会更改 TLS 指纹吗?

VPN 通常会更改路由和公共 IP。 它不会重建浏览器 ClientHello。 目的地仍然可以看到浏览器创建的握手。

标准 HTTP CONNECT 或 SOCKS 隧道通常具有相同的行为方式。 它承载连接而不终止 TLS,因此客户端仍然直接与目标进行协商。

当中介终止 TLS 并创建新的上游连接时,结果会发生变化。 在这种情况下,目的地会看到中介生成的 ClientHello。 企业检查网关和一些托管网络服务可以通过这种方式工作。

这就是 代理、VPN 和反检测浏览器 影响环境不同部分的原因。 目标端会看到建立其接收的 TLS 会话的软件的指纹。

隐身模式的效果也有限。 它会更改本地存储和浏览历史记录。 它通常不会取代浏览器 TLS 实现。

如何读取 TLS 指纹测试

测试页报告其自己的服务器观察到的内容。 它是一个比较工具,而不是通过证书。

使用受控比较。

  1. 在相同的浏览器配置文件中运行相同的测试两次。
  2. 记录浏览器版本、协议、JA3 和 JA4 值。
  3. 重新启动配置文件并重复测试。
  4. 浏览器或操作系统更新后再次测试。
  5. 请注意 VPN、代理或检查网关是否更改了连接路径。

仅当测试条件已知时,结果才变得有用。

结果可能的含义它没有证明什么
跨型材相同的 JA4标准化 TLS 字段匹配配置文件是同一设备
每个连接上都有新的 JA3延期顺序可能会发生变化客户彻底变了
JA3 或 JA4 缺失没有合适的新 TLS 握手可用该网站无法评估该请求
用户代理和 TLS 系列不同连接需要更多上下文该请求是恶意的

不同的测试站点可能以不同的方式计算或显示值。 首先从一项服务的重复结果开始,然后再比较其他地方的哈希值。

TLS 指纹和浏览器配置文件

浏览器配置文件将浏览器环境、cookie、代理设置和相关配置保存在一起。 MoreLogin 用户可以在 配置文件设置 中选择浏览器内核并管理通过浏览器 API 公开的信号。 其中包括 Canvas、WebGL、AudioContext、WebRTC、语言、时区和媒体设备。

TLS 位于这些浏览器 API 设置下方。 更改 Canvas 输出不会更改 JA3。 编辑用户代理文本不会重建 ClientHello。

MoreLogin 不会在其当前配置文件设置中公开列出单独的 JA3 或 JA4 控件。 因此,声称每个配置文件都收到唯一的 TLS 哈希将超出可用的产品信息。 浏览器版本、运行时、协议、代理设计和连接路径都会影响服务器观察到的内容。

对于授权团队工作,多帐户浏览器 将 cookie、代理分配和浏览器环境分开。 这减少了配置文件之间的意外重叠。 它无法控制每个第三方安全系统如何对流量进行分类。

同样的限制适用于 浏览器自动化。 在真实浏览器中运行的工作流使用与基本脚本库不同的网络堆栈。 它仍然需要许可、合理的请求率和可靠的错误处理。

TLS 指纹常见问题解答

TLS 指纹对于一台设备来说是唯一的吗?

不。 它通常描述客户端应用程序或 TLS 实现组。 许多运行相同浏览器版本的设备可以共享一个结果。 更新还可以更改同一设备上的指纹。

网站可以看到我的 TLS 指纹吗?

是的。 接收连接的服务器或 CDN 可以检查 ClientHello。 测试页可以显示该服务器返回的值。

更改用户代理是否会更改 JA3 或 JA4?

不是靠它自己。 用户代理是一个HTTP值,而JA3和JA4来自TLS握手。 编辑一个标头不会重建网络堆栈。

为什么两个浏览器可以有相同的JA4?

JA4 对选定的列表进行排序并对相似的握手进行分组。 具有相同引擎和 TLS 功能的浏览器可以共享结果。 这并不意味着浏览器是链接的。

清除 cookie 是否会更改 TLS 指纹?

不。 Cookie 存储会话数据,而 TLS 指纹则来自连接设置。 站点可以同时使用两者,但清除其中一个不会重置另一个。

加密客户端 Hello 是否会停止 TLS 指纹?

加密的客户端问候可保护握手的敏感部分,包括请求的服务器名称。 网络仍然可以看到外部 ClientHello,并且目标仍然处理完整连接。 ECH 无需删除每个 TLS 信号即可提高隐私性。

要点

TLS 指纹显示客户端如何启动加密连接。 JA3 对于历史匹配仍然有价值。 当现代浏览器更改列表顺序时,JA4 通常更容易使用。

当指纹与 HTTP、浏览器、网络、会话和行为信号一致时,它就变得有意义。 一个哈希可以指导风险决策。 它不应该单独做出这个决定。

开始使用 MoreLogin 构建

探索 API 文档,通过命令行实现自动化,连接兼容 MCP 的工具,或创建可复用的 RPA 工作流。