15%

É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
30.10.2024

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 nginx

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

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

Vérifier l’installation

Confirmez que Certbot a été installé avec succès en vérifiant sa version :

certbot --version

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

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

Que se passe-t-il pendant ce processus ?

  1. 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
  2. Émission du certificat : Let’s Encrypt émet un certificat signé valable 90 jours
  3. 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 :

FichierRôle
fullchain.pemVotre certificat + chaîne intermédiaire
privkey.pemVotre clé privée (gardez-la secrète)
cert.pemVotre certificat de domaine uniquement
chain.pemCertificats 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.com

Si vous utilisez le fichier de configuration par défaut :

sudo nano /etc/nginx/sites-available/default

Configuration 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é persistante
  • ssl_stapling on : Active l’agrafage OCSP, réduisant la latence de la poignée de main SSL
  • Strict-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 -t

Un test réussi retourne :

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

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

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

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

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

Cela 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 -dates

Résolution des problèmes SSL courants dans Nginx

ProblèmeCause probableSolution
ERR_SSL_PROTOCOL_ERRORNginx n’écoute pas sur le port 443Vérifiez la directive listen 443 ssl; et les règles du pare-feu
NET::ERR_CERT_AUTHORITY_INVALIDUtilisation de cert.pem au lieu de fullchain.pemMettez à 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 mixteRessources HTTP chargées sur une page HTTPSMettez à jour tous les liens internes et les URL des ressources en HTTPS
SSL_ERROR_RX_RECORD_TOO_LONGTrafic HTTP atteignant le port HTTPSAssurez-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.

15%

É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