Sécurité SSL · 10 min read · Nov 17, 2025
Installer Let's Encrypt et sécuriser Nginx avec SSL/TLS sur Debian 9
Ce tutoriel vous montrera comment installer et sécuriser un serveur web Nginx sur Debian 9 avec un certificat TLS délivré gratuitement par l’autorité de certification Let’s Encrypt. De plus, nous configurerons le renouvellement automatique des certificats TLS de Let’s Encrypt à l’aide d’un cron job avant l’expiration des certificats.
TLS, également connu sous le nom de Transport Layer Security, est un protocole réseau qui utilise des certificats SSL pour chiffrer le trafic réseau qui circule entre un serveur et un client, ou entre un serveur web, tel que le serveur Nginx, et un navigateur. Toutes les données échangées entre ces deux entités sont sécurisées et la connexion ne peut pas être décryptée même si elle est interceptée à l’aide d’une technique telle qu’une attaque de l’homme du milieu ou une écoute de paquets. Le logiciel certbot est l’utilitaire client officiel fourni par Let’s Encrypt CA qui peut être utilisé dans le processus de génération et de téléchargement de certificats Let’s Encrypt gratuits sur Debian.
Exigences
- Installer la pile LEMP sur Debian 9.
- Un nom de domaine public enregistré avec des enregistrements DNS appropriés (enregistrements A ou enregistrements CNAME pour les sous-domaines).
- Accès direct à la console du serveur ou accès SSH à distance au serveur.
- Un compte utilisateur avec des privilèges root ou un accès direct au compte root.
Installer l’utilitaire client Certbot
Pour installer l’utilitaire client certbot de Let’s Encrypt sur Debian 9 à partir des dépôts officiels de Debian, ouvrez un terminal et exécutez la commande suivante avec des privilèges root, comme illustré dans la capture d’écran suivante.
apt-get install certbot
L’utilitaire apt de Debian, qui est l’interface en ligne de commande du gestionnaire de paquets principal de Debian, vous demandera, après quelques vérifications préliminaires, si vous acceptez de continuer l’installation du paquet certbot et de toutes ses dépendances requises. Pour accepter le processus d’installation du logiciel, répondez par oui (y) dans l’invite de la console du serveur.
Obtenir un certificat Let’s Encrypt
Pour générer et télécharger des certificats Let’s Encrypt pour un domaine, assurez-vous d’abord que le serveur web Nginx est en cours d’exécution et qu’au moins le port 80 est accessible depuis Internet. Pour vérifier si Nginx fonctionne, exécutez les commandes suivantes avec des privilèges root.
sudo systemctl status nginxSi le serveur n’est pas déjà en cours d’exécution, démarrez le démon Nginx avec la commande ci-dessous.
sudo systemctl start nginxDans le cas où vous avez un pare-feu commun installé sur Debian, tel que le pare-feu UFW, qui bloque toutes les connexions entrantes sur les ports 80 et 443, exécutez les commandes ci-dessous pour ouvrir les ports HTTP et HTTPS dans le système.
sudo ufw allow 80/tcpsudo ufw allow 443/tcpPour obtenir des certificats pour votre domaine, exécutez la commande certbot dans la console avec les paramètres et les indicateurs suivants comme expliqué ci-dessous. Exécutez la commande avec des privilèges root et fournissez votre nom de domaine ainsi que tous les autres sous-domaines pour lesquels vous souhaitez obtenir des certificats en utilisant l’indicateur –d. Fournissez également l’option –standalone afin que certbot n’interfère pas avec les fichiers de configuration de Nginx. Le serveur Nginx doit être arrêté lors de l’émission des certificats en utilisant cette option.
La syntaxe de la commande certbot :
sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.comLorsque vous exécutez la commande certbot pour la première fois et obtenez le certificat, vous serez invité à ajouter votre adresse e-mail et à accepter les conditions de service de Let’s Encrypt. Écrivez ‘a‘ pour accepter les conditions de service et ‘non‘ pour ne pas partager votre adresse e-mail avec les partenaires de Let’s Encrypt. Enfin, après avoir obtenu le certificat pour votre domaine, lisez les notes de bas de page pour localiser le chemin système des certificats et la date à laquelle ils expireront.
Méthode alternative pour obtenir un certificat SSL Let’s Encrypt
Pour obtenir un certificat Let’s Encrypt via le plugin “webroot“, utilisez la syntaxe ci-dessous. Ajoutez le répertoire racine web de Nginx, qui se trouve par défaut dans le chemin système /var/www/html/, lors de l’émission de la commande certbot avec les indicateurs –webroot et –w. Assurez-vous également que Nginx a des permissions d’écriture complètes sur le répertoire racine web afin de créer le répertoire /.well-known.
L’option –webroot pour certbot vous demandera également d’ajouter votre adresse e-mail pour le renouvellement des certificats et les avis de sécurité. Le client Certbot a un code intégré qui peut détecter une adresse e-mail fausse. Vous devez fournir une adresse e-mail accessible au public afin de continuer à obtenir un certificat.
certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com*Enregistrement du journal de débogage dans /var/log/letsencrypt/letsencrypt.log**Entrez l'adresse e-mail (utilisée pour les renouvellements urgents et les avis de sécurité) (Entrez 'c' pour**annuler):[email protected] #Une adresse e-mail fausse sera détectée**Il semble y avoir des problèmes avec cette adresse**. Entrez l'adresse e-mail (utilisée pour**les renouvellements urgents et les avis de sécurité) Si vous souhaitez vraiment passer cette étape, vous pouvez**exécuter le client avec --register-unsafely-without-email mais assurez-vous de sauvegarder votre**clé de compte depuis /etc/letsencrypt/accounts (Entrez 'c' pour annuler):[email protected]** **-------------------------------------------------------------------------------**Veuillez lire les conditions de service à**https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Vous devez accepter**afin de vous inscrire auprès du serveur ACME à**https://acme-v01.api.letsencrypt.org/directory**-------------------------------------------------------------------------------**(A)ccepter/(C)annuler: a** **-------------------------------------------------------------------------------**Seriez-vous disposé à partager votre adresse e-mail avec la Electronic Frontier**Foundation, un partenaire fondateur du projet Let's Encrypt et l'organisation à but non lucratif**qui développe Certbot ? Nous aimerions vous envoyer un e-mail sur l'EFF et**notre travail pour chiffrer le web, protéger ses utilisateurs et défendre les droits numériques.**-------------------------------------------------------------------------------**(O)ui/(N)on: n**Obtention d'un nouveau certificat**Effectuer les défis suivants :**http-01 challenge pour www.domain.com**Utilisation du chemin racine web /var/www/html/ pour tous les domaines non appariés.**Attente de vérification...**Nettoyage des défis** **NOTES IMPORTANTES :** - Félicitations ! Votre certificat et votre chaîne ont été enregistrés à** /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Votre** certificat expirera le 2017-12-28. Pour obtenir une nouvelle version ou une version modifiée** de ce certificat à l'avenir, exécutez simplement à nouveau certbot. Pour** renouveler *tous* vos certificats de manière non interactive, exécutez "certbot** renew"** - Vos informations d'identification de compte ont été enregistrées dans votre Certbot** répertoire de configuration à /etc/letsencrypt. Vous devriez** faire une sauvegarde sécurisée de ce dossier maintenant. Ce répertoire de configuration** contiendra également des certificats et des clés privées obtenus** par Certbot, donc faire des sauvegardes régulières de ce dossier est idéal.** - Si vous aimez Certbot, veuillez envisager de soutenir notre travail en :** ** Faisant un don à ISRG / Let's Encrypt : https://letsencrypt.org/donate** Faisant un don à EFF : **https://eff.org/donate-le*
Configurer Nginx pour TLS (SSL)
Un fichier de configuration TLS complet par défaut de Nginx pour un domaine devrait ressembler à l’extrait de fichier ci-dessous.
/etc/nginx/sites-enabled/default-ssl exemple de fichier :
* server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name www.yourdomain.com yourdomain.com;
#server_name _;
root /var/www/html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#Certificats SSL
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}
set $cache_uri $request_uri;
location ~ /.well-known {
allow all;
}
#
# # Avec php-fpm (ou d'autres sockets unix) :
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # Avec php-cgi (ou d'autres sockets tcp) :
# fastcgi_pass 127.0.0.1:9000;
}
# refuser l'accès aux fichiers .htaccess, si le document racine d'Apache
# coïncide avec celui de nginx
#
#location ~ \.ht {
# deny all;
#}
** }*Les lignes de code pour le traitement des scripts PHP via le gestionnaire de processus FastCGI peuvent également être trouvées dans cet extrait et sont représentées par les lignes suivantes.
*location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
*Installer les certificats Let’s Encrypt dans Nginx
Les certificats et clés Let’s Encrypt sont stockés dans le répertoire /etc/letsencrypt/live/www.yourdomain.com/ sur Debian. La commande ls contre le répertoire ci-dessus révélera tous les composants du certificat, tels que le fichier de chaîne, le fichier fullchain, la clé privée et le fichier de certificat.
ls /etc/letsencrypt/live/www.yourdomain.com/Pour installer le certificat Let’s Encrypt dans le fichier de configuration TLS du serveur web Nginx, ouvrez le fichier default-ssl de Nginx et mettez à jour les lignes ci-dessous pour refléter les chemins des fichiers de certificat Let’s Encrypt pour votre domaine, comme indiqué dans l’extrait ci-dessous.
nano /etc/nginx/sites-enabled/default-sslChangez les lignes suivantes comme ci-dessous :
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";**
De plus, si l’instruction ssl_dhparam est présente dans la configuration SSL de Nginx, vous devez générer une nouvelle clé Diffie–Hellman de 2048 bits en exécutant la commande suivante. La génération des paramètres de clé Diffie–Hellman peut prendre un certain temps en fonction de votre randomité ou de votre entropie système.
openssl dhparam –out /etc/nginx/dhparam.pem 2048Enfin, avant d’activer la configuration TLS de Nginx en redémarrant le démon Nginx pour refléter les changements, vérifiez d’abord les configurations de Nginx pour d’éventuelles erreurs de syntaxe. Ensuite, si le test du fichier de configuration de Nginx est réussi, redémarrez le démon Nginx pour charger la nouvelle configuration avec les certificats Let’s Encrypt, en exécutant les commandes ci-dessous.
nginx -tservice nginx restartPour vérifier si le service nginx possède un socket ouvert en état d’écoute sur le port 443, exécutez la commande netstat comme indiqué dans l’extrait ci-dessous.
netstat –tulpn | grep -e 443 -e LISTENVous devriez également ouvrir un navigateur et naviguer vers votre nom de domaine via le protocole HTTPS. Si les certificats Let’s Encrypt sont appliqués avec succès dans Nginx, la poignée de main SSL devrait fonctionner sans générer d’erreurs.
Forcer le trafic web vers HTTPS
Pour forcer vos visiteurs de domaine à naviguer sur votre site web uniquement via le protocole HTTPS, ouvrez le fichier de configuration par défaut des sites activés de Nginx et ajoutez la ligne suivante, qui force toutes les requêtes qui atteignent le port 80 à être redirigées avec un code d’état 301 (déplacé de façon permanente) vers le port 443.
nano /etc/nginx/sites-enabled/defaultL’instruction de redirection devrait ressembler à ce qui est présenté dans l’extrait ci-dessous.
*server_name www.yourdomain.com yourdomain.com;
**return 301 https://$server_name$request_uri;*
Ensuite, redémarrez le démon Nginx pour appliquer le changement, en exécutant la commande ci-dessous.
service nginx restartVérifications finales
Pour examiner davantage les certificats générés par Let’s Encrypt CA, vous pouvez utiliser un navigateur web moderne, tel que Chrome. Visitez votre domaine depuis le navigateur Chrome et appuyez sur la touche F12 pour ouvrir les outils de développement. Naviguez vers l’onglet Sécurité et cliquez sur le bouton Afficher le certificat afin d’ouvrir le certificat, comme le montrent les captures d’écran suivantes.
Un autre utilitaire utile pour examiner les certificats SSL est l’utilitaire en ligne de commande openssl. Pour afficher des informations supplémentaires sur un certificat CA Let’s Encrypt, exécutez la commande ci-dessous dans une console Linux.
openssl s_client –connect www.yourdomain.com:443
Renouveler automatiquement le certificat Let’s Encrypt
Pour renouveler automatiquement un certificat délivré par Let’s Encrypt CA avant la date d’expiration, planifiez un job cron pour s’exécuter une fois par jour à 2h00, en exécutant la commande suivante. La sortie du job cron exécuté sera dirigée vers un fichier journal, stocké dans /var/log/letsencrypt.log
crontab –eJob cron pour renouveler le certificat.
**0 2 * * *** certbot renew >> /var/log/letsencrypt.logC’est tout ! Pour d’autres configurations plus avancées concernant les certificats et l’utilitaire Let’s Encrypt, consultez la documentation officielle à l’adresse suivante https://certbot.eff.org/docs/.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.