跳到正文
网络 · JA3 · JA4 · HTTP/2

TLS 指纹,与 user agent 保持一致

在页面运行任何 JavaScript 之前,TLS 握手就已经把客户端描述了一遍。Clearcote 的握手就是 Chromium 自己的,少数随 Chrome 版本变化的字段会跟随身份画像声明的版本,所以网络层和 user agent 讲的是同一套说法。

所有套餐均可用,默认开启,无需任何配置。

默认设置本身就是对的

import { launch } from "clearcote";

// default: the ClientHello follows the persona's claimed Chrome major
const browser = await launch({ fingerprint: "account-42", tlsProfile: "match-persona" });

// or pin a major (only together with a matching brandVersion), or leave the build's own TLS untouched:
//   tlsProfile: "chrome-150"
//   tlsProfile: "native"

亮点

Chromium 自己的握手

与 Chrome 发布版完全相同的 BoringSSL:密码套件列表、版本范围和每次连接的扩展顺序都是原汁原味的,而不是重新实现的。

跟随声明的版本

在近几个 Chrome 大版本之间有差异的字段,例如后量子密钥交换组和 ALPS 码位,会跟随声明的大版本,而不是停留在构建本身的版本上。

层与层之间没有接缝

JavaScript 层面和握手都来自同一个浏览器,所以不存在“user agent 打了补丁、网络栈却没打”这种错位。

HTTP/2 来自同一协议栈

SETTINGS、窗口更新和请求头顺序都来自 Chromium 自己的 HTTP/2 实现,而不是另一个独立的客户端库。

品牌信息在请求头里

Edge、Opera 和 Vivaldi 共用 Chromium 的握手;品牌信息体现在 user agent 和 client hints 中,而不在 ClientHello 里。

可配置,但很少需要

默认设置几乎适合所有人。提供这个选项,是为了避免你锁定一个与品牌版本相矛盾的版本。

为什么握手很重要

TLS 指纹(JA3,及其后继者 JA4)概括的是 ClientHello:客户端提供了哪些版本、密码套件、扩展和组,以及以什么形式提供。HTTP/2 又增加了一层:SETTINGS 帧、窗口大小和伪首部顺序。这两者都在服务器端读取,早于任何脚本运行,而且拿来和 user agent 比对的成本都很低。

很多自动化技术栈正是在这种比对中露出破绽。带 Chrome user agent 的 HTTP 库,发出的仍是它自己那个库的握手;JavaScript stealth 层改变的是页面读到的内容,而不是网络上实际发出的内容。Clearcote 从头到尾都是 Chromium,底下没有第二个客户端。

Clearcote 额外做的是版本一致性。每个 Chrome 版本都会改动几处握手细节。当身份画像声明的 Chrome 版本与它实际运行的构建不同时,match-persona 只把这几个字段调整为所声明的大版本,其余一切保持 Chromium 生成的原样。

伪造的 user agent 与 Clearcote 的对比

伪造 user agent 的自动化方案
Clearcote
握手
来自底层浏览器或 HTTP 库
Chromium 自带的 BoringSSL
UA 声称是 Chrome X
握手来自实际运行的那个版本
默认情况下,与版本相关的字段跟随 Chrome X
HTTP/2 SETTINGS 与请求头顺序
来自底层客户端
来自 Chromium 的 HTTP/2 协议栈
UA 在哪里修改
覆盖请求头或注入脚本
在引擎中,与 client hints 一起修改

典型用途

给握手打分的网站

很多边缘网络会在页面加载之前读取 JA3 或 JA4。一致的握手能从整体画面中去掉一处矛盾。

你自己设置的品牌版本

如果你在 Chrome 或 Edge 身份画像上设置了 brandVersion,主要的版本相关握手字段会跟随它。但浏览器的其余部分仍会上报引擎的真实版本,所以不设置 brandVersion 依然是保持一致的默认做法。

网络研究

用同一个二进制文件,比较与版本相关的握手字段在各个 Chrome 大版本之间如何变化。

Clearcote 专为隐私保护、测试、研究和合法自动化而打造。你须对自己的使用方式负责,并遵守所访问网站的条款。

哪些套餐包含此功能

所有套餐均可用,默认设置下即已生效。

对比套餐

常见问题

什么是 JA3 或 JA4 指纹?

对客户端 TLS ClientHello 的一种紧凑概括:包括它的版本、密码套件、扩展和支持的组。服务器用它来区分浏览器和 HTTP 库,并核实客户端是否与其 user agent 所声称的一致。参见关于 JA3 与 JA4 的问答。

Clearcote 会随机化 TLS 指纹吗?

不会。随机的握手不像任何真实浏览器,反而很容易被识别出来。Chrome 本身会在每次连接时打乱 TLS 扩展的顺序,Clearcote 完全照 Chrome 的方式保留了这一行为。

Edge 或 Opera 身份画像会改变 ClientHello 吗?

不会。这些浏览器底层都是 Chromium,共用同一套握手。品牌信息体现在 user agent、client hints 和请求头中,Clearcote 也正是在这些地方设置它。

什么时候需要修改 tlsProfile?

几乎不需要。match-persona 已经会跟随你声明的品牌版本。只有当你通过其他方式设置了品牌版本时,才需要锁定 chrome-<major>;如果想让握手完全保持构建编译时的样子,就用 native。

在文档中深入了解

相关功能

试用 Clearcote

可直接接入 Playwright 与 Puppeteer,一直到 TLS 握手都保持一致,并提供开源构建作为起点。

通过 GitHub 可免费使用一个浏览器。无需信用卡。