Comment configurer un certificat SSL dans Nginx : un guide complet étape par étape
Sécuriser votre site web avec un certificat SSL/TLS n’est plus optionnel — c’est une exigence fondamentale pour la confiance des utilisateurs, la protection des données et le classement dans les moteurs de recherche. Google utilise explicitement HTTPS comme signal de classement depuis 2014, et les navigateurs modernes avertissent activement les visiteurs lorsqu’un site manque de chiffrement. Si vous utilisez Nginx comme serveur web, ce guide vous expliquera tout ce que vous devez savoir pour installer, configurer et automatiser la gestion des certificats SSL à l’aide de Certbot et Let’s Encrypt.
Que vous gériez un environnement VPS Hosting, un serveur dédié ou un plan d’hébergement partagé, un SSL correctement configuré est non négociable pour tout site web en production.
Qu’est-ce qu’un certificat SSL et pourquoi Nginx en a-t-il besoin ?
Un certificat SSL (Secure Sockets Layer) — plus précisément appelé aujourd’hui certificat TLS (Transport Layer Security) — établit une connexion chiffrée entre votre serveur web et le navigateur d’un visiteur. Ce chiffrement garantit que les données sensibles telles que les identifiants de connexion, les informations de paiement et les données personnelles ne peuvent pas être interceptées par des tiers malveillants.
Pour Nginx spécifiquement, la configuration SSL implique :
- Les fichiers de certificat : La chaîne de certificats publics émise par une Autorité de Certification (CA)
- La clé privée : Une clé générée cryptographiquement stockée de manière sécurisée sur votre serveur
- Les directives de bloc serveur : Les instructions de configuration Nginx qui lient le certificat à votre domaine
Sans SSL, votre site est servi via HTTP, ce qui signifie que tout le trafic est transmis en texte clair. Avec SSL correctement configuré, votre site utilise HTTPS — chiffré, authentifié et approuvé par les navigateurs et les moteurs de recherche.
> Conseil pro : Si vous évaluez des options d’hébergement, AlexHost propose des Certificats SSL pour les domaines de tous types, y compris les certificats Domain Validation (DV), Organization Validation (OV) et Extended Validation (EV).
Prérequis avant de commencer
Avant de plonger dans les étapes de configuration, assurez-vous que les conditions suivantes sont remplies :
- Un serveur web Nginx en cours d’exécution sur un système Linux (Ubuntu 20.04/22.04 ou Debian recommandé)
- Accès root ou sudo à votre serveur
- Un nom de domaine enregistré pointant vers l’adresse IP de votre serveur via des enregistrements DNS A — vous pouvez en enregistrer un via l’Enregistrement de Domaine
- Ports de pare-feu ouverts : Les ports TCP 80 (HTTP) et 443 (HTTPS) doivent être accessibles
- Un utilisateur non-root avec des privilèges sudo (bonne pratique pour la sécurité du serveur)
Vous pouvez vérifier que Nginx est en cours d’exécution avec :
sudo systemctl status nginxEt confirmer que votre domaine se résout correctement en utilisant :
dig yourdomain.com +shortÉtape 1 : Installer Certbot sur votre serveur
Certbot est le client officiel open-source pour Let’s Encrypt — une Autorité de Certification gratuite, automatisée et largement approuvée. Il gère l’ensemble du processus d’émission de certificats, y compris la validation du domaine et les mises à jour de la configuration Nginx.
Mettre à jour votre index de paquets
Commencez toujours par actualiser vos listes de paquets pour vous assurer d’installer les dernières versions disponibles :
sudo apt update && sudo apt upgrade -yInstaller Certbot et le plugin Nginx
Le plugin python3-certbot-nginx permet à Certbot de lire et modifier directement vos fichiers de configuration Nginx, automatisant une grande partie du processus de configuration :
sudo apt install certbot python3-certbot-nginx -yVérifier l’installation
Confirmez que Certbot a été installé avec succès en vérifiant sa version :
certbot --versionVous devriez voir une sortie similaire à certbot 2.x.x.
Étape 2 : Autoriser le trafic HTTPS à travers votre pare-feu
Si vous utilisez UFW (Uncomplicated Firewall), vous devez explicitement autoriser le trafic HTTPS avant de continuer :
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw statusLe profil Nginx Full autorise à la fois HTTP (port 80) et HTTPS (port 443). Supprimer la règle HTTP autonome garantit qu’une fois SSL configuré, vous ne laissez pas de ports inutiles ouverts sans raison.
Étape 3 : Obtenir votre certificat SSL depuis Let’s Encrypt
Avec Certbot installé et votre pare-feu configuré, vous pouvez maintenant demander un certificat. L’indicateur --nginx indique à Certbot d’utiliser le plugin Nginx, qui gère automatiquement la vérification du défi ACME et met à jour la configuration de votre serveur.
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.comQue se passe-t-il pendant ce processus ?
- Vérification de la propriété du domaine : Certbot modifie temporairement votre configuration Nginx pour servir un fichier de défi, prouvant à Let’s Encrypt que vous contrôlez le domaine
- Émission du certificat : Let’s Encrypt émet un certificat signé valable 90 jours
- Configuration automatique de Nginx : Certbot met à jour votre bloc serveur Nginx pour utiliser les nouveaux fichiers de certificat
Invites interactives
Pendant le processus, Certbot vous demandera :
- Une adresse e-mail pour les avis urgents de renouvellement et de sécurité
- L’acceptation des Conditions d’utilisation
- Si vous souhaitez rediriger HTTP vers HTTPS — choisissez toujours l’option 2 (Redirection) pour imposer HTTPS sur l’ensemble du site
Vos certificats seront stockés dans :
/etc/letsencrypt/live/yourdomain.com/Les fichiers clés sont :
| Fichier | Rôle |
|---|---|
fullchain.pem | Votre certificat + chaîne intermédiaire |
privkey.pem | Votre clé privée (gardez-la secrète) |
cert.pem | Votre certificat de domaine uniquement |
chain.pem | Certificats intermédiaires uniquement |
Étape 4 : Configurer manuellement Nginx pour SSL (Avancé)
Bien que Certbot automatise la majeure partie de la configuration, comprendre la configuration manuelle vous donne un contrôle total sur votre implémentation SSL — essentiel pour l’optimisation des performances, le renforcement de la sécurité et les déploiements personnalisés.
Ouvrir la configuration de votre bloc serveur Nginx
sudo nano /etc/nginx/sites-available/yourdomain.comSi vous utilisez le fichier de configuration par défaut :
sudo nano /etc/nginx/sites-available/defaultConfiguration complète du bloc serveur SSL
Remplacez ou mettez à jour votre configuration avec l’exemple renforcé suivant :
# Redirect all HTTP traffic to HTTPS
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
# HTTPS server block
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL Certificate Paths
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# Recommended SSL parameters
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
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:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Security Headers
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
# Document root and index
root /var/www/yourdomain.com/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}Explication des directives de configuration clés
ssl_protocols TLSv1.2 TLSv1.3: Désactive les protocoles plus anciens et vulnérables (SSLv3, TLS 1.0, TLS 1.1)ssl_ciphers: Spécifie une suite de chiffrement robuste privilégiant la confidentialité persistantessl_stapling on: Active l’agrafage OCSP, réduisant la latence de la poignée de main SSLStrict-Transport-Security: Indique aux navigateurs de toujours utiliser HTTPS pour votre domaine (HSTS)http2: Active HTTP/2 pour de meilleures performances sur les connexions HTTPS
Étape 5 : Tester votre configuration Nginx
Avant de redémarrer Nginx, validez toujours la syntaxe de votre configuration pour détecter les erreurs qui pourraient mettre votre site hors ligne :
sudo nginx -tUn test réussi retourne :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSi vous rencontrez des erreurs, examinez attentivement la sortie — Nginx indiquera le fichier et le numéro de ligne où le problème existe.
Étape 6 : Redémarrer Nginx pour appliquer les modifications
Une fois le test de configuration réussi, rechargez ou redémarrez Nginx :
# Graceful reload (preferred for production — no downtime)
sudo systemctl reload nginx
# Full restart (use if reload doesn't apply all changes)
sudo systemctl restart nginxVérifiez que Nginx fonctionne correctement après le redémarrage :
sudo systemctl status nginxÉtape 7 : Configurer le renouvellement automatique des certificats SSL
Les certificats Let’s Encrypt expirent après 90 jours. Cette courte période de validité est intentionnelle — elle limite les dommages causés par des certificats compromis et encourage l’automatisation. Certbot installe automatiquement un minuteur systemd (ou une tâche cron) pour gérer les renouvellements, mais vous devriez le vérifier et le tester.
Vérifier le minuteur de renouvellement existant
sudo systemctl status certbot.timerVous devriez voir que le minuteur est actif et planifié pour s’exécuter deux fois par jour.
Tester le processus de renouvellement
Simulez un renouvellement sans réellement modifier les certificats :
sudo certbot renew --dry-runUne sortie réussie inclura :
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)Ajouter un hook post-renouvellement pour recharger Nginx
Certbot ne rechargera pas automatiquement Nginx après le renouvellement des certificats, sauf si vous configurez un hook de déploiement. Créez-en un avec :
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.shCela garantit que Nginx charge les nouveaux fichiers de certificat immédiatement après chaque renouvellement réussi.
Étape 8 : Vérifier votre installation SSL
Après avoir terminé la configuration, vérifiez votre configuration SSL en utilisant ces méthodes :
Vérification par navigateur
Naviguez vers https://yourdomain.com dans votre navigateur. Vous devriez voir une icône de cadenas dans la barre d’adresse indiquant une connexion sécurisée.
Outils de test SSL en ligne
Utilisez ces outils gratuits pour auditer la qualité de votre configuration SSL :
- SSL Labs (Qualys) :
https://www.ssllabs.com/ssltest/— Fournit une note alphabétique (visez A ou A+) - Security Headers :
https://securityheaders.com/— Audite vos en-têtes de sécurité HTTP - HSTS Preload :
https://hstspreload.org/— Vérifie l’éligibilité au préchargement HSTS
Vérification en ligne de commande
# Check certificate details
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
# Check certificate expiry date
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -datesRésolution des problèmes SSL courants dans Nginx
| Problème | Cause probable | Solution |
|---|---|---|
ERR_SSL_PROTOCOL_ERROR | Nginx n’écoute pas sur le port 443 | Vérifiez la directive listen 443 ssl; et les règles du pare-feu |
NET::ERR_CERT_AUTHORITY_INVALID | Utilisation de cert.pem au lieu de fullchain.pem | Mettez à jour ssl_certificate pour utiliser fullchain.pem |
| Certificat non renouvelé | Minuteur Certbot désactivé ou port 80 bloqué | Exécutez sudo certbot renew --dry-run et vérifiez les journaux |
| Avertissements de contenu mixte | Ressources HTTP chargées sur une page HTTPS | Mettez à jour tous les liens internes et les URL des ressources en HTTPS |
SSL_ERROR_RX_RECORD_TOO_LONG | Trafic HTTP atteignant le port HTTPS | Assurez-vous que la redirection du port 80 vers le port 443 est configurée |
Choisir le bon environnement d’hébergement pour SSL
Les performances et la fiabilité de votre implémentation SSL dépendent fortement de votre environnement d’hébergement. Voici un aperçu rapide :
- VPS Hosting : L’accès root complet vous donne un contrôle total sur la configuration Nginx, les paramètres SSL et la gestion des certificats — idéal pour ce guide
- Serveurs Dédiés : Performances maximales et isolation pour les sites à fort trafic nécessitant des configurations SSL de niveau entreprise
- Hébergement Web Partagé : SSL est généralement géré via un panneau de contrôle ; la configuration manuelle de Certbot peut ne pas être disponible
- VPS avec cPanel : Simplifie la gestion SSL via une interface graphique tout en conservant le contrôle au niveau VPS
Pour les développeurs et les administrateurs système qui ont besoin d’un contrôle total sur leur pile SSL, un VPS ou un serveur dédié est le choix recommandé.
Conclusion
La configuration de SSL dans Nginx est un processus en plusieurs étapes, mais chaque étape remplit un rôle essentiel — du chiffrement du trafic et de la vérification de la propriété du domaine au renforcement de votre configuration de chiffrement et à l’automatisation des renouvellements. En suivant ce guide, vous avez mis en œuvre :
✅ Un certificat SSL gratuit et approuvé via Let’s Encrypt et Certbot
✅ Une configuration SSL Nginx renforcée avec des protocoles TLS modernes
✅ La redirection HTTP vers HTTPS pour tout le trafic
✅ L’agrafage OCSP pour de meilleures performances de poignée de main
✅ HSTS et en-têtes de sécurité pour une défense en profondeur
✅ Le renouvellement automatique des certificats avec des hooks de rechargement Nginx
Un certificat SSL correctement configuré ne protège pas seulement vos utilisateurs — il renforce la confiance, améliore votre classement SEO et constitue une exigence de base pour toute présence web professionnelle. Si vous recherchez une infrastructure fiable pour héberger votre serveur Nginx sécurisé par SSL, explorez les plans VPS Hosting d’AlexHost, conçus spécifiquement pour les développeurs et les entreprises qui prennent la sécurité au sérieux.
