======HPKP======
====Comprendre HPKP====
HPKP est une en-tête HTTPS permettant d'indiqué au client pendant une durée déterminé quel seront les certificats HTTPS qui pourront lui être présenté.
Les problèmes pouvant être rencontrées sont les suivants :\\
* C'est une méthode [[https://en.wikipedia.org/wiki/Trust_on_first_use| TOFU]], donc si la personne n'est jamais venu sur site ou après l’expiration de la durée indiqué dans l'en-tête depuis sa dernière visite , on ne pourra assuré quel n'est pas de MITM sur la communication.
* Très casse gueule, si la moindre erreur la personne ne pourra pas accéder au site jusqu’à l'expiration de son en-tête.
* Un changement de certificat se doit d'être réalisé en 3 étapes qui prennent la durée minimum indiqué dans l'en-tête.
Voici les recommandations officiels :
* Toujours avoir une paire de clé/certificat de secours dans l'en-tête en cas de compromissions du serveur.
* La durée de rétention est de 60 jours
====Compatibilité avec Let's Encrypt====
**HPKP** est tout comme [[kb:crypto:DANE_TLSA]], nativement pas compatible avec **certbot**. Mais avec un peu de rigueur, et les bons arguments, on peut faire en sorte de garder ses clés publiques et donc permettre de garder ses empreintes **HPKP**. N'oubliez pas de faire un deuxième certificat non signé pour la backup.
====Générer une entrée HPKP====
Pour obtenir le **HASH** du certificat, il faut taper la commande :
# openssl req -pubkey < /etc/letsencrypt/wiki.virtit.fr/live/cert.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64
et il suffira d'ajouter une entêtes suivante dans votre serveur WEB, par exemple pour apache :
Header always set Public-Key-Pins "max-age=5184000; pin-sha256=\"JOLIE_PETIT_HASH_ACTIF\"; pin-sha256=\"JOLIE_PETIT_HASH_BACKUP\"; "