Certificat SSL gratuit pour votre site : héberger un site avec Nginx et Let's Encrypt (Certbot) sous Linux

13 min de lecture 4 vues 0
Sommaire

Tout site public devrait être servi en HTTPS, et un certificat SSL gratuit Let's Encrypt rend la chose simple. Ce guide montre comment héberger un site sur un serveur cloud ou dédié JUSTG avec Nginx, émettre un certificat Let's Encrypt avec certbot, vérifier le renouvellement automatique et forcer le HTTPS. Les commandes sont données pour Debian/Ubuntu et pour CentOS/Rocky Linux/AlmaLinux. Le domaine d'exemple est example.com et l'IP du serveur 203.0.113.10 ; remplacez-les par les vôtres.

Étape 1 : Pointer le domaine vers votre serveur JUSTG (enregistrements A et AAAA)

Chez votre registraire ou votre fournisseur DNS, créez un enregistrement A pour le domaine nu et pour www vers l'IPv4 du serveur. Les serveurs cloud JUSTG incluent aussi l'IPv6 gratuitement ; n'ajoutez un enregistrement AAAA que si l'IPv6 est configurée sur le serveur et que Nginx l'écoute. Attendez que les enregistrements soient résolus avant de demander un certificat, car Let's Encrypt valide le domaine depuis Internet.

# A    example.com       -> 203.0.113.10
# A    www.example.com   -> 203.0.113.10
# AAAA example.com       -> 2001:db8::10   (optional, only if IPv6 is configured)

# check from the server (Debian/Ubuntu: apt install -y dnsutils, Rocky: dnf install -y bind-utils)
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA

Étape 2 : Installer Nginx et certbot sous Debian ou Ubuntu

Le plugin Nginx de certbot peut modifier la configuration Nginx à votre place. Installez le tout depuis les dépôts standards :

apt update
apt install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
ufw allow 'Nginx Full'     # if UFW is enabled

Étape 3 : Installer Nginx et certbot sous Rocky Linux, AlmaLinux ou CentOS

Sur les systèmes dérivés de RHEL, certbot provient du dépôt EPEL. Ouvrez aussi HTTP et HTTPS dans firewalld :

dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload

Étape 4 : Créer le site et son bloc server Nginx

Créez une racine de document avec une page de test. Sur les systèmes avec SELinux, restorecon garantit que Nginx peut lire les fichiers.

mkdir -p /var/www/example.com
echo '<h1>example.com is online</h1>' > /var/www/example.com/index.html
restorecon -Rv /var/www/example.com    # Rocky/Alma/CentOS with SELinux only

Ajoutez ensuite un bloc server pour le domaine :

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Enregistrez-le à l'emplacement prévu par votre distribution, testez la syntaxe et rechargez Nginx :

# Debian / Ubuntu: save as /etc/nginx/sites-available/example.com, then
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# CentOS / Rocky / AlmaLinux: save as /etc/nginx/conf.d/example.com.conf

nginx -t && systemctl reload nginx
curl -I http://example.com

Si curl -I renvoie 200 OK, le site répond en HTTP et vous pouvez passer au certificat.

Étape 5 : Obtenir un certificat SSL Let's Encrypt gratuit avec certbot --nginx

Lancez certbot avec tous les noms de domaine que le certificat doit couvrir. Au premier lancement, il demande une adresse e-mail pour les avis d'expiration et l'acceptation des conditions de Let's Encrypt. L'option --redirect ajoute une redirection automatique de HTTP vers HTTPS.

certbot --nginx -d example.com -d www.example.com --redirect

certbot prouve le contrôle du domaine grâce à un fichier temporaire servi par Nginx, installe le certificat dans votre bloc server et recharge Nginx.

Étape 6 : Vérifier le renouvellement automatique

Les certificats Let's Encrypt ont une courte durée de validité, le renouvellement doit donc être automatique. Un essai à blanc teste tout le processus sans toucher au vrai certificat :

certbot renew --dry-run

# Debian / Ubuntu: the timer is enabled by the package
systemctl list-timers | grep certbot

# Rocky / AlmaLinux (EPEL): enable the renewal timer once
systemctl enable --now certbot-renew.timer

Si l'essai réussit et que le minuteur est actif, rien d'autre n'est nécessaire.

Étape 7 : Forcer le HTTPS et vérifier le résultat

Si vous n'avez pas utilisé --redirect, forcez le HTTPS vous-même en remplaçant le bloc du port 80 par une redirection, tout en conservant le bloc HTTPS créé par certbot :

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Rechargez Nginx et vérifiez :

curl -I http://example.com      # expect 301 to https://
curl -I https://example.com     # expect 200
certbot certificates

Alternative : SSL en un clic dans aaPanel

Si votre serveur utilise aaPanel, vous pouvez éviter les étapes manuelles. Ajoutez le site dans Website, ouvrez ses réglages, allez dans la section SSL, choisissez Let's Encrypt, sélectionnez les noms de domaine et validez. Activez ensuite l'option Force HTTPS. aaPanel renouvelle le certificat automatiquement. Les enregistrements DNS de l'étape 1 restent indispensables.

Questions fréquentes

certbot échoue avec une erreur de connexion ou un délai dépassé. Que vérifier ?

Assurez-vous que les enregistrements A et AAAA pointent vers ce serveur, que les ports 80 et 443 sont ouverts dans UFW ou firewalld et que Nginx tourne. Un enregistrement AAAA erroné est une cause fréquente, car la validation peut passer par l'IPv6.

Un seul certificat peut-il couvrir plusieurs domaines ?

Oui. Ajoutez d'autres options -d à la commande certbot ; chaque nom doit pointer vers le serveur.

Faut-il redémarrer Nginx après un renouvellement ?

Non. Le plugin Nginx de certbot recharge Nginx automatiquement après un renouvellement réussi.

Si le problème persiste, ouvrez un ticket pour contacter le support technique JUSTG.

Cette réponse était-elle pertinente?