Dans cet article, nous aurons expliqué les étapes nécessaires pour sécuriser Nginx avec let's encrypt sur Ubuntu 20.04 LTS. Avant de poursuivre ce tutoriel, assurez-vous d'être connecté en tant qu'utilisateur avec sudo
privilèges. Toutes les commandes de ce didacticiel doivent être exécutées en tant qu'utilisateur non root.
Let's Encrypt est une autorité de certification gratuite, automatisée et ouverte développée par l'Internet Security Research Group (ISRG) qui fournit des certificats SSL gratuits. Let's Encrypt utilise un logiciel client (certbot) qui automatise le processus de création, de validation, de signature, de mise en œuvre et de renouvellement des certificats.
Prérequis :
- Système d'exploitation avec Ubuntu 20.04
- Adresse IPv4 du serveur avec privilèges de superutilisateur (accès racine)
- Terminal Gnome pour Linux Desktop
- Client SSH PuTTy pour Windows ou macOS
- Powershell pour Windows 10/11
- Familier avec les commandes APT
Sécuriser Nginx avec Let's Encrypt sur Ubuntu 20.04
Étape 1. Tout d'abord, avant de commencer à installer un package sur votre serveur Ubuntu, nous vous recommandons de toujours vous assurer que tous les packages système sont mis à jour.
sudo apt update sudo apt upgrade
Remarque :avant l'installation, le domaine Let's Encrypt SSL doit être bien accessible et utiliser l'hôte virtuel Nginx. Lisez le tutoriel sur la façon d'installer Nginx sur Ubuntu.
Étape 2. Installez Certbot.
Certbot est un outil complet et facile à utiliser qui automatise les tâches d'obtention et de renouvellement des certificats SSL Let's Encrypt et de configuration des serveurs Web pour utiliser les certificats . Pour l'installer, exécutez les commandes suivantes :
sudo apt install certbot
Après cela, générez un nouvel ensemble de paramètres DH 2048 bits en tapant la commande suivante :
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Le serveur Let's Encrypt envoie des requêtes HTTP au fichier temporaire pour vérifier que le domaine demandé correspond au serveur sur lequel le certbot s'exécute. Pour simplifier, nous allons mapper toutes les requêtes HTTP pour .well-known/acme-challenge
à un seul répertoire, /var/lib/letsencrypt
:
sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp www-data /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt
Ensuite, créez les deux extraits suivants qui seront inclus dans tous les fichiers de bloc du serveur Nginx :
sudo nano /etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
Ensuite, créez le deuxième extrait, ssl.conf:
sudo nano /etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;
Ensuite, ouvrez le fichier de blocage du serveur de domaine et incluez le letsencrypt.conf:
sudo nano /etc/nginx/sites-available/example.com.conf
server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }
N'oubliez pas de créer un lien symbolique du fichier vers le répertoire sites-enabled :
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/ sudo systemctl restart nginx
Une fois cela fait, exécutez Certbot avec le plugin webroot et obtenez les fichiers de certificat SSL en émettant :
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Enfin, étapes, modifiez votre bloc de serveur de domaine comme suit :
sudo nano /etc/nginx/sites-available/example.com.conf
server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; }
Rechargez le service Nginx pour que les modifications prennent effet :
sudo systemctl reload nginx
Étape 3. Vérification de l'état de votre certificat.
Vous pouvez vous assurer que Certbot a correctement créé votre certificat SSL en utilisant le SSL Server Test de la société de sécurité cloud Qualys. Ouvrez le lien suivant dans votre navigateur Web préféré, en remplaçant your-domain.com
avec votre domaine de base :
https://www.ssllabs.com/ssltest/analyze.html?d=your-domain.com
Étape 4. Renouveler le certificat SSL Let's Encrypt
Et enfin, testez le renouvellement automatique :
sudo certbot renew --dry-run
C'est tout ce que vous avez à faire pour installer SSL Let's Encrypt with Nginx sur Ubuntu 20.04 Focal Fossa. J'espère que vous trouverez cette astuce rapide utile. Si vous avez des questions ou des suggestions, n'hésitez pas à laisser un commentaire ci-dessous.