HPKP est un en-tête de réponse de sécurité Web obsolète, l'acronyme signifie HTTP Public Key Pins. Il visait à empêcher une autorité de certification compromise ou malhonnête d'émettre un certificat HTTPS de confiance publique, mais contrôlé par des pirates, pour un site Web. Dans ce scénario, les pirates pourraient déchiffrer tout trafic HTTPS intercepté vers le site Web concerné.
Astuce : Les en-têtes de réponse Web sont des éléments de métadonnées que le serveur inclut lorsqu'il répond aux demandes. Un petit sous-ensemble de ceux-ci est appelé en-têtes de sécurité, car ils activent et configurent diverses fonctionnalités de sécurité.
Infrastructure de certificats HTTPS
L'infrastructure de certificats sur laquelle HTTPS est construit est basée sur un réseau de confiance. Un certain nombre d'entreprises agissent en tant qu'autorités de certification (CA) qui publient un ou plusieurs certificats racine. Un ensemble de certificats racine est inclus dans tous les appareils d'un magasin de confiance. Lorsqu'un site Web demande son propre certificat HTTPS à une autorité de certification, le certificat est signé par un certificat racine. Lorsque votre ordinateur voit un certificat HTTPS, il vérifie la signature. Si le certificat est signé par un certificat racine auquel il fait confiance, votre ordinateur fait également confiance au certificat HTTPS.
Astuce : Une autorité de certification peut également avoir des certificats intermédiaires signés par le certificat racine. Ces certificats intermédiaires peuvent également être utilisés pour signer des certificats HTTPS pour les sites Web.
Le travail d'une autorité de certification consiste à émettre un certificat uniquement lorsqu'elle a vérifié que la personne qui en fait la demande est le véritable propriétaire du site Web. L'idée avec cette structure est que si un pirate crée son propre certificat pour un site Web, il ne sera pas signé par une autorité de certification de confiance de votre ordinateur, et vous verrez donc un avertissement.
Qu'a fait HPKP ?
L'ensemble du système de certification repose sur la fiabilité des autorités de certification. À l'origine, cependant, il n'y avait aucune protection contre une autorité de certification compromise par des pirates informatiques ou devenant un voyou et choisissant d'émettre des certificats de manière incorrecte.
HPKP a été conçu pour être une protection contre cette possibilité. Il permet aux sites Web de spécifier une liste exclusive de certificats de confiance pour le site Web dans un processus appelé épinglage. Il était possible d'épingler le certificat racine ou intermédiaire, permettant essentiellement à une seule autorité de certification d'émettre des certificats pour le site Web. Il était également possible d'épingler le certificat du site Web lui-même, empêchant même la bonne autorité de certification d'émettre un autre certificat valide.
Techniquement, ce n'est pas le certificat lui-même qui est épinglé, mais un hachage de la clé du certificat. Un hachage est une fonction cryptographique à sens unique. Cela signifie qu'il est possible de vérifier que le certificat présenté au navigateur par le site Web correspond à un certificat épinglé, mais il n'est pas possible d'utiliser le hachage pour créer un certificat valide.
HPKP nécessitait l'épinglage d'au moins deux clés, dont au moins une doit être une sauvegarde et non dans la chaîne de certificats actuelle. Cette sauvegarde vous permet de configurer un transfert en douceur vers un nouveau certificat qui n'empêche pas les utilisateurs de pouvoir se connecter.
Si le certificat HTTPS présenté au navigateur par le site Web ne correspond pas à l'un des certificats épinglés, le navigateur doit le rejeter et empêcher l'utilisateur de contourner le message d'erreur du certificat.
Structure de HPKP
L'en-tête HPKP comporte trois parties obligatoires et deux facultatives. L'en-tête doit être intitulé "Public-Key-Pins", au moins deux certificats suivants doivent avoir un hachage SHA256 codé en base64 épinglé au format "pin-sha256=""". La dernière partie obligatoire est le "max-age", qui est le nombre de secondes pendant lequel le navigateur doit appliquer les restrictions.
Astuce : SHA256 est l'algorithme de hachage utilisé par HPKP. Base64 est un jeu de caractères avec 64 caractères : 0-9, az, AZ et les caractères spéciaux « + » et « / ». Le "=" est utilisé pour compléter jusqu'aux deux derniers caractères si nécessaire.
Les paramètres facultatifs sont « includeSubDomains » et « report-uri ». « includeSubDomains indique au navigateur d'appliquer les protections HPKP à tout sous-domaine du site Web actuel pendant la durée de la minuterie « max-age ». « report-uri » est une fonctionnalité qui permet de spécifier un site Web où les rapports d'erreur peuvent être envoyés, et est conçue pour aider à identifier et à résoudre les problèmes.
Il existe une deuxième variante de l'en-tête intitulée « Public-Key-Pins-Report-Only ». Tout est pareil, cependant, si une erreur est trouvée, aucune action n'est entreprise au-delà du renvoi d'un message d'erreur au navigateur et au « report-uri » si celui-ci est configuré. La variante de rapport uniquement a été conçue pour permettre un test à grande échelle de l'en-tête avant le déploiement, où les erreurs ne causeraient pas de problèmes aux utilisateurs.
Problèmes avec HPKP
HPKP a été déprécié pour deux raisons principales. L'en-tête pouvait causer de graves problèmes au site Web qui l'utilisait de deux manières, celles-ci étaient nommées HPKP Suicide et Ransom PKP.
HPKP Suicide est un problème où les propriétaires légitimes du site Web perdent l'accès à toutes les clés épinglées. Cela peut se produire par suppression accidentelle, piratage, virus, corruption de données ou pour de nombreuses autres raisons. En raison de la complexité de la mise en œuvre correcte de HPKP, et surtout de sa mise à jour lors des rotations de certificats, il est relativement facile de commettre une erreur de configuration. Cependant, avec HPKP, si vous vous trompez, tous les visiteurs récents de votre site Web ne pourront pas accéder à votre site Web pendant la durée de la minuterie « âge maximum ». Le site Web smashingmagazine.com a publié un article détaillant son expérience avec exactement ce problème, qui a essentiellement mis le site hors ligne pour la plupart des visiteurs pendant quatre jours avant qu'un correctif ne soit déployé.
Ransom PKP est une attaque théorique dans laquelle un pirate informatique accède à un serveur Web, puis vole tous les certificats et clés de confiance, puis demande une rançon pour leur retour. Dans une configuration normale, vous pouvez simplement générer de nouvelles clés et de nouveaux certificats et faire en sorte que le site Web soit de nouveau opérationnel en moins d'une heure. Avec HPKP activé, cependant, ces clés sont épinglées, si vous ne pouvez pas servir un certificat épinglé aux utilisateurs, ils ne pourront pas accéder au site Web pendant la durée de la minuterie « âge maximum ». Selon la configuration et si des sauvegardes existent, il peut être impossible de résoudre ce problème.
Avec ces deux problèmes, les nouveaux utilisateurs pourraient accéder au site Web normalement, car ils n'auraient jamais vu l'ancien en-tête HPKP demander à leur navigateur de ne faire confiance qu'aux certificats désormais manquants. Cependant, tous les visiteurs récents, tels que les clients réguliers et les lecteurs, devraient attendre toute la durée de la minuterie « âge maximum ».
Compte tenu de la gravité de ces problèmes et de la complexité de la configuration et de la maintenance, l'utilisation de l'en-tête HPKP était très faible. Finalement, les principaux navigateurs ont accepté d'abandonner complètement sa prise en charge et en quelques années, l'en-tête HPKP a été universellement obsolète.