TLS指纹检测识别客户端
什么是TLS指纹
TLS指纹(TLS Fingerprinting)是一种用于识别和分类网络流量中使用的TLS(Transport Layer Security)协议版本、加密套件及其他相关参数的技术。通过分析TLS握手阶段的特征(如Client Hello报文中的字段排列、扩展列表等),可以生成一个独特的“指纹”,用于识别客户端(如浏览器、应用程序或设备)的类型、版本甚至是否为自动化工具(如爬虫)。
实现原理
Client Hello 报文分析
TLS握手开始时,客户端会发送Client Hello报文,包含以下关键信息:
- TLS版本(如TLS 1.2、TLS 1.3)。
- 支持的加密套件(Cipher Suites)列表及其顺序。
- 扩展(Extensions)类型及顺序(如SNI、ALPN、签名算法等)。
- 其他字段(如椭圆曲线类型、签名算法等)。
指纹生成方式
将这些字段的组合(尤其是顺序和特定选项)通过哈希(如JA3算法)或规则匹配转换为唯一标识符。例如:
- JA3/JA3S:将TLS版本、加密套件、扩展等字段按顺序拼接后计算MD5哈希,生成指纹(如771,4865-4866-4867-…,23-65281-10-11-16-5-13-… → MD5哈希)。
- 其他方法:如TLSH、Akamai的指纹方案等。
检测
有一些网站提供了tls指纹检测
模拟
通过定制化TLS栈模拟浏览器的握手过程。维护比较活跃的有 curl_cffi
(python库)
curl_cffi是一个对curl-impersonate的binding。维护活跃,截止目前支持到chrome136。
安装
pip install curl_cffi --upgrade
使用
import curl_cffi
# Notice the impersonate parameter
r = curl_cffi.get("https://tls.browserleaks.com/json", impersonate="chrome")
print(r.json())
最后修改于 2025-06-17