JAR3算法

JA3 Intro

项目地址👉https://github.com/salesforce/ja3

JA3S是服务器的TLS指纹,是通过提取TLS握手协议的一些字段值,再进行md5哈希

JA3是客户端的TLS指纹,和JA3S的生成差不多一样。

The JA3 algorithm takes a collection of settings from the SSL “Client Hello” such as SSL/TLS version, accepted cipher suites, list of extensions, accepted elliptic curves, and elliptic curve formats.

JA3S: MD5(TLS version,Cipher Suite,Ext1-Ext2...)

JA3: md5(TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats)

image-20231007145943590

如这里版本号0x0303对应十进制771,密码套件0xc02f对应十进制49199,以及扩展类型

image-20231007150521673

不同字段的值用,分隔,同一字段的多个值用-分隔,拼接起来刚好是JA3S Fullstring

再经过MD5哈希得到JA3S。

一般不同的客户端这些信息相同的概率都很小(包括顺序),所以服务端可能看某个JA3指纹的客户端高频率请求网站就把它封掉。

可以用这个网站来测试自己的JA3指纹:https://tls.peet.ws/

用无痕浏览器,每次刷新都得到不同的指纹,主要是每次扩展的顺序都变了

image-20231007183727047

使用requests库发包,每次得到的也是相同的ja3指纹

import json

import requests

for i in range(5):
    r = requests.get('https://tls.peet.ws/api/all')
    print(json.loads(r.text)['tls']['ja3_hash'])

Ref

  • https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/

Last updated

Was this helpful?