SLBCloud
Avancé7 min de lecture

Un certificat pour tous ses sous-domaines

Obtenir un certificat *.mon-domaine.fr avec la validation par DNS, et l'automatiser pour qu'il se renouvelle sans intervention.

Dès qu'on crée des sous-domaines régulièrement — un par client, un par environnement — demander un certificat à chaque fois devient absurde. Un certificat joker couvre tout ce qui finit par votre domaine.

La validation HTTP ne suffit pas

Let's Encrypt n'émet un joker qu'après une validation par DNS : il faut prouver que vous contrôlez la zone, pas seulement un serveur web. Concrètement, certbot doit pouvoir créer un enregistrement TXT chez votre hébergeur DNS — donc une clé d'API.

Avec l'API de votre hébergeur DNS

Exemple avec OVH

bash
sudo apt install python3-certbot-dns-ovh

sudo tee /root/ovh.ini >/dev/null <<'EOF'
dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = ...
dns_ovh_application_secret = ...
dns_ovh_consumer_key = ...
EOF
sudo chmod 600 /root/ovh.ini

sudo certbot certonly \
  --dns-ovh --dns-ovh-credentials /root/ovh.ini \
  -d mon-domaine.fr -d '*.mon-domaine.fr'

Des greffons équivalents existent pour Cloudflare, Gandi, Scaleway et la plupart des autres. Le principe est identique : un fichier d'identifiants en 600, et certbot fait le reste.

L'utiliser dans nginx

nginx
server {
    listen 443 ssl;
    http2 on;
    server_name ~^(?<client>.+)\.mon-domaine\.fr$;

    ssl_certificate     /etc/letsencrypt/live/mon-domaine.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mon-domaine.fr/privkey.pem;

    root /var/www/clients/$client/public;
}

Le server_name en expression régulière capture le sous-domaine dans une variable : un seul vhost sert alors autant de clients que vous voulez, sans rien ajouter à chaque nouveau.

Vérifier le renouvellement

bash
sudo certbot renew --dry-run
sudo certbot certificates

Ce que le joker ne couvre pas

*.mon-domaine.fr couvre un seul niveau : a.mon-domaine.fr oui, a.b.mon-domaine.fr non. Et il ne couvre pas le domaine nu — d'où la présence des deux dans la commande ci-dessus.

Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.

Ouvrir un ticket