术语表

TLS 指纹

根据客户端建立 TLS 连接的方式算出的标识——ClientHello 里的密码套件、扩展及其排列顺序(TLS fingerprint)。

也称:JA3, JA4。

在任何 HTTP 请求出现之前,客户端会先发出 ClientHello 来开启 TLS 连接:它支持的协议版本、提供的密码套件、声明的扩展、接受的椭圆曲线,以及——很关键——它把这些列出来的顺序。不同的 TLS 库在这些地方的选择并不相同,因此对这个结构做哈希,就得到了发起连接那个软件的指纹。JA3 及其后继 JA4 是通行的格式。它是在网络边缘、浏览器之下采集的,所以页面里跑的任何东西都既改不了它,也看不到它。

它的实际用途是抓出那些自称并非其所是的客户端:一个用通用 HTTP 库、却发着 Chrome user-agent 的脚本,其 TLS 指纹是任何一个 Chrome 都从未产生过的,这个错配足以定论。Argus 不改动 TLS 指纹,也不宣称自己改了——它自带一份真正的 Chromium 构建,所以握手就是真正的 Chromium 握手,和它自称的那个浏览器对得上。这是要点而非短板,也在很大程度上解释了为什么从真实浏览器采集能过,而无头客户端过不去,这一点在数据采集页面上有说明。