Recherche de site Web

Comment sécuriser Nginx avec Let's Encrypt sur Ubuntu et Debian


Suite au précédent didacticiel Let's Encrypt concernant Apache SSL, dans cet article, nous verrons comment générer et installer un certificat SSL/TLS gratuit émis par Let's Encrypt CA. pour le serveur Web Nginx sur Ubuntu ou Debian.

Lire aussi
  1. Sécurisez Apache avec Let's Encrypt gratuit sur Ubuntu et Debian
  2. Installez Let's Encrypt SSL pour sécuriser Apache sur RHEL et CentOS
Exemple d’environnement de test

Exigences

  1. Un domaine enregistré avec des enregistrements DNS A valides pour pointer vers l'adresse IP de votre serveur.
  2. Un serveur Web Nginx installé avec SSL et Vhost activés, au cas où vous envisagez d'héberger plusieurs domaines ou sous-domaines.

Étape 1 : Installation du serveur Web Nginx

1. Lors de la première étape, installez le serveur Web Nginx, s'il n'est pas déjà installé, en exécutant la commande ci-dessous :

sudo apt-get install nginx

Étape 2 : Générer un certificat SSL Let's Encrypt pour Nginx

2. Avant de générer un certificat SSL/TLS gratuit, installez le logiciel Let's Encrypt dans la hiérarchie du système de fichiers /usr/local/ à l'aide de git en exécutant les commandes ci-dessous :

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Bien que la procédure d'obtention d'un certificat pour Nginx soit automatisée, vous pouvez toujours créer et installer manuellement un certificat SSL gratuit pour Nginx à l'aide du plugin Let's Encrypt Standalone.

Cette méthode nécessite que le port 80 ne soit pas utilisé sur votre système pendant une courte période pendant que le client Let's Encrypt valide l'identité du serveur avant de générer le certificat.

Si vous exécutez déjà Nginx, arrêtez le service en exécutant la commande suivante.


sudo service nginx stop
OR
sudo systemctl stop nginx

Si vous exécutez un autre service lié au port 80, arrêtez également ce service.

4. Confirmez que le port 80 est libre en exécutant la commande netstat :

sudo netstat -tlpn | grep 80

5. Il est maintenant temps d'exécuter letsencrypt afin d'obtenir un certificat SSL. Accédez au répertoire d'installation de Let's Encrypt trouvé dans le chemin système /usr/local/letsencrypt et exécutez la commande letsencrypt-auto en fournissant le --standalone et indicateur -d pour chaque domaine ou sous-domaine pour lequel vous souhaitez générer un certificat.

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. Saisissez l'adresse e-mail qui sera utilisée par Let's Encrypt pour la récupération de clé perdue ou les notifications urgentes.

7. Acceptez les termes de la licence en appuyant sur la touche Entrée.

8. Enfin, si tout s'est bien passé, un message similaire à la capture d'écran ci-dessous devrait apparaître sur la console de votre terminal.

Étape 3 : Installez le certificat SSL Let's Encrypt dans Nginx

9. Maintenant que votre certificat SSL a été généré, il est temps de configurer le serveur Web Nginx pour l'utiliser. Les nouveaux certificats SSL sont placés dans /etc/letsencrypt/live/ sous un répertoire nommé d'après votre nom de domaine. Exécutez la commande ls pour répertorier les fichiers de certificat émis pour votre domaine.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. Ensuite, ouvrez le fichier /etc/nginx/sites-available/default avec un éditeur de texte et ajoutez le bloc suivant après la première ligne commentée qui spécifie le début du Blocage SSL. Utilisez la capture d'écran ci-dessous comme guide.

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

Extrait du bloc Nginx :

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

Remplacez les valeurs de nom de domaine pour les certificats SSL en conséquence.

11. À l'étape suivante, générez un chiffrement Diffie-Hellman fort dans le répertoire /etc/nginx/ssl/ afin de protéger votre serveur contre l'attaque Logjam en exécutant les commandes suivantes.

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048

12. Enfin, redémarrez le démon Nginx pour refléter les modifications.

sudo systemctl restart nginx

et testez votre certificat SSL en visitant l'URL ci-dessous.

https://www.ssllabs.com/ssltest/analyze.html

Étape 4 : Renouvellement automatique : Chiffrons les certificats Nginx

13. Les certificats émis par Let’s Encrypt CA sont valables 90 jours. Afin de renouveler automatiquement les fichiers avant la date d'expiration, créez le script bash ssl-renew.sh dans le répertoire /usr/local/bin/ avec le contenu suivant.

sudo nano /usr/local/bin/ssl-renew.sh

Ajoutez le contenu suivant au fichier ssl-renew.sh.

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

Remplacez la variable --webroot-path pour qu'elle corresponde à la racine de votre document Nginx. Assurez-vous que le script est exécutable en exécutant la commande suivante.

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. Enfin, ajoutez une tâche cron pour exécuter le script tous les deux mois à minuit afin de garantir que votre certificat sera mis à jour environ 30 jours avant son expiration.

sudo crontab -e

Ajoutez la ligne suivante au bas du fichier.

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

C'est ça! Votre serveur Nginx diffuse désormais du contenu SSL à l'aide d'un certificat gratuit Let's Encrypt SSL.