Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code : Skills Commencer
Sections
Linux Sécurité

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 :

ExigenceDétails
Système d’exploitationUbuntu 18.04, 20.04, ou 22.04 LTS
Serveur WebNginx installé et servant activement votre site
Nom de domaineUn domaine enregistré avec un enregistrement A pointant vers l’adresse IP publique de votre serveur
Accès au serveurAccès SSH avec un utilisateur disposant de privilèges sudo
Pare-feuPorts 80 (HTTP) et 443 (HTTPS) ouverts dans UFW ou iptables
Accès rootNon 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 nginx

Vous 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 nginx

Ouvrir 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 status

La 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 -y

Installez Certbot avec le plugin Nginx

sudo apt install certbot python3-certbot-nginx -y

Vérifiez l’installation

certbot --version

Ré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.com

Ajoutez 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 -t

Résultat attendu :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Recharger 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.com

Explication 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/
  • Entrez votre nom de domaine
  • Cliquez sur « Submit »
  • 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 certificates

    Ré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.pem

    Mé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 -issuer

    Ré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.timer

    Ré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.service

    Si 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-run

    Ré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/certbot

    Vous 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 renew

    Cela 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.sh

    Ajoutez le contenu suivant :

    #!/bin/bash
    systemctl reload nginx

    Rendez-le exécutable :

    sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

    Dé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 nginx

    Erreur : « 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 +short

    La 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.com

    Une 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 nginx

    Certificat 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 nginx

    Choisir 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 :

    1. ✅ Installé Certbot et le plugin Nginx
    2. ✅ Configuré un bloc serveur Nginx approprié pour votre domaine
    3. ✅ Obtenu un certificat SSL Let's Encrypt de confiance
    4. ✅ Vérifié le certificat à l'aide d'outils de navigateur, SSL Labs et OpenSSL
    5. ✅ Confirmé le renouvellement automatique via la minuterie systemd et les tests de simulation
    6. ✅ 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.