使用 Wireshark 抓包分析浏览器 TLS 握手与 JA3 指纹
一、什么是TLS
TLS(传输层安全协议):它是一套规定网络如何加密通信的官方标准协议。当你的浏览器去访问网站时,会发出一个 Client Hello 数据包,里面塞满了各种技术参数(支持的加密算法、扩展功能、版本号等)。
二、客户端向服务端发送请求的简略过程:
三、用什么抓包工具能查看TLS协议信息
Wireshark 几乎可以查看网络模型中“所有层”的数据包,TLS协议能在Wireshark抓到
四、JA3指纹在数据挖掘上有什么作用?
通过模拟真实浏览器TLS指纹,可以降低被CF、Ali WAF、Akamai等顶级风控系统识别为自动化程序的概率
五、JA3是什么?它是如何工作的?
JA3 是一种基于 TLS Client Hello 的客户端指纹识别算法。,在 TLS 握手的第一步,客户端会发送一个 Client Hello 数据包给服务器。在这个包里,客户端会告诉服务器:“我支持哪些加密算法、哪些 TLS 版本、哪些扩展功能”
JA3 的原理就是把 Client Hello 包里的以下 5个核心字段 的值按顺序提取出来:
-
TLS Version(TLS 版本):ClientHello 中 legacy_version 字段的值。
-
Cipher Suites(加密套件列表):客户端支持的所有加密算法组合。不同语言和TLS库生成的Cipher Suites列表通常具有明显特征,因此可用于客户端识别。
-
Extension Lists(TLS扩展列表):客户端在握手时携带的扩展功能标签(例如
server_name、supported_groups等)。 -
Supported Groups(支持的椭圆曲线组):客户端支持的密钥交换算法曲线(如
X25519、secp256r1等)。 -
EC Point Formats(椭圆曲线点格式):客户端支持的曲线点编码格式(通常是
uncompressed)。
生成过程:
-
提取这 5 个字段的值(用十进制数字表示),并用逗号
,拼接成一个长字符串。 -
例如拼接出来的原始字符串是:
771,4865-4866-4867,0-23-65281-10-11-35-16-5-13-18-51-45-43-21,29-23-24,0 -
最后对原始字符串进行 MD5 哈希(Hash)计算,生成一个 32 位的哈希值(例如:
b32309a26951912be0293148631f32de)。
这个 MD5 值,就是这个客户端的 JA3 指纹。
例子
使用WireShark抓取TLS信息,以访问百度为例
用tls.handshake.type == 1筛选出Client Hello 数据包,并找到TLS(Transport Layer Security)下的名为Client Hello

JA3提取的5处核心字段:
1是TLS Version(TLS 版本)、2是Cipher Suites(支持的加密套件列表)、5是Extensions(TLS 扩展列表)、3是EC Point Formats(椭圆曲线点格式)、4是Supported Groups(支持的椭圆曲线组)

JA3 的十进制原始字符串:

JA3 指纹(MD5 Hash):

六、总结
JA3指纹(MD5 Hash)是提取了TLS协议中Client Hello 包的5个维度特征,进行哈希处理后生成的一个 32 位的哈希值,本文通过WireShark工具获取到了JA3指纹信息。
七、注意事项
随着TLS 1.3普及和浏览器指纹技术的发展,仅依赖JA3已难以准确识别客户端身份。
现代风控系统通常会结合HTTP Header、HTTP/2指纹、TCP指纹、浏览器环境指纹等多维特征进行综合判断。
因此,JA3更多是风控识别链中的一个维度,而非唯一依据。