JA3 / JA3S
Définition
JA3 et JA3S sont des méthodes de fingerprinting réseau développées par Salesforce. JA3 génère un hash MD5 à partir des paramètres du ClientHello TLS (version SSL, cipher suites, extensions). JA3S fait de même pour le ServerHello. Ces signatures permettent d'identifier précisément le client HTTP utilisé, même si les headers sont falsifiés.
Deep Dive
JA3/JA3S : L'ADN de votre connexion HTTPS
Composition du hash JA3
Le hash JA3 est calculé à partir de 5 paramètres du ClientHello, concaténés et séparés par des virgules :
1. **SSLVersion** : Version TLS (ex: 771 pour TLS 1.2)
2. **Ciphers** : Liste des cipher suites supportées
3. **Extensions** : Extensions TLS activées
4. **EllipticCurves** : Courbes elliptiques pour ECDHE
5. **EllipticCurvePointFormats** : Formats de points des courbes
Exemple de calcul
```
Input: 771,4865-4866-4867-49195-49199,0-23-65281-10-11-35-16-5-13-18-51-45-43,29-23-24,0
Hash MD5: bd0bf25947d4a37404f0424edf4db9ad
```
Bases de données JA3
Des services comme ja3er.com maintiennent des bases de données de hashes connus, permettant d'identifier :
Limites du JA3
Code Playground
Calcul du hash JA3 à partir des paramètres ClientHello TLS
# Calculer le hash JA3 d'une connexion
import hashlib
def compute_ja3(client_hello):
"""
Calcule le hash JA3 à partir des paramètres ClientHello
"""
# Extraction des paramètres
ssl_version = client_hello.get('version', 771)
ciphers = ','.join(map(str, client_hello.get('cipher_suites', [])))
extensions = ','.join(map(str, client_hello.get('extensions', [])))
curves = ','.join(map(str, client_hello.get('elliptic_curves', [])))
point_formats = ','.join(map(str, client_hello.get('ec_point_formats', [])))
# Construction de la chaîne JA3
ja3_string = f"{ssl_version},{ciphers},{extensions},{curves},{point_formats}"
# Hash MD5
ja3_hash = hashlib.md5(ja3_string.encode()).hexdigest()
return ja3_hash, ja3_string
# Exemple
client_hello = {
'version': 771,
'cipher_suites': [4865, 4866, 4867, 49195],
'extensions': [0, 23, 65281, 10, 11],
'elliptic_curves': [29, 23, 24],
'ec_point_formats': [0]
}
ja3_hash, ja3_raw = compute_ja3(client_hello)
print(f"JA3 Hash: {ja3_hash}")
print(f"JA3 Raw: {ja3_raw}")Avis d'Expert 2026
JA3/JA3S restent en 2026 le standard de facto pour l'identification TLS. Cependant, l'adoption croissante de TLS 1.3 avec ses extensions chiffrées (ECH) pourrait réduire l'efficacité de cette technique d'ici 2027. Les équipes anti-fraude combinent désormais JA3 avec l'analyse comportementale.
Besoin d'aide sur JA3 / JA3S ?
Nos experts peuvent vous accompagner sur vos projets de crawling et d'optimisation GEO.
Contactez l'expert Crawlers.fr