RĂ©vocation des certificats
Lorsque la clef privĂ©e correspondante dâun certificat nâest plus sĂ»re, vous devez rĂ©voquer le certificat. Cela peut se produire pour diffĂ©rentes raisons. Par exemple, vous pouvez avoir accidentellement partagĂ© la clef privĂ©e sur un site Web public; les pirates pourraient avoir copiĂ© la clef privĂ©e de vos serveurs; ou les pirates pourraient prendre le contrĂŽle temporaire de vos serveurs ou de votre configuration DNS, et utiliser la clef pour valider et Ă©mettre un certificat dont ils dĂ©tiennent la clef privĂ©e.
Lorsque vous rĂ©voquez un certificat Letâs Encrypt, Letâs Encrypt publiera les informations de cette rĂ©vocation via le Protocole de statut de certificat en ligne (OCSP), et certains navigateurs vĂ©rifieront lâOCSP pour voir sâils doivent faire confiance Ă un certificat. Notez que lâOCSP a quelques problĂšmes fondamentaux, tous les navigateurs nâeffectueront donc pas cette vĂ©rification. Pourtant, la rĂ©vocation des certificats qui correspondent Ă des clefs privĂ©es compromises est une pratique importante et est exigĂ©e par Letâs Encryptâs Contrat du souscripteur (en anglais).
Source : https://letsencrypt.org/fr/docs/revoking/
Pour rĂ©voquer un certificat avec Letâs Encrypt, vous utiliserez l’API ACME, trĂšs probablement via un client ACME comme Certbot. Vous devrez prouver Ă Letâs Encrypt que vous ĂȘtes autorisĂ© Ă rĂ©voquer le certificat. Il existe trois façons de procĂ©der:
Depuis le compte qui a Ă©mis le certificat
Si vous avez initialement dĂ©livrĂ© le certificat et que vous avez toujours le contrĂŽle du compte que vous avez utilisĂ© pour le crĂ©er, vous pouvez le rĂ©voquer Ă lâaide de votre identifiant de compte. Certbot tentera cela par dĂ©faut. Exemple:
certbot revoke --cert-path /etc/letsencrypt/archive/${YOUR_DOMAIN}/cert1.pem
Utilisation de la clef privée du certificat
Si vous nâavez pas dĂ©livrĂ© le certificat Ă lâorigine, mais que vous avez une copie de la clef privĂ©e correspondante, vous pouvez rĂ©voquer le certificat en utilisant cette clef privĂ©e pour signer la demande de rĂ©vocation. Par exemple, si vous voyez quâune clef privĂ©e a Ă©tĂ© accidentellement rendue publique, vous pouvez utiliser cette mĂ©thode pour rĂ©voquer des certificats mĂȘme si vous nâĂȘtes pas la personne Ă qui ce certificat a Ă©tĂ© dĂ©livrĂ©.
Pour utiliser cette mĂ©thode, vous devez dâabord tĂ©lĂ©charger le certificat Ă rĂ©voquer. Letâs Encrypt enregistre tous les certificats dans le Certificate Transparency, afin que vous puissiez trouver et tĂ©lĂ©charger des certificats Ă partir dâun moniteur de journal comme crt.sh.
Vous aurez Ă©galement besoin dâune copie de la clef privĂ©e au format PEM. Une fois que vous les avez, vous pouvez rĂ©voquer le certificat comme suit:
certbot revoke --cert-path /PATH/TO/cert.pem --key-path /PATH/TO/key.pem
Utiliser un autre compte autorisé
Si quelquâun a Ă©mis un certificat aprĂšs avoir compromis votre hĂŽte ou votre DNS, vous souhaitez rĂ©voquer ce certificat aprĂšs avoir repris le contrĂŽle. Afin de rĂ©voquer le certificat, Letâs Encrypt devra sâassurer que vous contrĂŽlez les noms de domaine de ce certificat (sinon des personnes pourraient rĂ©voquer les certificats des autres sans autorisation)! Pour valider ce contrĂŽle, Letâs Encrypt utilise le mĂȘme mĂ©thode quâil utilise pour valider le contrĂŽle de lâĂ©mission: vous pouvez mettre une valeur dans un enregistrement de type TXT du DNS ou placer un fichier sur un serveur HTTP. GĂ©nĂ©ralement, un client ACME sâen chargera pour vous. Notez que la plupart des clients ACME combinent validation et dĂ©livrance, donc la seule façon de demander des validations est de tenter lâĂ©mission. Vous pouvez ensuite rĂ©voquer le certificat rĂ©sultant si vous nâen voulez pas, ou simplement dĂ©truire la clef privĂ©e. Si vous voulez absolument Ă©viter dâĂ©mettre un certificat, vous pouvez inclure un nom de domaine inexistant dans votre ligne de commande, ce qui entraĂźnera lâĂ©chec de lâĂ©mission tandis que les noms de domaines existants seront validĂ©s. Pour ce faire, exĂ©cutez:
certbot certonly --manual --preferred-challenges=dns -d ${YOUR_DOMAIN} -d nonexistent.${YOUR_DOMAIN}
Puis suivez les instructions. Si vous prĂ©fĂ©rez la validation utilisant le port HTTP plutĂŽt que le DNS, remplacez lâoption --preferred-challenges
par --preferred-challenges=http
.
Une fois que vous avez validĂ© le contrĂŽle de tous les noms de domaine dans le certificat que vous souhaitez rĂ©voquer, vous pouvez tĂ©lĂ©charger le certificat depuis [crt.sh] (https://crt.sh/), puis rĂ©voquez le certificat comme si vous lâaviez dĂ©livrĂ©:
certbot revoke --cert-path /PATH/TO/downloaded-cert.pem
Supprimer le certificat Let’s encrypt
Certbot, le client de Let’s Encrypt, stocke ses fichiers dans /etc/letsencrypt
 et notamment les certificats.
Mais pour chaque certificat, il existe une sĂ©rie d’autres fichiers qui lui sont attachĂ©s, et qui permettent Ă Certbot d’assurer un fonctionnement normal.
Pour effectuer une suppression complĂšte d’un certificat, il est conseillĂ© de ne pas effacer le fichier Ă la main, mais d’utiliser la sous-commande delete
de Certbot.
Attention: le processus de suppression est irréversible. Soyez sûr de ce que vous faßtes avant de le faire.
Identifier le certificat Ă supprimer
Je liste les certificats Let’s Encrypt prĂ©sents sur le serveur :
sudo certbot certificates
Ce qui affiche par exemple :
Found the following certs:
Certificate Name: www.mondomaine.com
Domains: www.mondomaine.com xmpp.mondomaine.com ftp.mondomaine.com
Expiry Date: 2017-11-25 20:50:28+00:00 (VALID: 4 days)
Certificate Path: /etc/letsencrypt/live/www.mondomaine.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/www.mondomaine.com/privkey.pem
Certificate Name: abc
Domains: abc.mondomaine.com mondomaine.com
Expiry Date: 2017-11-25 20:23:24+00:00 (VALID: 4 days)
Certificate Path: /etc/letsencrypt/live/abc/fullchain.pem
Private Key Path: /etc/letsencrypt/live/abc/privkey.pem
GrĂące aux lignes dĂ©butant par Certificate Name, je peux identifier le nom du certificat que je souhaite supprimer et vĂ©rifier qu’il couvre bien les domaines cibles.
Je souhaite supprimer le premier certificat, dont le nom est www.mondomaine.com.
Supprimer le certificat
Pour cela, il suffit de lancer la commande suivante :
sudo certbot delete --cert-name www.mondomaine.com
Ce qui donne en sortie :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Deleted all files relating to certificate www.mondomaine.com.
-------------------------------------------------------------------------------
Je peux alors lister Ă nouveau les certificats et constater qu’il a bien Ă©tĂ© supprimĂ©.
Attention: un certificat supprimĂ© n’est pas rĂ©voquĂ© pour autant. S’il me semble qu’un certificat est compromis (clef privĂ©e volĂ©e, serveur piratĂ©, etc), je dois le rĂ©voquer avant de le supprimer.