Création d’un certificat wildward avec Let’s Encrypt

Let’s Encrypt nous permet de générer facilement des certificats et notamment des certificats wildcard.
Nous allons voir comment créer ce certificat dans le contexte d’un domaine hébergé chez OVH.
Pour le moment seuls les « challenges » via DNS permettent l’obtention d’un wilcard.

Contexte technique

Nous utiliserons ici un serveur Ubuntu 18.04 fraîchement installé.
Nous admettrons que le domaine utilisé sera remiflandrois.fr

1 – Installation de Certbot et du plugin OVH

Pour pouvoir générer notre certificat, nous utiliserons certbot que nous installerons via pip:

sudo apt-get install python3-pip
sudo pip install certbot

Nous installerons également les modules de chiffrement nécessaires:

sudo pip install cryptography --upgrade

Afin de faciliter l’obtention du wilcard, OVH a mis à disposition un plugin certbot dédié. Nous l’installerons avec la commande:

sudo pip install certbot-dns-ovh

2 – Création des accès API OVH

Afin que certbot puisse vérifier l’existence de notre nom de domaine, nous allons créer des clés de connexion a l’API d’OVH.
Nous allons pour ça nous rendre sur le portail OVH dédié a cette création: https://eu.api.ovh.com/createToken/ 

Nous renseignerons les champs demandés, à savoir:

  • notre login OVH
  • Script name = le nom que nous donnerons a l’accès
  • Rights = Les droits d’accès (détaillés ci dessous)
  • Restricted IPs = une restriction IP

Concernant les droits nous les renseignerons comme ceci:

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

Il est à souligner que dans le cas d’un wildcard sur un sous-domaine de type *.intranet.remiflandrois.fr, c’est la zone remiflandrois.fr que nous configurerons. L’API OVH s’adressera toujours au niveau le plus haut du domaine.

Une fois le formulaire complété, nous cliquerons sur sur le bouton « Create Keys ». Le portail nous donnera alors les clés API nécessaires à la génération du certificat.

3 – Génération du certificat

Afin de générer le certificat il nous faudra créer le fichier d’authentification OVH. Pour cela nous créerons dans /root un fichier .ovhapi

# Nous passerons sous l'utilisateur root
sudo su
# Nous nous déplacerons dans le dossier /root
cd 
# Nous éditerons un fichier .ovhapi
vi .ovhapi

Puis nous rajouterons le contenu suivant:

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

Enfin nous donnerons des droits restreints au fichier:

chmod 600 /root/.ovhapi

Nous pourrons alors lancer la commande pour certifier en wildcard:

sudo certbot certonly –dns-ovh –dns-ovh-credentials /root/.ovhapi -d domaine.fr -d *.domaine.fr

sudo certbot certonly --dns-ovh --dns-ovh-credentials /root/.ovhapi -d domaine.fr -d *.domaine.fr

Nous pourrons remarquer l’utilisation de l’argument « –dns-ovh –dns-ovh-credentials /root/.ovhapi » qui servira a l’authentification OVH pour certbot.

4 – Renouvellement automatique

Afin de renouveler automatiquement le certificat nous pourrons créer un script déclenché par un cron.

#Passage en root
sudo su

# Création du script
vi /root/renewCerts.sh

# Contenu du script
/usr/local/bin/certbot certonly --dns-ovh --dns-ovh-credentials /root/.ovhapi --non-interactive --agree-tos --email mon@email.fr -d domaine.fr -d 
*.domaine.fr

Nous le rendrons executable:

sudo chmod +x /root/renewCerts.sh

Puis nous l’intègrerons dans cron:

# Passage en root
sudo su

# Ouverture de l'éditeur cron
crontab -e

# Paramètres du cron à renseigner
22 4 5 * * /usr/local/sbin/renewCerts.sh > /dev/null 2>&1

Vous pouvez dès à présent utiliser vos certificats wildcard pour vos environnements de test et de production. Si vous avez besoin d’effectuer des changements, OVH met à disposition un portail vous permettant de réaliser des requêtes API à l’adresse https://api.ovh.com/console/.

%d blogueurs aiment cette page :