Nginx SSL Let's EncryptVPS Linux··10 min de lecture·Par l'équipe OmegaCloud

Configurer Nginx avec SSL Let's Encrypt sur VPS Linux

Illustration de l'article OmegaCloud : Nginx SSL Let's Encrypt

Configurer Nginx SSL Let's Encrypt est devenu une étape incontournable pour sécuriser tout site web professionnel en 2026. Ce tutoriel complet vous guide pas à pas pour installer un certificat SSL gratuit sur votre serveur Nginx, automatiser le renouvellement et optimiser la configuration TLS pour garantir une sécurité maximale. Que vous administriez un VPS Linux OmegaCloud ou tout autre serveur dédié, cette méthode éprouvée fonctionne sur Debian, Ubuntu, Rocky Linux et AlmaLinux. Sur un site WordPress, c'est exactement la configuration TLS décrite sur la page VPS WordPress.



Prérequis pour installer Nginx SSL Let's Encrypt

Avant de démarrer, vérifiez que votre environnement répond aux exigences minimales. Vous aurez besoin d'un serveur Linux avec accès root SSH, Nginx déjà installé et configuré, et un nom de domaine pointant correctement vers l'adresse IP publique de votre serveur via un enregistrement DNS de type A.

Assurez-vous que le port 80 (HTTP) et le port 443 (HTTPS) sont ouverts dans votre firewall. Sur un système avec UFW, vérifiez avec :

sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Vérifiez également que Nginx est actif et fonctionne correctement :

sudo systemctl status nginx

Si Nginx n'est pas encore installé, installez-le avec le gestionnaire de paquets de votre distribution :

# Debian / Ubuntu
sudo apt update
sudo apt install nginx -y

# Rocky Linux / AlmaLinux
sudo dnf install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Enfin, assurez-vous que votre configuration Nginx contient un bloc server pour le domaine concerné, avec une directive server_name correspondant exactement au FQDN (Fully Qualified Domain Name) pour lequel vous souhaitez émettre le certificat SSL.


Terminal Linux affichant la commande systemctl status nginx avec le statut active running en vert sur un fond sombre, écran de monitoring de serveur avec lignes de logs système, style datacenter professionnel


Installation de Certbot pour gérer les certificats Let's Encrypt

Certbot est le client officiel recommandé par Let's Encrypt pour générer, installer et renouveler automatiquement les certificats SSL. L'installation diffère légèrement selon votre distribution Linux.

Installation sur Debian 11/12 et Ubuntu 20.04/22.04/24.04

Les dépôts officiels proposent Certbot ainsi que le plugin Nginx intégré :

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Vérifiez l'installation :

certbot --version

Installation sur Rocky Linux 8/9 et AlmaLinux 8/9

Activez d'abord le dépôt EPEL (Extra Packages for Enterprise Linux), puis installez Certbot :

sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-nginx -y

Le paquet python3-certbot-nginx est crucial : il permet à Certbot de détecter automatiquement votre configuration Nginx, d'y injecter les directives SSL nécessaires et de rediriger le trafic HTTP vers HTTPS sans intervention manuelle.

Cas particulier : snap sur systèmes récents

Sur certaines distributions modernes, l'Electronic Frontier Foundation (EFF) recommande l'installation via snap pour garantir une version toujours à jour :

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Cette méthode fonctionne sur Ubuntu 22.04+, Debian 12+, et toute distribution supportant snapd. Elle garantit des mises à jour automatiques de Certbot indépendamment du cycle de release de votre OS.



Obtenir et configurer un certificat Nginx SSL Let's Encrypt

Une fois Certbot installé, l'obtention du certificat SSL se fait en une seule commande. Le plugin Nginx automatise l'ensemble du processus : validation du domaine, génération du certificat, modification de la configuration Nginx et rechargement du service.

Commande d'émission avec configuration automatique

Lancez la commande suivante en remplaçant votredomaine.com et www.votredomaine.com par vos noms de domaine réels :

