Générer un certificat temporaire avec Let's Encrypt

Sommaire

Bonjour à tous ! Aujourd'hui un article rapide pour parler d'un problème que l'on a tous connu : le renouvellement d'un certificat en production.

Il y a le monde de l'automatisation avec ACME, des belles infras, de Linkedin avec 0 problème mais il y a surtout la réalité : des serveurs IIS, des serveurs qui n'accèdent pas à Internet, des applicatifs lourds développés par des éditeurs (avec les pieds)... Toutes ces contraintes font que des fois, la magie ne fonctionne pas comme on le voudrait.

Introduction

Comme vu au dessus, on a tous rencontré des problèmes au moins une fois avec un certificat non renouvelé et se posent toujours les mêmes questions : comment on renouvelle, qui doit le faire, qui doit l'installer, ou le générer, c'est quoi l'autorité/fournisseur... On va voir rapidement comment on peut déjà se sortir une épine du pied en générant manuellement un certificat avec Let's encrypt, cela laissera le temps de gérer les autres problèmes dans un second temps.

Pré-requis

  • Une machine avec python3-certbot installé ainsi qu’un accès à Internet ;
  • La possibilité de modifier le fichier de zone DNS du domaine voulu.

Les commandes pour générer le certificat

Une fois qu'on a tout ça, on peut simplement lancer la commande suivante :

1sudo certbot certonly \
2  --manual \
3  --preferred-challenges dns \
4  -d example.com \
5  -d "*.example.com"

Pour les options :

  • certonly : permet de générer le certificat tout seul sans toucher aux configurations Apache ou autre ;
  • --manual : pour faire l'action manuellement ;
  • --preferred-challenges dns : pour forcer l'utilisation du challenge via le DNS ;
  • -d : pour rajouter les domaines, on voit que l'on peut même mettre des wildcard avec un *.

La commande lancée, une seule action sera nécessaire : faire les enregistrements DNS, une par domaine ajouté.

1Please deploy a DNS TXT record under the name
2_acme-challenge.example.com with the following value:
3
4abcdefghijklmnopqrstuvwxyz0123456789_EXAMPLE

Avec une conf Bind, cela donne ça :

1_acme-challenge.example.com. IN TXT "abcdefghijklmnopqrstuvwxyz0123456789_EXAMPLE"

Pour vérifier que votre enregistrement est bon au niveau de la propagation DNS, vous pouvez utiliser simplement la commande nslookup ou dig en utilisant plusieurs serveurs DNS. Ou si vous ne voulez pas vous embêter, un outil du type DNS Checker :

Si tout est bon, il suffit d'appuyer sur Entrée pour passer au suivant et pour avoir finalement votre magnifique certificat :

1Successfully received certificate.
2Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
3Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
4This certificate expires on 2026-11-01.

Conclusion

Et voilà, vous avez maintenant les commandes pour vous sortir de ce problème rapidement. Cela ne règlera par contre pas la root-cause... Mais on pourra en reparler dans un autre article, surtout avec la durée des certificats qui va passer à 47j d'ici 2029... Il est donc l'heure d'anticiper le problème et de commencer à regarder pour mettre à jour les processus!

J’espère que cet article vous aura plu, si vous avez des questions ou des remarques sur ce que j’ai pu écrire n’hésitez pas à réagir avec moi en commentaire ou par mail.

Merci pour votre lecture et à bientôt !

Mickael Rigonnaux @tzkuat