Credit : Illustration backtotheweb.fr
Creer un certificat SSL wildcard avec Let's Encrypt
Qu'est-ce qu'un certificat wildcard ?
Un certificat wildcard securise un domaine et tous ses sous-domaines avec un seul certificat. Au lieu d'avoir un certificat pour monsite.fr, un pour www.monsite.fr, un pour api.monsite.fr, etc., le certificat *.monsite.fr couvre tout.
Let's Encrypt fournit ces certificats gratuitement, mais impose l'utilisation du challenge DNS (pas HTTP).
Installer Certbot
Sur un serveur IONOS sous Debian/Ubuntu :
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
Verifiez l'installation :
certbot --version
Generer le certificat wildcard
Le challenge DNS necessite de creer un enregistrement TXT dans votre zone DNS :
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d "monsite.fr" \
-d "*.monsite.fr" \
--email admin@monsite.fr \
--agree-tos
Certbot vous demandera de creer un enregistrement DNS de type TXT :
_acme-challenge.monsite.fr TXT "gH7dKj2mN8pQ4rT6wX9yB1cE3fA5iL0o"
Ajoutez cet enregistrement dans votre interface de gestion DNS IONOS. Attendez quelques minutes que la propagation se fasse, puis validez.
Verifiez la propagation avant de valider :
dig _acme-challenge.monsite.fr TXT +short
Automatiser avec le plugin DNS IONOS
Pour automatiser le renouvellement, utilisez un plugin DNS. Avec l'API IONOS, creez un script de hook :
#!/bin/bash
# /usr/local/bin/certbot-ionos-hook.sh
IONOS_API_KEY="votre-prefix.votre-secret"
ZONE_ID="votre-zone-id"
if [ "$CERTBOT_AUTH_OUTPUT" ]; then
# Cleanup
curl -s -X DELETE \
-H "X-API-Key: $IONOS_API_KEY" \
"https://api.hosting.ionos.com/dns/v1/zones/$ZONE_ID/records/$RECORD_ID"
else
# Create
curl -s -X POST \
-H "X-API-Key: $IONOS_API_KEY" \
-H "Content-Type: application/json" \
-d '[{"name": "_acme-challenge.monsite.fr", "type": "TXT", "content": "'"$CERTBOT_VALIDATION"'", "ttl": 60}]' \
"https://api.hosting.ionos.com/dns/v1/zones/$ZONE_ID/records"
fi
Rendez le script executable :
sudo chmod +x /usr/local/bin/certbot-ionos-hook.sh
Lancez Certbot avec les hooks :
sudo certbot certonly \
--manual \
--preferred-challenges dns \
--manual-auth-hook /usr/local/bin/certbot-ionos-hook.sh \
--manual-cleanup-hook /usr/local/bin/certbot-ionos-hook.sh \
-d "monsite.fr" \
-d "*.monsite.fr"
Configurer Nginx avec le wildcard
server {
listen 443 ssl http2;
server_name monsite.fr *.monsite.fr;
ssl_certificate /etc/letsencrypt/live/monsite.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monsite.fr/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
}
Renouvellement automatique
Let's Encrypt delivre des certificats valides 90 jours. Certbot configure automatiquement un timer systemd :
sudo systemctl list-timers | grep certbot
Testez le renouvellement :
sudo certbot renew --dry-run
Pour recharger Nginx automatiquement apres renouvellement, ajoutez un hook :
sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy
cat << 'EOF' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash
nginx -t && systemctl reload nginx
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
Votre certificat wildcard est desormais en place et se renouvellera automatiquement. Tous vos sous-domaines sont securises sans intervention manuelle.