Let's Encrypt avec défi DNS

Introduction
J’ai actuellement chez moi (derrière ma Box), deux équipements utilisant des certificats
fournis par Let’s Encrypt (LE). Pour la génération de ces certificats,
j’utilise le défi “HTTP-01” de LE. Le renouvellement implique donc que le port HTTP (80)
soit redirigé vers ces équipements.
Or, je ne peux le faire que vers une seule machine à la fois !
De ce fait, seul un équipement est automatiquement renouvelé.
Pour l’autre, je change temporairement les règles de NAT sur ma Box avant de renouveler
le certificat.
Historiquement, je n’avais pas de domaine mais j’utilisais le
DDNS de No-IP.
Maintenant que j’en ai un et que j’ai un certificat qui expire dans deux semaines
(sur mon serveur non exposé sur le port 80), je me suis dis que c’est la bonne occasion
de mettre en place le défi DNS (DNS-01) sur ce serveur.
Pour une explication des différents défis, je vous renvoie sur la
documentation Let’s Encrypt
à ce sujet (en français 🐔).
Mon service DNS est géré par OVH qui est un des sponsors de Let’s Encrypt. De ce fait, OVH fait partis de la liste des fournisseurs avec lequel la validation par DNS est facile.
Du coup, ce tutoriel (que j’écris en live) montre comment j’ai fait fonctionner cela.
Nous allons donc dans un premier temps générer les accès à l’API d’OVH qui va permettre
à notre serveur de générer l’enregistrement TXT nécessaire pour le challenge DNS.
Ainsi, nous ferons l’installation et la configuration de cela sur mon serveur.
API OVH
Pour cela, OVH à mis une documentation en ligne.
On va donc sur la page de création de clés européennes :
ovh-eu
Pour les informations à renseigner, la documentation fournit les informations
pour donner les droits sur la zone.
J’ai donc mis en place les droits suivants :
|
|

On obtient donc un résultat du type :
Avec ces clés, on ne peut donc qu’effectué des actions pour le domaine pkm.jp
.
Donner les droits pour toute la zone, je trouve que c’est un peu trop,
j’ai alors essayé de le faire pour un seul et unique domaine mais sans succès.
Les règles d’accès que j’avais essayé pour le domaine kanto.pkm.jp
étaient les suivantes :
|
|
Ce qui m’as donné comme erreur dans la suite :
Error determining zone identifier for scrample.xyz: 403 Client Error: Forbidden for url: https://eu.api.ovh.com/1.0/domain/zone/scrample.xyz/status. (Are your Application Key and Consumer Key values correct?)
Partie Serveur
|
|
Il faut donc créer un fichier de la forme suivante :
|
|
J’ai décidé de sauvegarder cela dans un fichier pkm.jp.ini
dans /etc/ovh-api
.
Il faut ensuite donné les droits 0600 à ce fichier :
chmod 600 /etc/ovh-api/pkm.jp.ini
On génère donc le certificat en précisant le domaine et le fichier de configuration :
|
|
Forcément, c’était trop simple pour que sa fonctionne :
certbot: error: unrecognized arguments: –dns-ovh-credentials
J’ai alors enlevé cette option :
|
|
Ce qui me donne l’interaction suivante :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-ovh, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for kanto.pkm.jp
Input the path to your OVH credentials INI file (Enter ‘c’ to cancel):
J’inscris donc le chemin du fichier /etc/ovh-api/pkm.jp.ini
et je valide.
Waiting 30 seconds for DNS changes to propagate
Waiting for verification…
Cleaning up challengesIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
[…]
Finalement, cela à fonctionner 📣 !
Normalement, la configuration que l’on a faite en interaction est sauvegardée dans
le fichier /etc/letsencrypt/renewal/pkm.jp.conf
ce qui veut dire que le renouvellement
et déjà programmé (on verra dans environ deux mois).
On peut testé le renouvellement pour être sur qu’il est bien non-interactive avec
l’option de test --dry-run
:
|
|
Conclusion
J’ai tant bien que mal trouvé la solution pour avoir des certificats pour des équipements
qui ne dont pas exposée sur le port 80.
Il faudrait maintenant que je fasse évoluer cette commande pour quelle redémarre
les services associés.
Mon problème est que j’ai plusieurs services qui utilise ce certificat de manière
indépendante : Apache2, Grafana, HomeAssistant.
Il faut donc que je les redémarre tous…
Bon, vu que je souhaite tout passé sur Traefik, pour l’instant je vais le faire à la main.