Comment sécuriser Nginx avec Let's Encrypt sur Debian 11

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une autorité de certification (CA) qui fournit un moyen facile d'obtenir et d'installer des certificats TLS/SSL gratuits, permettant ainsi le chiffrement HTTPS sur les serveurs Web. Il simplifie le processus en fournissant un client logiciel, Certbot, qui tente d'automatiser la plupart (sinon la totalité) des étapes requises. Actuellement, l'ensemble du processus d'obtention et d'installation d'un certificat est entièrement automatisé sur Apache et Nginx.

Dans ce didacticiel, vous utiliserez Certbot pour obtenir un certificat SSL gratuit pour Nginx sur Debian 11 et configurerez votre certificat pour qu'il se renouvelle automatiquement.

Ce didacticiel utilisera un fichier de configuration de serveur Nginx distinct au lieu du fichier par défaut. Nous recommandons de créer de nouveaux fichiers de bloc de serveur Nginx pour chaque domaine, car cela permet d'éviter les erreurs courantes et de conserver les fichiers par défaut comme configuration de secours.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Debian 11 configuré en suivant ce tutoriel configuration initiale du serveur pour Debian 11, y compris un utilisateur sudo non root et un pare-feu.
  • Un nom de domaine enregistré. Ce tutoriel utilisera example.com à travers. Vous pouvez acheter un nom de domaine auprès de Namecheap, en obtenir un gratuitement avec Freenom ou utiliser le registraire de domaine de votre choix.
  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Si vous utilisez DigitalOcean, veuillez consulter notre Documentation DNS pour plus de détails sur la façon de les ajouter.
    • Un record A avec example.com pointant vers l'adresse IP publique de votre serveur.
    • Un record A avec www.example.com pointant vers l'adresse IP publique de votre serveur.
  • Nginx installé en suivant Comment installer Nginx sur Debian 11. Assurez-vous d'avoir un bloc de serveur pour votre domaine. Ce tutoriel utilisera /etc/nginx/sites-available/example.com par exemple.

Étape 1 - Installation de Certbot

La première étape pour utiliser Let's Encrypt pour obtenir un certificat SSL est d'installer le logiciel Certbot sur votre serveur.

Installez Certbot et son plugin Nginx avec apt:

sudo apt install certbot python3-certbot-nginx

Certbot est maintenant prêt à être utilisé, mais pour qu'il configure automatiquement SSL pour Nginx, nous devons vérifier une partie de la configuration de Nginx.

Étape 2 - Confirmation de la configuration de Nginx

Certbot doit pouvoir trouver le bon server block dans votre configuration Nginx pour qu'il puisse configurer SSL automatiquement. Plus précisément, il le fait en recherchant un server_name qui correspond au domaine pour lequel vous demandez un certificat.

Si vous avez suivi l'étape de configuration du bloc de serveur dans le tutoriel d'installation de Nginx , vous devriez avoir un bloc de serveur pour votre domaine à /etc/nginx/sites-available/example.com avec le server_name directive déjà définie de manière appropriée.

Pour vérifier, ouvrez le fichier de configuration de votre domaine à l'aide de nano ou votre éditeur de texte préféré :

sudo nano /etc/nginx/sites-available/example.com

Retrouver l'existant server_name ligne. Ça devrait ressembler à ça:

/etc/nginx/sites-available/example.com

...
server_name example.com www.example.com;
...

Si c'est le cas, quittez votre éditeur et passez à l'étape suivante.

Si ce n'est pas le cas, mettez-le à jour pour qu'il corresponde. Enregistrez ensuite le fichier, quittez votre éditeur et vérifiez la syntaxe de vos modifications de configuration :

sudo nginx -t

Si vous obtenez une erreur, rouvrez le fichier de blocage du serveur et vérifiez s'il y a des fautes de frappe ou des caractères manquants. Une fois la syntaxe de votre fichier de configuration correcte, rechargez Nginx pour charger la nouvelle configuration :

sudo systemctl reload nginx

Certbot peut maintenant trouver le bon server bloquer et mettre à jour automatiquement.

Ensuite, mettons à jour le pare-feu pour autoriser le trafic HTTPS.

Étape 3 - Autoriser HTTPS via le pare-feu

Si vous avez le ufw pare-feu activé, comme recommandé par les guides de prérequis, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Heureusement, Nginx enregistre quelques profils avec ufw lors de l'installation.

Vous pouvez voir le paramètre actuel en tapant :

sudo ufw status

Cela ressemblera probablement à ceci, ce qui signifie que seul le trafic HTTP est autorisé vers le serveur Web :

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Pour laisser entrer en plus le trafic HTTPS, autorisez le profil complet Nginx et supprimez l'allocation de profil HTTP Nginx redondante :

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Votre statut devrait maintenant ressembler à ceci :

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Ensuite, exécutons Certbot et récupérons nos certificats.

Étape 4 — Obtention d'un certificat SSL

Certbot propose différentes manières d'obtenir des certificats SSL via des plugins. Le plugin Nginx se chargera de reconfigurer Nginx et de recharger la configuration chaque fois que nécessaire. Pour utiliser ce plugin, tapez ce qui suit :

sudo certbot --nginx -d example.com -d www.example.com

Cela fonctionne certbot avec le --nginx plug-in, utilisation -d pour spécifier les noms de domaine pour lesquels nous souhaitons que le certificat soit valide.

Si c'est la première fois que vous courez certbot, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation. Après avoir fait cela, certbot communiquera avec le serveur Let's Encrypt, puis lancera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

La configuration sera mise à jour et Nginx se rechargera pour récupérer les nouveaux paramètres. certbot se terminera par un message vous indiquant que le processus a réussi et où vos certificats sont stockés :

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2022-08-08. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Vos certificats sont téléchargés, installés et chargés. Essayez de recharger votre site Web en utilisant https:// et remarquez l'indicateur de sécurité de votre navigateur. Il doit indiquer que le site est correctement sécurisé, généralement avec une icône de verrouillage. Si vous testez votre serveur à l'aide du SSL Labs Server Test, il obtiendra une note A.

Terminons en testant le processus de renouvellement.

Étape 5 - Vérification du renouvellement automatique de Certbot

Les certificats de Let's Encrypt ne sont valables que pendant quatre-vingt-dix jours. Il s'agit d'encourager les utilisateurs à automatiser leur processus de renouvellement de certificat. La certbot Le package que nous avons installé s'en charge pour nous en ajoutant une minuterie systemd qui s'exécutera deux fois par jour et renouvellera automatiquement tout certificat dans les trente jours suivant son expiration.

Vous pouvez interroger l'état de la minuterie avec systemctl:

sudo systemctl status certbot.timer
Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2022-08-08 19:05:35 UTC; 11s ago
    Trigger: Tue 2022-08-09 07:22:51 UTC; 12h left
   Triggers: ● certbot.service

Pour tester le processus de renouvellement, vous pouvez faire un essai avec certbot:

sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Si nécessaire, Certbot renouvellera vos certificats et rechargera Nginx pour prendre en compte les modifications. Si le processus de renouvellement automatisé échoue, Let's Encrypt enverra un message à l'e-mail que vous avez spécifié, vous avertissant lorsque votre certificat est sur le point d'expirer.

Conclusion

Dans ce tutoriel, vous avez installé le client Let's Encrypt certbot, téléchargé des certificats SSL pour votre domaine, configuré Nginx pour utiliser ces certificats et configuré le renouvellement automatique des certificats. Si vous avez d'autres questions sur l'utilisation de Certbot, la documentation officielle est un bon point de départ.