sudo certbot --nginx -d votredomaine.com -d www.votredomaine.com

Certbot vous posera quelques questions interactives :

  • Adresse email : utilisée pour les notifications d'expiration (bien que le renouvellement soit automatique).
  • Acceptation des conditions d'utilisation : répondez Y.
  • Redirection HTTPS : choisissez 2 pour forcer la redirection automatique de HTTP vers HTTPS (recommandé pour la sécurité et le SEO).

Le processus complet prend généralement moins de 30 secondes. Let's Encrypt valide la propriété du domaine via le challenge HTTP-01 : Certbot crée temporairement un fichier dans /.well-known/acme-challenge/ que les serveurs de Let's Encrypt interrogent pour vérifier que vous contrôlez bien le domaine.

Vérification de la configuration générée

Une fois le certificat émis, Certbot modifie automatiquement votre fichier de configuration Nginx (généralement situé dans /etc/nginx/sites-available/ ou /etc/nginx/conf.d/). Vérifiez les modifications :

sudo cat /etc/nginx/sites-available/votredomaine.com

Vous devriez y trouver un nouveau bloc server écoutant sur le port 443 avec les directives SSL :

server {
    listen 443 ssl http2;
    server_name votredomaine.com www.votredomaine.com;

    ssl_certificate /etc/letsencrypt/live/votredomaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/votredomaine.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Votre configuration applicative
    root /var/www/votredomaine.com;
    index index.php index.html;
    # ...
}

Le fichier options-ssl-nginx.conf contient une configuration TLS robuste maintenue par Certbot : protocoles modernes (TLSv1.2, TLSv1.3), cipher suites sécurisées, OCSP stapling activé et en-têtes HSTS recommandés.


Écran de terminal affichant le succès de l'installation Certbot avec le message "Congratulations" et les chemins des certificats SSL en vert, fond noir avec prompt root, style infrastructure datacenter professionnel

Test de la configuration SSL

Rechargez Nginx pour appliquer les modifications :

sudo nginx -t
sudo systemctl reload nginx

Testez ensuite votre site en HTTPS : ouvrez https://votredomaine.com dans un navigateur. Vous devriez voir le cadenas vert indiquant une connexion sécurisée.

Pour un audit complet, utilisez SSL Labs, référence de l'industrie pour l'analyse de configuration TLS. Un score A ou A+ valide une configuration optimale conforme aux standards 2026.



Automatisation du renouvellement des certificats Let's Encrypt

Les certificats Let's Encrypt ont une durée de validité de 90 jours. Contrairement aux certificats commerciaux annuels, cette courte durée impose un renouvellement fréquent, mais renforce la sécurité en limitant la fenêtre d'exposition en cas de compromission de clé privée.

Heureusement, Certbot automatise entièrement ce processus. Lors de l'installation via apt ou dnf, un timer systemd ou une tâche cron est configuré automatiquement pour tenter le renouvellement deux fois par jour. Let's Encrypt recommande de renouveler les certificats 30 jours avant expiration.

Vérification du timer systemd

Sur les systèmes modernes avec systemd, vérifiez que le timer Certbot est actif :

sudo systemctl list-timers | grep certbot

Vous devriez voir certbot.timer avec un statut actif et une prochaine exécution planifiée.

Pour tester manuellement le renouvellement sans attendre l'expiration :

sudo certbot renew --dry-run

L'option --dry-run simule le renouvellement sans toucher aux certificats réels. Si la commande réussit sans erreur, le renouvellement automatique fonctionnera correctement en production.

Configuration cron manuelle (systèmes sans systemd)

Sur des systèmes plus anciens ou minimaux, configurez une tâche cron :

sudo crontab -e

Ajoutez cette ligne pour tenter le renouvellement deux fois par jour à 3h15 et 15h15 :

15 3,15 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

