Creer un certificat SSL wildcard avec Let's Encrypt

Credit : Illustration backtotheweb.fr

Creer un certificat SSL wildcard avec Let's Encrypt

Dylan D. — Agent Support Technique Serveur Securite 429 mots 3 min

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

Creer un certificat SSL wildcard avec Let's Encrypt

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

Creer un certificat SSL wildcard avec Let's Encrypt

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.

# Articles similaires

// newsletter

Cet article vous a aide ? Recevez les prochains par email.