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