Comment sécuriser Nginx avec Let’s Encrypt SSL sur Ubuntu (Guide complet 2025)
HTTPS n’est plus optionnel. En 2025, chaque site web a besoin du chiffrement SSL/TLS — non seulement pour protéger les données des utilisateurs, mais aussi pour se classer de manière compétitive dans Google Search et satisfaire aux exigences de sécurité des navigateurs modernes. Let’s Encrypt rend cela possible gratuitement, en offrant des certificats SSL de confiance, auto-renouvelables, qui fonctionnent parfaitement avec Nginx sur Ubuntu.
Ce guide complet vous guide à travers chaque étape : installer Certbot, obtenir un certificat SSL Let’s Encrypt, vérifier votre configuration et automatiser les renouvellements — tout sur un serveur Ubuntu 18.04, 20.04 ou 22.04 exécutant Nginx.
Que vous gériez un environnement VPS Hosting ou un serveur web dédié, ce tutoriel vous donne une configuration HTTPS prête pour la production en moins de 15 minutes.
Pourquoi SSL est important pour Nginx en 2025
Avant de plonger dans les commandes, il vaut la peine de comprendre exactement ce que vous gagnez en sécurisant Nginx avec Let's Encrypt :
- Chiffrement des données : HTTPS chiffre tout le trafic entre votre serveur et les visiteurs, prévenant les attaques de l’homme du milieu et l’écoute clandestine.
- Signaux de classement SEO : Google a confirmé HTTPS comme facteur de classement. Les sites sans SSL sont activement pénalisés dans les résultats de recherche.
- Indicateurs de confiance du navigateur : Chrome, Firefox et Edge affichent des avertissements « Non sécurisé » pour les sites HTTP, détruisant la confiance des utilisateurs et augmentant les taux de rebond.
- Gratuit et automatisé : Let's Encrypt émet des certificats sans frais, et Certbot gère les renouvellements automatiquement — éliminant la surcharge manuelle des certificats payants.
- PCI DSS et conformité : Tout site traitant des paiements ou des données personnelles est légalement tenu d’utiliser des connexions chiffrées.
Si votre domaine est déjà enregistré et pointe vers votre serveur, vous êtes prêt à commencer. Si vous avez toujours besoin d’un domaine, AlexHost offre une Inscription de domaine abordable avec gestion DNS instantanée.
Prérequis
Assurez-vous que les conditions suivantes sont remplies avant de continuer :
| Exigence | Détails |
|---|---|
| Système d’exploitation | Ubuntu 18.04, 20.04, ou 22.04 LTS |
| Serveur Web | Nginx installé et servant activement votre site |
| Nom de domaine | Un domaine enregistré avec un enregistrement A pointant vers l’adresse IP publique de votre serveur |
| Accès au serveur | Accès SSH avec un utilisateur disposant de privilèges sudo |
| Pare-feu | Ports 80 (HTTP) et 443 (HTTPS) ouverts dans UFW ou iptables |
| Accès root | Non strictement requis, mais l’accès sudo est obligatoire |
Vérifier que Nginx est en cours d’exécution
Avant d’installer Certbot, confirmez que Nginx est actif :
sudo systemctl status nginxVous devriez voir active (running) dans la sortie. Si Nginx n’est pas installé, exécutez :
sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginxOuvrir les ports de pare-feu requis
Si UFW est activé, autorisez le trafic HTTP et HTTPS :
sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw statusLa sortie devrait afficher Nginx Full comme ALLOW pour IPv4 et IPv6.
Étape 1 — Installation de Certbot et du plugin Nginx
Certbot est le client officiel de Let’s Encrypt. Il automatise l’ensemble du cycle de vie du certificat : émission, installation et renouvellement. Le plugin python3-certbot-nginx permet à Certbot de lire votre configuration Nginx et de la modifier automatiquement.
Mettez à jour votre index de paquets
Mettez toujours à jour vos listes de paquets avant d’installer un nouveau logiciel :
sudo apt update
sudo apt upgrade -yInstallez Certbot avec le plugin Nginx
sudo apt install certbot python3-certbot-nginx -yVérifiez l’installation
certbot --versionRésultat attendu (la version peut varier) :
certbot 2.x.x> Remarque pour les utilisateurs d’Ubuntu 18.04 : Si la version APT par défaut de Certbot est obsolète, installez via Snap pour la dernière version :
> “`bash
> sudo snap install –classic certbot
> sudo ln -s /snap/bin/certbot /usr/bin/certbot
> “`
Étape 2 — Configuration de votre bloc serveur Nginx
Certbot doit détecter votre domaine dans la configuration Nginx pour la modifier automatiquement. Si vous n’avez pas déjà créé un bloc serveur pour votre domaine, faites-le maintenant.
Créer un bloc serveur
Remplacez yourdomain.com par le nom de votre domaine réel dans tout ce guide :
sudo nano /etc/nginx/sites-available/yourdomain.comAjoutez la configuration de base suivante :
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}Activer le bloc serveur
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/Tester la configuration Nginx
Validez toujours votre configuration Nginx avant de recharger :
sudo nginx -tRésultat attendu :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulRecharger Nginx
sudo systemctl reload nginxÉtape 3 — Obtention d’un certificat SSL Let’s Encrypt
Avec Nginx configuré et Certbot installé, vous pouvez maintenant demander votre certificat SSL.
Exécuter Certbot avec le plugin Nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.comExplication des drapeaux :
--nginx — Indique à Certbot d’utiliser le plugin Nginx pour la configuration automatique
-d yourdomain.com — Spécifie le domaine principal
-d www.yourdomain.com — Ajoute le sous-domaine www au même certificat (Subject Alternative Name)
Invites interactives expliquées
Certbot vous guidera à travers un court assistant de configuration :
1. Adresse e-mail
Enter email address (used for urgent renewal and security notices):
Fournissez une adresse e-mail valide. Let’s Encrypt l’utilise pour vous notifier des certificats expirés et des problèmes de sécurité.
2. Conditions d’utilisation
Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
(A)gree/(C)ancel:
Tapez A et appuyez sur Entrée.
3. Infolettre EFF (Facultatif)
Would you be willing to share your email address with the Electronic Frontier Foundation?
(Y)es/(N)o:
C’est facultatif. Tapez N si vous préférez ne pas vous abonner.
4. Redirection HTTP vers HTTPS
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect
2: Redirect - Make all requests redirect to secure HTTPS access
Choisissez toujours l’option 2. Cela garantit que tous les visiteurs sont automatiquement mis à niveau vers HTTPS, éliminant les problèmes de contenu mixte et améliorant la posture de sécurité.
Sortie réussie
Si tout est configuré correctement, vous verrez :
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/yourdomain.com/privkey.pem
This certificate expires on YYYY-MM-DD.
These files will be updated when the certificate renews.
Deploying certificate
Successfully deployed certificate for yourdomain.com to /etc/nginx/sites-available/yourdomain.com
Successfully deployed certificate for www.yourdomain.com to /etc/nginx/sites-available/yourdomain.com
Congratulations! You have successfully enabled HTTPS on https://yourdomain.com and https://www.yourdomain.com
Ce que Certbot a modifié dans Nginx
Après l’exécution, Certbot ajoute automatiquement des directives SSL à votre bloc serveur. Votre configuration ressemblera maintenant à ceci :
server {
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = www.yourdomain.com) {
return 301 https://$host$request_uri;
}
if ($host = yourdomain.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 404;
}
Étape 4 — Vérification de l’installation SSL
Une fois que Certbot est terminé, vérifiez que votre certificat SSL est correctement installé et fonctionnel.
Méthode 1 : Vérification par navigateur
Ouvrez votre navigateur web et accédez à https://yourdomain.com. Recherchez :
Icône de cadenas dans la barre d’adresse — confirme une connexion SSL active et de confiance
Aucun avertissement de sécurité — le certificat est valide et approuvé par votre navigateur
HTTPS dans l’URL — les requêtes HTTP doivent être automatiquement redirigées vers HTTPS
Cliquez sur l’icône de cadenas et sélectionnez « Certificat » pour afficher l’émetteur (doit afficher « Let’s Encrypt ») et la date d’expiration.
Méthode 2 : Analyse approfondie SSL Labs
Pour un audit de sécurité complet, utilisez Qualys SSL Labs :
Accédez à https://www.ssllabs.com/ssltest/Une configuration Let’s Encrypt + Nginx correctement configurée devrait obtenir un score A ou A+. Si vous obtenez un score inférieur, SSL Labs identifiera les faiblesses spécifiques à corriger.
Méthode 3 : Vérification en ligne de commande
Vérifiez les détails du certificat directement depuis le terminal :
sudo certbot certificatesRésultat :
Found the following certs:
Certificate Name: yourdomain.com
Serial Number: abc123...
Key Type: RSA
Domains: yourdomain.com www.yourdomain.com
Expiry Date: YYYY-MM-DD HH:MM:SS+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pemMéthode 4 : Commande OpenSSL
Vérifiez la chaîne de certificats et l’expiration à l’aide d’OpenSSL :
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates -issuerRésultat attendu :
notBefore=Mon Jan 1 00:00:00 2025 GMT
notAfter=Tue Apr 1 00:00:00 2025 GMT
issuer=C=US, O=Let's Encrypt, CN=R11Étape 5 — Configuration du renouvellement automatique des certificats
Les certificats Let's Encrypt expirent après 90 jours. Cette courte période de validité est intentionnelle — elle limite l’exposition en cas de compromission d’une clé privée. Certbot gère les renouvellements automatiquement, mais vous devez vérifier que l’automatisation fonctionne correctement.
Fonctionnement du renouvellement Certbot
Lorsque vous installez Certbot via APT ou Snap, il crée automatiquement un minuteur systemd (ou une tâche cron sur les anciens systèmes) qui s’exécute deux fois par jour. Il vérifie si des certificats arrivent à expiration dans les 30 jours et les renouvelle automatiquement.
Vérifier le minuteur Systemd
sudo systemctl status certbot.timerRésultat attendu :
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since ...
Trigger: ...
Triggers: ● certbot.serviceSi le minuteur est actif et activé, le renouvellement automatique est déjà configuré.
Tester le processus de renouvellement (exécution à blanc)
Avant de compter sur le renouvellement automatique, simulez-le pour confirmer que tout fonctionne :
sudo certbot renew --dry-runRésultat réussi :
Simulating renewal of an existing certificate for yourdomain.com and www.yourdomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Si l’exécution à blanc réussit, vos certificats se renouvelleront automatiquement sans intervention manuelle.
Vérifier la tâche Cron (systèmes hérités)
Sur les anciennes versions d’Ubuntu qui n’utilisent pas les minuteurs systemd, vérifiez la tâche cron Certbot :
sudo cat /etc/cron.d/certbotVous devriez voir une ligne similaire à :
0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renewCela exécute Certbot deux fois par jour à des intervalles aléatoires pour éviter de surcharger les serveurs Let's Encrypt.
Renouvellement manuel (si nécessaire)
Si vous devez forcer manuellement un renouvellement :
sudo certbot renew --force-renewal
sudo systemctl reload nginx> Bonne pratique : Après tout renouvellement de certificat (manuel ou automatique), rechargez Nginx pour vous assurer qu’il récupère les nouveaux fichiers de certificat :
> “`bash
> sudo systemctl reload nginx
> “`
> Les crochets de renouvellement de Certbot gèrent cela automatiquement dans la plupart des configurations.
Configurer les crochets de renouvellement
Pour vous assurer que Nginx se recharge automatiquement après chaque renouvellement, ajoutez un crochet de déploiement :
sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.shAjoutez le contenu suivant :
#!/bin/bash
systemctl reload nginxRendez-le exécutable :
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.shDépannage des problèmes courants
Erreur : « Could not bind to IPv4/IPv6 »
Certbot utilise le port 80 pour la validation du domaine. Si un autre processus utilise le port 80, la validation échouera.
Solution : Arrêtez temporairement Nginx, obtenez le certificat en mode autonome, puis redémarrez :
sudo systemctl stop nginx
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
sudo systemctl start nginxErreur : « DNS problem: NXDOMAIN looking up A for yourdomain.com »
Les enregistrements DNS de votre domaine ne se propagent pas encore vers les serveurs de validation de Let’s Encrypt.
Solution : Vérifiez que votre enregistrement A est correctement configuré :
dig yourdomain.com A +shortLa sortie doit retourner l’adresse IP publique de votre serveur. La propagation DNS peut prendre jusqu’à 48 heures, bien qu’elle se résolve généralement en 1 à 2 heures.
Erreur : « Too many certificates already issued »
Let’s Encrypt applique une limite de débit de 5 certificats en double par semaine par domaine.
Solution : Utilisez le flag --staging pour tester votre configuration sans atteindre les limites de débit :
sudo certbot --nginx --staging -d yourdomain.com -d www.yourdomain.comUne fois les tests terminés, révoquez le certificat de staging et émettez un certificat de production.
Erreur : « Nginx configuration test failed »
Certbot modifie votre configuration Nginx. Si la configuration résultante contient des erreurs de syntaxe, Nginx ne se rechargera pas.
Solution : Testez et corrigez manuellement la configuration :
sudo nginx -t
sudo nano /etc/nginx/sites-available/yourdomain.com
# Fix any syntax errors, then:
sudo systemctl reload nginxCertificat ne se renouvelant pas automatiquement
Si vous recevez des e-mails d’avertissement d’expiration malgré l’installation de Certbot, vérifiez l’état du minuteur :
sudo systemctl status certbot.timer
sudo journalctl -u certbot.service --since "7 days ago"Consultez les journaux pour les erreurs et traitez-les en conséquence.
Avancé : Renforcement de votre configuration SSL Nginx
La configuration par défaut Let’s Encrypt + Certbot est sécurisée, mais vous pouvez la renforcer davantage pour obtenir un score A+ SSL Labs.
Activer HTTP/2
Modifiez votre bloc serveur pour activer HTTP/2 pour améliorer les performances :
listen 443 ssl http2;
listen [::]:443 ssl http2;Ajouter HSTS (HTTP Strict Transport Security)
HSTS indique aux navigateurs d’utiliser toujours HTTPS pour votre domaine, même si un utilisateur tape http:// :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;Désactiver les protocoles et chiffrements faibles
Ajoutez ces directives à votre nginx.conf ou bloc serveur :
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;Après avoir apporté des modifications, testez et rechargez toujours :
sudo nginx -t && sudo systemctl reload nginxChoisir le bon hébergement pour votre configuration Nginx + SSL
Les performances et la fiabilité de votre serveur Nginx sécurisé par SSL dépendent fortement de l’infrastructure sous-jacente. Voici comment les options d’hébergement d’AlexHost s’alignent avec différents cas d’usage :
- Hébergement VPS — Idéal pour la plupart des sites web et applications. L’accès root complet vous permet de configurer Nginx et Certbot exactement comme décrit dans ce guide. Les plans VPS d’AlexHost fonctionnent sur Ubuntu 18.04, 20.04 et 22.04 LTS.
- Serveurs dédiés — Meilleur pour les sites web à fort trafic nécessitant des performances maximales, des ressources dédiées et un contrôle matériel complet. Exécutez plusieurs hôtes virtuels Nginx, chacun avec son propre certificat Let’s Encrypt.
- VPS avec cPanel — Si vous préférez une interface graphique pour gérer les certificats SSL aux côtés de votre hébergement web, cPanel s’intègre à Let’s Encrypt et gère l’émission de certificats via sa fonction AutoSSL.
- Certificats SSL — Pour les environnements d’entreprise, les sites de commerce électronique ou les applications nécessitant des certificats de validation étendue (EV) ou de validation d’organisation (OV), AlexHost propose des certificats SSL premium avec couverture de garantie et support dédié.
Conclusion
Sécuriser Nginx avec un certificat SSL Let's Encrypt sur Ubuntu est l'une des étapes les plus impactantes que vous pouvez prendre pour protéger vos utilisateurs, améliorer votre classement dans les moteurs de recherche et établir la confiance avec votre audience. L'ensemble du processus — de l'installation de Certbot à l'activation des renouvellements automatiques — prend moins de 15 minutes et ne coûte rien.
Pour récapituler ce que vous avez réalisé dans ce guide :
- ✅ Installé Certbot et le plugin Nginx
- ✅ Configuré un bloc serveur Nginx approprié pour votre domaine
- ✅ Obtenu un certificat SSL Let's Encrypt de confiance
- ✅ Vérifié le certificat à l'aide d'outils de navigateur, SSL Labs et OpenSSL
- ✅ Confirmé le renouvellement automatique via la minuterie systemd et les tests de simulation
- ✅ Appliqué un renforcement avancé pour une note de sécurité A+
Avec votre serveur Nginx maintenant sécurisé, envisagez d'explorer des couches de protection supplémentaires : un pare-feu d'application Web (WAF), fail2ban pour la protection contre les attaques par force brute, et des audits de sécurité réguliers. Si vous gérez plusieurs domaines ou applications, les panneaux de contrôle VPS d'AlexHost offrent une interface rationalisée pour gérer les certificats SSL, les hôtes virtuels et les configurations de serveur sans sacrifier la flexibilité d'un environnement Linux.
Vos utilisateurs méritent une connexion sécurisée. Maintenant, ils en ont une.
sur tous les services d'hébergement