Tutorial

Comment sécuriser Nginx avec Let's Encrypt sur Ubuntu 20.04

Published on June 11, 2020
Français
Comment sécuriser Nginx avec Let's Encrypt sur Ubuntu 20.04

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 cryptage HTTPS sur les serveurs web. Il simplifie le processus en fournissant un logiciel client, 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 tutoriel, vous allez utiliser Certbot pour obtenir un certificat SSL gratuit pour Nginx sur Ubuntu 20.04 et configurer votre certificat pour qu’il se renouvelle automatiquement.

Ce tutoriel utilisera un fichier de configuration de serveur Nginx séparé au lieu du fichier par défaut. Nous recommandons de créer de nouveaux fichiers de blocage 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 repli.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 20.04 configuré en suivant ce tutoriel de configuration initiale du serveur pour Ubuntu 20.04, comprenant un utilisateur sudo non root et un pare-feu.

  • Un nom de domaine enregistré. Ce tutoriel utilisera example.com tout du long. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement avec Freenom, ou utiliser le bureau d’enregistrement de domaine de votre choix.

  • Les deux enregistrements DNS suivants ont été 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 enregistrement A avec example.com​​​ pointant sur l’adresse IP publique de votre serveur.
    • Un enregistrement A avec www.example.com​​​ pointant sur l’adresse IP publique de votre serveur.
  • Nginx installé en suivant le guide Comment installer Nginx sur Ubuntu 20.04. Assurez-vous que vous disposez d’un bloc serveur pour votre domaine. Ce tutoriel utilisera /etc/nginx/sites-available/example.com à titre d’exemple.

Étape 1 — Installation de Certbot

La première étape de l’utilisation de Let’s Encrypt pour obtenir un certificat SSL consiste à installer le logiciel Certbot sur votre serveur.

Installez Certbot et son plugin Nginx avec apt :

  1. sudo apt install certbot python3-certbot-nginx

Certbot est maintenant prêt à l’emploi, mais pour qu’il configure automatiquement le SSL pour Nginx, nous devons vérifier une partie de la configuration de Nginx.

Étape 2 — Confirmation de la configuration de Nginx

Certbot doit être capable de trouver le bon bloc serveur dans votre configuration Nginx pour pouvoir configurer automatiquement le SSL. Plus précisément, il recherche une directive server_name qui correspond au domaine pour lequel vous demandez un certificat.

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

Pour vérifier, ouvrez le fichier de configuration de votre domaine en utilisant nano ou votre éditeur de texte préféré :

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

Recherchez la ligne server_name existante. Cela devrait ressembler à ceci :

/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. Ensuite, enregistrez le fichier, quittez votre éditeur et vérifiez la syntaxe de vos modifications de configuration :

  1. sudo nginx -t

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

  1. sudo systemctl reload nginx

Certbot peut maintenant trouver le bon bloc serveur et le mettre à jour automatiquement.

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

Étape 3 — Autorisation du HTTPS à travers le pare-feu

Si vous avez activé le pare-feu UFW, comme le recommandent les guides des conditions préalables, 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 les paramètres actuels en tapant :

  1. sudo ufw status

Il ressemblera probablement à ceci, ce qui signifie que seul le trafic HTTP est autorisé sur le serveur web :

Output
Status: 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 Nginx Full et supprimez l’autorisation de profil HTTP Nginx redondant :

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

Votre statut devrait désormais ressembler à ceci :

  1. sudo ufw status
Output
Status: 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érents moyens d’obtenir des certificats SSL par le biais de 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 :

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

Cela exécute certbot avec le plugin --nginx, en utilisant -d pour spécifier les noms de domaine pour lesquels nous aimerions que le certificat soit valide.

Si vous utilisez certbot pour la première fois, vous serez invité à saisir une adresse électronique et à accepter les conditions de service. Après avoir fait cela, certbot communiquera avec le serveur Let’s Encrypt, puis exécutera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

Si cela réussit, certbot demandera comment vous souhaitez configurer vos paramètres HTTPS.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Faites votre choix, puis appuyez sur ENTER. La configuration sera mise à jour, et Nginx se rechargera pour récupérer les nouveaux paramètres. certbot terminera par un message vous indiquant que le processus a réussi et précisant l’emplacement de stockage de vos certificats :

Output
IMPORTANT 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 2020-08-18. 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 devrait indiquer que le site est correctement sécurisé, généralement par une icône de cadenas. Si vous testez votre serveur en utilisant le SSL Labs Server Test​​​1​​​, il obtiendra la note A.

Pour finir, testons le processus de renouvellement.

Étape 5 — Verification du renouvellement automatique de Certbot

Les certificats Let’s Encrypt ne sont valables que quatre-vingt-dix jours. Cette mesure vise à encourager les utilisateurs à automatiser le processus de renouvellement de leur certificat. Le paquet certbot que nous avons installé s’en charge pour nous en ajoutant une minuterie système qui s’exécute deux fois par jour et renouvelle automatiquement tout certificat qui se trouve dans les trente jours avant son expiration.

Vous pouvez consulter le statut de la minuterie avec systemctl :

  1. 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 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

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

  1. sudo certbot renew --dry-run

Si vous ne voyez pas d’erreurs, tout est prêt. Si nécessaire, Certbot renouvellera vos certificats et rechargera Nginx pour récupérer les modifications. Si le processus de renouvellement automatisé échoue, Let’s Encrypt enverra un message à l’adresse électronique que vous avez indiquée, vous avertissant de l’expiration prochaine de votre certificat.

Conclusion

Dans ce tutoriel, vous avez installé le client Let’s Encrypt certbot, téléchargé les certificats SSL pour votre domaine, configuré Nginx pour utiliser ces certificats et mis en place 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.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel