Retourner sur le site

Certbot en mode DNS (wildcard)

Obtenez un certificat Let's Encrypt wildcard (*.domaine) via le challenge DNS-01 et Certbot sur un VPS HolyCloud.

Certbot en mode DNS (wildcard)

Le challenge HTTP-01 ne permet pas les certificats wildcard (*.example.com). Sur un VPS Linux HolyCloud, utilisez DNS-01 : Certbot demande un enregistrement TXT _acme-challenge que vous créez chez votre registrar ou via l'API de votre DNS (Cloudflare, OVH, etc.).

Prérequis

  • VPS HolyCloud avec Certbot installé
  • Contrôle du DNS du domaine (API token ou accès manuel au panel DNS)
  • Plugin DNS correspondant (ex. python3-certbot-dns-cloudflare)
  • Pas obligatoire d'exposer le port 80 pour la validation (utile derrière CDN ou plusieurs serveurs)

Étape 1 : installation Certbot et plugin DNS

Exemple Cloudflare :

sudo apt update
sudo apt install -y certbot python3-certbot-dns-cloudflare

Autres plugins courants :

# OVH (si disponible en paquet ou pip)
sudo apt install -y python3-certbot-dns-ovh

Vérifiez les plugins :

certbot plugins

Étape 2 : credentials API (Cloudflare)

Créez un token API Cloudflare avec permission Zone:DNS:Edit sur la zone concernée.

Fichier sécurisé :

sudo mkdir -p /root/.secrets
sudo nano /root/.secrets/cloudflare.ini

Contenu :

dns_cloudflare_api_token = VOTRE_TOKEN_API
sudo chmod 600 /root/.secrets/cloudflare.ini

Étape 3 : demande du certificat wildcard

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
  -d example.com \
  -d '*.example.com' \
  --agree-tos \
  -m [email protected]

Sans plugin (validation manuelle) :

sudo certbot certonly --manual --preferred-challenges dns \
  -d example.com -d '*.example.com'

Certbot affiche un enregistrement TXT à créer :

_acme-challenge.example.com.  TXT  "valeur_fournie"

Attendez la propagation DNS (dig TXT _acme-challenge.example.com) puis validez.

Étape 4 : utiliser le certificat avec Nginx

Fichiers générés :

/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

Exemple de bloc serveur :

server {
    listen 443 ssl http2;
    server_name example.com *.example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    root /var/www/html;
    index index.html;
}

Test et rechargement :

sudo nginx -t
sudo systemctl reload nginx

Étape 5 : renouvellement automatique

Le renouvellement DNS relance l'API ou le plugin :

sudo certbot renew --dry-run

Vérifiez que le timer est actif :

sudo systemctl status certbot.timer

Pour le mode manuel, le renouvellement ne peut pas être entièrement automatique sans hook — migrez vers un plugin DNS.

Étape 6 : déploiement multi-services (HolyCloud)

Un wildcard couvre tous les sous-domaines pointant vers le même VPS ou un reverse proxy :

  • app.example.com → VPS HolyCloud IP
  • api.example.com → même IP, virtual hosts Nginx distincts

Le certificat unique simplifie la gestion TLS pour plusieurs applications sur un seul VPS HolyCloud.

Vérification

sudo certbot certificates
echo | openssl s_client -connect example.com:443 -servername app.example.com 2>/dev/null | openssl x509 -noout -subject -dates
dig TXT _acme-challenge.example.com +short

Besoin d'aide HolyCloud

  • NXDOMAIN ou TXT introuvable : propagation DNS (TTL), mauvaise zone
  • Erreur API : token insuffisant, fichier .ini permissions trop ouvertes
  • Support HolyCloud : plugin utilisé, sortie certbot certonly (sans secrets), dig TXT _acme-challenge