L'option --post-hook recharge automatiquement Nginx après un renouvellement réussi pour activer immédiatement le nouveau certificat.

Surveillance proactive

Configurez une alerte email ou une intégration monitoring (Prometheus, Zabbix, Nagios) pour surveiller la date d'expiration des certificats. Sur un OmegaCloud VPS, vous pouvez scripter cette vérification et l'intégrer au dashboard de monitoring temps réel pour une visibilité centralisée.

Commande pour vérifier la date d'expiration :

echo | openssl s_client -servername votredomaine.com -connect votredomaine.com:443 2>/dev/null | openssl x509 -noout -dates


Optimisation et sécurisation avancée de Nginx SSL

La configuration SSL générée automatiquement par Certbot est solide, mais quelques ajustements permettent d'atteindre un score A+ sur SSL Labs et de respecter les recommandations ANSSI et Mozilla pour 2026.

Forcer TLS 1.3 uniquement (configuration stricte)

Si votre audience n'utilise que des navigateurs récents (Chrome 70+, Firefox 63+, Safari 12.1+), forcez exclusivement TLS 1.3 pour éliminer toute attaque cryptographique héritée :

ssl_protocols TLSv1.3;

Pour une compatibilité plus large (Android ancien, certains bots), conservez TLSv1.2 et TLSv1.3 :

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;

Activer HSTS avec preload

HTTP Strict Transport Security (HSTS) force les navigateurs à toujours utiliser HTTPS, même si l'utilisateur tape http://. Ajoutez cette directive dans votre bloc server HTTPS :

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

Le paramètre max-age=63072000 correspond à 2 ans. includeSubDomains applique HSTS à tous les sous-domaines. preload permet de soumettre votre domaine à la liste HSTS preload des navigateurs (consultez hstspreload.org pour la procédure).

Optimiser OCSP Stapling

OCSP Stapling améliore la performance SSL en permettant au serveur de fournir directement la preuve de validité du certificat, évitant ainsi une requête supplémentaire du navigateur vers l'autorité de certification. Certbot active cette option par défaut, mais vérifiez :

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/votredomaine.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Paramètres de session SSL

Optimisez la mise en cache des sessions SSL pour réduire la latence des connexions répétées :

ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;

Désactiver ssl_session_tickets améliore la sécurité en évitant les problèmes de forward secrecy sur certaines implémentations.

En-têtes de sécurité complémentaires

Renforcez la posture de sécurité avec des en-têtes HTTP modernes :

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;

Ces directives préviennent le clickjacking, le MIME sniffing, les fuites de referrer et l'accès non autorisé aux API sensibles du navigateur.


Datacenter européen moderne avec rangées de racks serveurs NVMe éclairés en violet et teal, câbles fibre optique organisés, ambiance professionnelle sombre avec indicateurs LED, architecture réseau redondante visible

Configuration complète Nginx SSL recommandée 2026

Voici une configuration Nginx SSL complète intégrant toutes les optimisations :

server {
    listen 80;
    server_name votredomaine.com www.votredomaine.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name votredomaine.com www.votredomaine.com;

    ssl_certificate /etc/letsencrypt/live/votredomaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/votredomaine.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/votredomaine.com/chain.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    root /var/www/votredomaine.com;
    index index.php index.html;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
}

Testez toujours la syntaxe avant de recharger Nginx :

sudo nginx -t && sudo systemctl reload nginx


Cas d'usage avancés : multi-domaines, wildcard et intégration CI/CD

Certificat SSL pour plusieurs domaines (SAN)

Certbot supporte nativement les certificats SAN (Subject Alternative Name) couvrant plusieurs domaines distincts :

sudo certbot --nginx -d domaine1.com -d www.domaine1.com -d domaine2.com -d www.domaine2.com

Attention : tous ces domaines doivent pointer vers la même adresse IP et le même serveur Nginx au moment de la validation.

Certificat wildcard Let's Encrypt

