Certificate Pinning
generalDéfinition
Le Certificate Pinning (ou Public Key Pinning) est une technique de sécurité TLS qui consiste à associer de manière statique, dans le code d'une application ou d'un client, le certificat ou la clé publique spécifique(s) attendu(s) lors de la connexion à un service. Plutôt que de faire confiance à tout certificat valide signé par une autorité de certification (CA) de confiance, l'application vérifie que le certificat présenté correspond exactement à celui ou ceux préalablement configurés. L'objectif principal du pinning est de protéger contre les attaques man-in-the-middle (MITM) qui utiliseraient un certificat valide mais non autorisé — par exemple, un certificat émis par une CA compromise ou malveillante, ou par un proxy d'inspection SSL déployé dans un réseau d'entreprise sans connaissance du client. Sans pinning, un attaquant qui peut insérer sa propre CA dans le magasin de confiance du système d'exploitation peut intercepter le trafic TLS de toutes les applications. Il existe deux variantes de pinning. Certificate Pinning : l'application pin le certificat complet — toute modification (renouvellement, changement de clé) invalide le pin et bloque les connexions. Public Key Pinning : l'application pin uniquement la clé publique — le certificat peut être renouvelé (avec la même clé) sans casser le pin. La deuxième approche est plus flexible pour la gestion opérationnelle. Les défis opérationnels du pinning sont significatifs. Un pin incorrect ou obsolète bloque toutes les connexions de l'application vers le service concerné — potentiellement toutes les fonctionnalités si le pin concerne le serveur API principal. La gestion du cycle de vie (mise à jour des pins lors du renouvellement de certificats) est complexe et nécessite des mises à jour de l'application. HPKP (HTTP Public Key Pinning) — le standard de pinning pour les navigateurs web via headers HTTP — a été déprécié par Google Chrome en 2018 précisément à cause de risques de lockout permanent des sites web. Le pinning est aujourd'hui recommandé principalement pour les applications mobiles natives (iOS/Android) qui communiquent avec des backends connus, et pour les applications à haute sécurité (banking apps, VPN clients) où le risque MITM justifie la complexité opérationnelle. Pour les navigateurs web grand public, le Certificate Transparency (CT) est privilégié comme mécanisme de détection des certificats frauduleux sans les risques de lockout du pinning.
Implémentation iOS et Android
Sur iOS, le pinning se configure via URLSession avec un delegate implémentant urlSession(_:didReceive:completionHandler:) qui compare la clé publique du certificat présenté avec les valeurs attendues (stockées en dur dans le bundle). TrustKit est une bibliothèque open-source qui simplifie le déploiement du pinning sur iOS et macOS avec support des pins de backup. Sur Android, le Network Security Config (XML dans res/xml/network_security_config.xml) permet de configurer le pinning déclarativement sans code : `
Certificate Transparency — alternative moderne au pinning
Certificate Transparency (CT, RFC 6962) est un mécanisme de détection des certificats frauduleux via des logs publics et vérifiables. Chaque CA doit enregistrer tout certificat émis dans des logs CT publics (gérés par Google, Cloudflare, DigiCert, etc.). Les navigateurs Chrome et Safari exigent la preuve CT (Signed Certificate Timestamps — SCT) pour accepter un certificat. Si une CA émet frauduleusement un certificat pour google.com, ce certificat apparaît dans les logs CT et peut être détecté par le propriétaire du domaine via des outils de monitoring CT (crt.sh, Facebook CT Monitor). CT ne prévient pas les attaques MITM en temps réel comme le pinning, mais détecte les certificats frauduleux rapidement pour réaction et révocation.
Bypass de pinning — techniques de test
Les pentesters utilisent plusieurs techniques pour bypasser le certificate pinning lors des tests d'applications mobiles. Sur des appareils jailbreakés/rootés : Frida (framework d'instrumentation dynamique) permet d'injecter du code JavaScript qui remplace les fonctions de vérification TLS pendant l'exécution, bypassing le pinning sans modifier l'APK/IPA. SSL Kill Switch (iOS jailbreaké) : tweak qui désactive la validation de certificat globalement. Sur appareils non rootés : recompilation de l'APK avec le pinning désactivé (reverse engineering), ou utilisation de proxies transparents en combinaison avec un profil de configuration CA installé. Ces techniques montrent l'importance de protéger l'intégrité du code (obfuscation, anti-tampering, root detection) en complément du pinning.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés. 2.1.7
Un projet cybersécurité ?
Expert dispo · Réponse 24h