In this Article
Les nouveaux défis de sécurité font évoluer les mesures anti-bots, et il arrive même que des scrapers légitimes soient pris entre deux feux. Parmi ces techniques figure le fingerprinting TLS : une méthode discrète, encore peu connue, mais assez efficace pour identifier un appareil qui tente de se connecter à un serveur. Pourquoi est-il si difficile à contourner et comment scraper efficacement les données dont vous avez besoin ? Cet article vous donne toutes les clés.
Qu’est-ce que TLS, au juste ?
Pour comprendre le fingerprinting TLS, commençons par examiner TLS lui-même. TLS ou Transport Layer Security (auparavant SSL – Secure Sockets Layer) est un protocole qui s’ajoute à une connexion HTTP standard pour sécuriser vos activités en ligne. Lorsque vous voyez un cadenas à côté d’une URL ou que l’adresse d’un site web commence par https, cela signifie que TLS est actif. En pratique, il est désormais difficile de trouver un site web qui n’utilise pas TLS. Si vous essayez de visiter un site web dont l’adresse commence simplement par “http” (sans “s”), votre navigateur affichera un avertissement indiquant que la connexion n’est pas sécurisée au lieu d’ouvrir la page web.
TLS chiffre vos données avant de les envoyer au serveur cible : il les transforme en chaînes de symboles aléatoires, comme 9823h4brjhvbi, de sorte que même si des acteurs malveillants interceptent vos informations, ils ne puissent pas les exploiter. Toutefois, avant d’envoyer vos données, TLS doit s’assurer qu’il communique avec le serveur légitime, qui devra ensuite les déchiffrer. C’est pourquoi, avant l’envoi des données, TLS établit d’abord une connexion : il échange une série de messages avec le serveur cible afin de le vérifier, de convenir d’une méthode de chiffrement et de générer des clés de session partagées qui serviront à protéger et déchiffrer les données pendant la communication.
L’ensemble du processus s’appelle le handshake TLS et commence par un message “ClientHello”. C’est ce message qui nous intéresse dans le contexte du fingerprinting TLS, car il fournit les données que les serveurs utilisent ensuite pour vous identifier.
De quoi se compose le message “ClientHello” ?
Le message “ClientHello” ne contient pas de données sensibles, telles que des identifiants, et il est transmis en clair. Vous pouvez donc facilement le capturer et examiner son contenu à l’aide d’outils d’analyse réseau comme Wireshark. Il contient de nombreuses informations.
- Version TLS – la version la plus élevée prise en charge par le client.
- Aléa – valeur aléatoire générée par le client.
- ID de session – utilisé pour reprendre une session ; il est donc vide lors du premier handshake.
- Suites de chiffrement – algorithmes de chiffrement pris en charge par le client, classés par ordre de préférence.
- Méthode de compression – aujourd’hui, sa valeur est presque toujours 0.
- Extensions prises en charge – fonctionnalités supplémentaires que le client peut vouloir utiliser, par exemple :
- Server Name Indication (SNI) – précise le nom d’hôte demandé par le client.
- Application-Layer Protocol Negotiation (ALPN) – extension qui permet de négocier le protocole à utiliser via TLS. Elle est utile car elle est indépendante de la couche applicative. Pour les serveurs web, les protocoles négociés via les extensions TLS sont généralement HTTP/1.1 ou HTTP/2.
- Bibliothèques TLS – ensemble des bibliothèques utilisées par le client, qui varient selon le type de client.
- Algorithmes de signature – liste des algorithmes pris en charge pour vérifier l’identité du serveur.
- Courbes elliptiques – la communication chiffrée utilisant des équations de courbes sur des corps finis, cette partie indique la courbe à employer.
- Formats de points de courbe elliptique – indiquent la manière dont les points sont encodés.
Il existe aussi d’autres extensions. Grâce à toutes ces informations, un site web peut déduire beaucoup de choses à votre sujet à partir d’un message “ClientHello”, notamment votre pile logicielle, la famille de votre navigateur, le type d’appareil et votre posture de sécurité.
Méthode de fingerprinting JA3
Un serveur a donc reçu un message “ClientHello”. Que se passe-t-il ensuite ? C’est là qu’intervient la technique JA3. Maintenue par Salesforce, c’est la solution de fingerprinting la plus répandue. Elle se concentre sur cinq composants clés du message : version TLS, suites de chiffrement, ID d’extensions, groupes pris en charge (courbes elliptiques) et formats de points de courbe elliptique. Chaque élément est converti au format décimal, puis concaténé à l’aide de virgules et de tirets. Les données brutes de l’empreinte forment toutefois une longue chaîne ; par commodité, on utilise donc MD5, une fonction de hachage cryptographique. Elle produit un hachage fixe de 128 bits. Le résultat est ensuite comparé à d’autres empreintes possibles, souvent issues d’une base de données interne. Des bases de données publiques sont parfois utilisées.
L’objectif est de repérer les écarts : ce client ressemble-t-il à un navigateur web classique, ou présente-t-il quelque chose de suspect ? Le problème est que les hachages produits par un navigateur web ordinaire, comme Chrome, et ceux produits par une bibliothèque de programmation utilisée pour le web scraping diffèrent, car leurs messages ClientHello ne sont pas les mêmes. Les algorithmes JA3 ne prenant en compte qu’un nombre limité de variables, le nombre d’empreintes uniques possibles est réduit. Il est donc relativement facile de distinguer un utilisateur normal d’un bot de scraping.
Cela montre à quel point le fingerprinting TLS est efficace pour bloquer les scrapers et explique pourquoi il constitue un sérieux casse-tête pour les professionnels du web scraping.
Il existe des bases de données anti-web-scraping qui recensent les empreintes JA3 possibles. Vous pouvez calculer votre empreinte et vérifier si elle figure sur une liste blanche afin de garantir un accès fluide.
Cependant, les empreintes JA3 ne sont pas les seules à pouvoir révéler qu’un client qui se connecte est un scraper. La différence entre les valeurs du message ClientHello lui-même peut aussi déclencher les systèmes anti-bots. Par exemple :
- L’absence de SNI peut être un signal d’alerte, car SNI est généralement attendu dans une requête.
- Des requêtes ALPN obsolètes peuvent être perçues comme un signe d’activité suspecte, car les navigateurs modernes prennent généralement en charge HTTP/2.
- Les courbes elliptiques prises en charge par des navigateurs comme Chrome diffèrent de celles prises en charge par les scripts de programmation, ce qui peut éveiller les soupçons.
- La liste des suites de chiffrement est classée par priorité et doit correspondre à celle des navigateurs web courants, y compris dans son ordre. Il en va de même pour les extensions.
Comment s’aligner sur le fingerprinting TLS
En matière de fingerprinting TLS, l’objectif est de faire correspondre votre scraper aux empreintes d’un navigateur web courant. Ce n’est pas simple, mais plusieurs approches peuvent être envisagées. Vous pouvez même en combiner certaines.
- Utilisez des navigateurs headless
En utilisant des outils de qualité comme Puppeteer, Playwright ou Selenium, vous utilisez en réalité de vrais navigateurs et obtenez donc des empreintes authentiques. Ces outils ne modifient pas le fingerprinting TLS : les sites web ne peuvent donc pas déterminer si la connexion provient d’un navigateur ordinaire ou d’un navigateur headless. C’est une faille de moins.
- Variez les navigateurs et les versions de systèmes d’exploitation
Cette astuce permet de répartir les connexions entre plusieurs empreintes, ce qui est utile lorsque vous menez un projet de web scraping d’envergure.
- Utilisez un client HTTP basé sur LibCurl
Vous pouvez mettre à jour ces clients afin d’utiliser curl-impersonate. Il s’agit d’une version modifiée de la bibliothèque libcurl, qui ajuste les empreintes TLS pour les faire ressembler à celles d’un navigateur web ordinaire. Parmi les bibliothèques compatibles avec libcurl figurent Typhoeus (Ruby), Guzzle (PHP), PyCurl (Python), ainsi que les bibliothèques curl default et crul community (R).
- Usurpation TLS
Si vous utilisez Go, vous avez de la chance : c’est l’un des langages qui permettent l’usurpation TLS. Des bibliothèques comme utls de Refraction Networking, ja3transport et CycleTLS sont adaptées à cet usage.
En revanche, c’est moins simple avec Java ou Python. En Java, vous pouvez utiliser la méthode sslconfig.enabledCipherSuites pour reconfigurer la liste des suites de chiffrement activées. Avec Python, vous pouvez au mieux configurer les variables Cipher Suite et version TLS à l’aide de requests et httpx. Usurper ces variables peut aider à résoudre des problèmes d’accès ; toutefois, vos empreintes n’auront toujours pas l’air totalement authentiques.
- Faites varier d’autres éléments
Lorsque tout le trafic présente la même empreinte TLS, même si elle semble authentique, cela peut paraître suspect. Essayez de faire varier les éléments qui s’y prêtent, comme les cookies, le user agent, les en-têtes et l’adresse IP. Cela modifiera légèrement votre message ClientHello ; les empreintes JA3 seront donc elles aussi quelque peu différentes. Les navigateurs multi-comptes et les proxies de haute qualité vous y aideront.
Mot de la fin
Enfin, s’aligner sur le fingerprinting TLS peut être difficile, car les sites web adaptent légèrement le protocole TLS et appliquent leurs propres critères et bases de données pour autoriser ou refuser l’accès. Pour usurper efficacement les empreintes TLS, concentrez-vous sur chaque site web en particulier : identifiez ce qui déclenche ses mécanismes de fingerprinting et la manière dont il adapte le protocole standard. De plus, les sites web combinent aujourd’hui des signaux de niveau réseau, comme le fingerprinting JA3, avec des signaux de niveau applicatif tels que les polices et la résolution d’écran. S’appuyer uniquement sur l’usurpation TLS ne suffira donc pas : chaque détail de votre scraper doit paraître authentique. Pensez aussi à réévaluer régulièrement votre configuration : les sites web mettent fréquemment à jour leurs politiques et leurs méthodes de détection, et de nouvelles approches anti-bots apparaissent. Vous devrez donc vous adapter afin d’obtenir des données exactes. Bien sûr, vous devez toujours respecter les limites autorisées, scraper uniquement les données accessibles, éviter de surcharger les sites web cibles et utiliser des outils fiables, tels que des proxies obtenus légalement. DataImpulse peut vous aider sur ce dernier point : cliquez sur le bouton “Essayer maintenant” ou contactez-nous à l’adresse [email protected] si vous avez des questions.