Pour couvrir tous les sous-domaines (*.votredomaine.com), utilisez le challenge DNS-01 au lieu de HTTP-01 :

sudo certbot certonly --manual --preferred-challenges dns -d "*.votredomaine.com" -d votredomaine.com

Certbot vous demandera de créer un enregistrement DNS TXT spécifique pour valider la propriété du domaine. Cette méthode nécessite un accès à la gestion DNS et une validation manuelle à chaque renouvellement, sauf si vous intégrez un plugin DNS automatique (certbot-dns-cloudflare, certbot-dns-ovh, etc.).

Automatisation via API et CI/CD

Sur une infrastructure moderne utilisant GitOps ou infrastructure-as-code, intégrez l'émission SSL dans vos pipelines CI/CD. Exemple avec Ansible :

- name: Install Certbot
  apt:
    name: 
      - certbot
      - python3-certbot-nginx
    state: present

- name: Obtain SSL certificate
  command: certbot --nginx --non-interactive --agree-tos --email [email protected] -d votredomaine.com -d www.votredomaine.com
  args:
    creates: /etc/letsencrypt/live/votredomaine.com/fullchain.pem

Les utilisateurs d'Integrations & API OmegaCloud peuvent scripter le provisioning complet d'un VPS avec Nginx SSL Let's Encrypt via l'API REST, incluant la création du serveur, la configuration DNS, l'installation de Certbot et le déploiement applicatif en un seul workflow automatisé.



Conclusion

Configurer Nginx SSL Let's Encrypt en 2026 est un processus entièrement automatisable garantissant une sécurité TLS robuste sans coût de certificat. Certbot, le renouvellement automatique et les optimisations SSL avancées permettent de déployer des environnements web professionnels conformes aux standards modernes. Cette configuration fonctionne de manière identique sur Debian, Ubuntu, Rocky et AlmaLinux, et s'intègre parfaitement dans les workflows DevOps et CI/CD actuels.



FAQ

Combien de temps reste valide un certificat Let's Encrypt et comment vérifier sa date d'expiration ?

Les certificats Let's Encrypt sont valides 90 jours. Vérifiez la date d'expiration avec sudo certbot certificates ou openssl s_client -servername votredomaine.com -connect votredomaine.com:443 2>/dev/null | openssl x509 -noout -dates. Certbot renouvelle automatiquement les certificats 30 jours avant expiration via le timer systemd ou cron.

Que faire si Certbot échoue avec l'erreur "Failed authorization procedure" ?

Cette erreur survient lorsque les serveurs Let's Encrypt ne peuvent pas valider la propriété du domaine. Vérifiez que : (1) le domaine pointe bien vers l'IP publique du serveur via dig votredomaine.com, (2) les ports 80 et 443 sont ouverts dans le firewall et accessibles depuis Internet, (3) Nginx écoute sur le port 80 pour le domaine concerné, (4) aucun proxy ou CDN ne bloque l'accès au chemin /.well-known/acme-challenge/. Testez manuellement l'accès HTTP avant de relancer Certbot.

Comment passer d'un certificat Let's Encrypt standard à un certificat wildcard sur Nginx ?

Supprimez d'abord le certificat existant avec sudo certbot delete --cert-name votredomaine.com, puis émettez un certificat wildcard via challenge DNS-01 : sudo certbot certonly --manual --preferred-challenges dns -d "*.votredomaine.com" -d votredomaine.com. Créez l'enregistrement TXT demandé dans votre zone DNS, validez, puis modifiez manuellement votre configuration Nginx pour pointer vers le nouveau certificat wildcard dans /etc/letsencrypt/live/votredomaine.com/. Rechargez Nginx avec sudo systemctl reload nginx.

Prêt à mettre en pratique ce que vous venez de lire ?

Découvrir nos offres

Articles liés

Prêt à vous lancer ?

à partir de 6,99 € HT/mois

Découvrir nos offres

Hébergements

Navigation