Featured Video Play Icon

Mise en place de certificat wildcard avec Letsencrypt et OVH

Donc, au final, après avoir fait une introduction qui s’est éternisée et est devenue un article à part entière …

Je documente ici comment j’ai mis en place mes certificats wildcard grâce à Letsencrypt et la vérification DNS

Alors comme je l’expliquai en partie dans l’autre article, j’avais déjà mis en place Letsencrypt avec des certificats pour chaque sous-domaine avec l’outil certbot et là je souhaitais mettre en place une vérification DNS pour obtenir un certificat wildcard

Mon domaine étant enregistré chez OVH et utilisant leur DNS, je devais utiliser le plugin officiel  OVH pour l’outil certbot.
Pour la mise en place, je me suis servi principalement de la doc https://certbot-dns-ovh.readthedocs.io/en/stable/

Donc déjà avant toutes actions , un petit backup pour ne rien casser.  Pour moi ça passe par un snapshot de ma VM et un backup du dossier /etc/letsencrypt

tar -cvzf   ~/letsencrypt.tar.gz  /etc/letsencrypt
Disclaimer: sur ma  machine je suis root, c'est mal, je sais!! n'oubliez pas le petit sudo devant  les commandes si nécessaire.

Sur ma distribution Ubuntu 18.04.3 LTS , la version de certbot est un peu en retrait 0.31. à l’heure où j’écris ces lignes.
j’ai donc installé une version plus récente avec le gestionnaire de paquet python (pip) et non celui des repo officiels Ubuntu. Je désinstalle le paquet certbot de ma distrib et purge tous les fichiers.

apt purge certbot

Petite mise à jour de tout le système (attention moi je le fais, car je n’ai pas beaucoup d’enjeux de production, que j’ai fait un snapshot juste avant et que donc je peux vite revenir à un état fonctionnel. Mais il y a un principe qui est vraiment bien à respecter : “If it works, don’t fix it” si ça fonctionne, pas besoin de le réparer (ou de le mettre à jour sans raison dans un environnent de prod))

apt update && apt upgrade 

Ensuite s’il n’est pas déjà installé, installer pip et ses dépendances

apt install python3-pip

Une fois que le gestionnaire de paquet python est installé, on peut donc installer certbot et le plugin OVH

pip install  certbot 
pip install certbot-dns-ovh

Ensuite pour éviter d’avoir qu’un seul et unique fichier de logs immense et  grandissant sans cesse, on définit une stratégie de rotation des logs pour certbot, on créer donc le fichier de config logrotate pour certbot

touch /etc/logrotate.d/certbot

Et on y copie la config suivante

 /var/log/letsencrypt/*.log {
     monthly
     rotate 6
     compress
     delaycompress
     notifempty
     missingok
     create 640 root adm 
} 

Bon maintenant la mise en place du challenge DNS va se passer grosso modo de la même manière que pour les sous-domaines expliqués ici.

Pour vérifier que le domaine nous appartient bien, Letsencrypt va nous demander de placer un enregistrement DNS, si ensuite lorsqu’il vérifie, l’enregistrement est bien là, c’est que le domaine nous appartient bien.

Seuleument, nous n’allons pas placer l’enregistrement à la main, nous allons nous servir de l’api OVH pour que la commande certbot et le plugin le fassent tout seuls comme des grands

Pour ça on se rend sur l’interface OVH pour se créer des accès à l’API https://api.ovh.com/createToken/

l’idée est de donner accès à certbot de manière illimité dans le temps aux méthodes permettant de gérer les enregistrements DNS de tous mes domaines

GET /domain/zone/*
PUT  /domain/zone/* 
POST  /domain/zone/* 
DELETE  /domain/zone/* 
screenshot de la page de création d'accès pour l'api OVH

Si tu as besoin de restreindre les droits à certains domaines, tu dois définir les accès aux méthodes domaine par domaine

 GET /domain/zone/
 GET /domain/zone/{zoneName}/status
 GET /domain/zone/{zoneName}/record
 GET /domain/zone/{zoneName}/record/*
 POST /domain/zone/{zoneName}/record
 POST /domain/zone/{zoneName}/refresh
 DELETE /domain/zone/{zoneName}/record/* 

Où {zoneName} est ton nom de domaine

Une fois les informations d’accès à l’api obtenues, il faut créer un fichier qui les contient.

nano /root/.ovhapi

Et met y les informations

dns_ovh_endpoint = ovh-eu
dns_ovh_application_key  = xxx 
dns_ovh_application_secret  = xxx  
dns_ovh_consumer_key  = xxx 

 

Seul le proprio de ce fichier devrait y avoir accès donc n’oublie pas

chmod 600 /root/.ovhapi

Voilà maintenant tout est en place pour que certbot puisse accéder à l’API OVH. La petite commande qui va bien pour obtenir un certificat

certbot certonly --dns-ovh --dns-ovh-credentials ~/.ovhapi -d anthony-jacob.com -d *.anthony-jacob.com --dns-ovh-propagation-seconds 240 --non-interactive --agree-tos

Voilà si tout s’est bien passé, tu as un certificat valide pour les 90 prochains jour. N’oublie pas de mettre ne place un renouvellement automatique et de recharger ton serveur web. De mon côté je tente un renouvellement tous les mois

crontab -e

et ajoutes-y une ligne

0 0 1 * *  certbot renew && service apache2 reload

Si tu l’as suivi et si ça t’a aidé, dis-le-moi dans les commentaires et n’hésite pas aussi à faire un retour s’il y a une correction à apporter

Partagez l'article:
FacebookTwitterEmailLinkedIn

3 réflexions au sujet de « Mise en place de certificat wildcard avec Letsencrypt et OVH »

  1. Tuto toujours intéressant, merci beaucoup
    Par contre il faut s’assurer de mettre *.domain.tld entre guillemets sinon on a une erreur “no matches found *.domain.tld” et à la fin de la commande rajouter –email pour valider les conditions d’utilisations.

    1. Merci pour ce retour. Arf, il me semble que je n’ai pas eu besoin des ” “, peut-être un comportement différent suite à une mise à jour.
      pour l’email je pense que je n’ai pas eu le cas parce que je l’avais déjà utilisé auparavant

  2. Bonjour,
    Tuto intéressant. Toutefois, en suivant la procédure, au lancement de la commande certbot, j’obtient le message d’erreur suivant:
    Error determining zone identifier for selfhosted.fr: 403 Client Error: Forbidden for url: https://eu.api.ovh.com/1.0/domain/zone/. (Are your Application Key and Consumer Key values correct?)
    Je suppose une erreur dans l’utilisation de l’API d’OVH, mais je ne trouve rien.
    Mon nom de domaine est selfhosted.fr et je renseigne les champs de l’API avec selfhosted.fr/*. J’ai essayé sans le /*. J’ai toujours le même message.
    Une idée de solution?
    Merci par avance

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.