Comment créer des certificats SSL wildcard Let’s Encrypt sur NGINX

générer certificats SSL wildcard Let's Encrypt Certbot

Let’s Encrypt est une autorité de certification (AC) gratuite, automatisée et open source qui fournit des certificats SSL/TLS pour activer HTTPS sur votre site web. Les certificats wildcard Let’s Encrypt vous permettent de sécuriser des sous-domaines illimités sous un domaine de base (ex : *.example.com).

Dans ce tutoriel, nous allons vous montrer comment utiliser Certbot pour générer des certificats wildcard Let’s Encrypt et configurer HTTPS sur un serveur web Nginx.

Prérequis

Avant de suivre ce guide, vous aurez besoin de :

  • Un serveur Ubuntu 18.04 / 20.04 / 22.04 avec une adresse IPv4 publique et un utilisateur non root régulier avec les privilèges sudo.
  • Des noms de domaine pointant vers l’IP publique de votre serveur. Dans nos exemples, nous utiliserons example.com et *.example.com.
  • Les ports 80 et 443 ouverts dans le pare-feu de votre serveur.
  • Nginx installé sur votre serveur. Si vous ne l’avez pas encore, vous pouvez l’installer avec :
$ sudo apt install nginx
  • Certbot installé sur votre serveur. S’il n’est pas déjà installé, vous pouvez l’installer avec :
$ sudo apt install certbot python3-certbot-nginx

Une fois que vous avez satisfait à tous les prérequis, passons à la génération de certificats wildcard.

Étape 1 – Générer des certificats SSL wildcard

Certbot inclut une commande certonly pour obtenir des certificats SSL/TLS. Pour générer un certificat wildcard pour *.example.com, exécutez :

$ sudo certbot certonly --manual --preferred-challenges=dns --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.example.com

Cela indique à Certbot de :

  • Utiliser le plugin “manuel” pour obtenir des certificats
  • Utiliser le défi “dns” pour valider la propriété du domaine
  • Utiliser le point de terminaison de l’API ACME v2 de Let’s Encrypt
  • Accepter les conditions d’utilisation de Let’s Encrypt
  • Obtenir un certificat pour *.example.com

Vous serez invité à saisir une adresse e-mail pour les notifications d’expiration du certificat. Entrez votre e-mail et appuyez sur Entrée.

Ensuite, Certbot fournira des enregistrements TXT qui doivent être créés dans le DNS de votre domaine pour valider le contrôle du domaine. Créez ces enregistrements TXT dans votre panneau de contrôle DNS, puis appuyez sur Entrée pour continuer.

Certbot attendra la propagation globale des modifications DNS et vérifiera les enregistrements TXT. En cas de réussite, le certificat wildcard (fullchain.pem) et la clé privée (privkey.pem) seront enregistrés dans /etc/letsencrypt/live/example.com/.

Étape 2 – Configurer Nginx

Avec le certificat wildcard généré, nous pouvons maintenant configurer Nginx.

Tout d’abord, créez un nouveau bloc de serveur pour le domaine principal example.com :

$ sudo nano /etc/nginx/sites-available/example.com

Ajoutez la configuration suivante :

server {
        listen80;
        listen [::]:80;
        server_name example.com;
        return301 https://$host$request_uri;
}
server {
       listen443 ssl http2;
       listen [::]:443 ssl http2;
       server_name example.com;
       ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
       # Autre configuration SSL
       ...
}

Cela configure HTTPS à l’aide du certificat Let’s Encrypt et redirige le trafic HTTP vers HTTPS.

Ensuite, créez un bloc de serveur pour le sous-domaine wildcard *.example.com :

$ sudo nano /etc/nginx/sites-available/wildcard.example.com
server {
  listen80;
  listen [::]:80;
  server_name*.example.com;
  return301 https://$host$request_uri;
}
server {
  listen443 ssl http2;
  listen [::]:443 ssl http2;
  server_name*.example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  # Autre configuration SSL
  ...
}

Cela gérera tous les sous-domaines en utilisant le même certificat wildcard.

Activez les blocs de serveur :

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/wildcard.example.com /etc/nginx/sites-enabled/ 

Enfin, testez la configuration Nginx et rechargez-la si elle a réussi :

$ sudo nginx -t
$ sudo systemctl reload nginx

Votre certificat wildcard devrait maintenant fonctionner ! Essayez d’accéder à votre site via HTTPS et divers sous-domaines pour confirmer.

Automatiser le renouvellement

Les certificats Let’s Encrypt expirent après 90 jours, vous devrez donc les renouveler régulièrement.

Vous pouvez automatiser le renouvellement en utilisant la commande renew de Certbot. Créez une tâche cron pour s’exécuter quotidiennement :

$ sudo crontab -e

Ajoutez cette ligne qui exécutera Certbot quotidiennement et renouvellera si les certificats expirent dans moins de 30 jours :

0 0 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Cela renouvellera vos certificats automatiquement avant leur expiration !

Conclusion

C’est tout ! Vous devriez maintenant avoir des certificats wildcard Let’s Encrypt délivrés par Certbot configurés pour votre domaine. Cela vous permet d’activer HTTPS sur votre domaine principal et n’importe quel sous-domaine avec un seul certificat.

Les certificats se renouvelleront automatiquement, offrant une protection HTTPS continue pour votre site. Cela offre à vos visiteurs sécurité, confiance et avantages SEO.

Comme Let’s Encrypt délivre des certificats de confiance gratuitement, il n’y a aucune raison de ne pas utiliser HTTPS partout avec des certificats wildcard. Profitez de votre site sécurisé !

Laisser un commentaire