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

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une autorité de certification (CA) qui fournit un moyen d'obtenir et d'installer des certificats TLS/SSL gratuits, permettant ainsi le chiffrement HTTPS sur les serveurs Web. Il rationalise 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 Ubuntu 18.04 et configurerez votre certificat pour qu'il se renouvelle automatiquement.

Ce didacticiel utilisera un fichier de bloc 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 Ubuntu 18.04 configuré en suivant ce tutoriel de configuration initiale du serveur pour Ubuntu 18.04, y compris un utilisateur sudo non root et un pare-feu.
  • Un nom de domaine entièrement enregistré. Ce tutoriel utilisera votre_domaine tout au long. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom ou utiliser le bureau d'enregistrement de domaine de votre choix.
  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivre cette introduction à DigitalOcean DNS pour plus de détails sur la façon de les ajouter.
    • Un enregistrement A avec your_domain pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.your_domain pointant vers l'adresse IP publique de votre serveur.
  • Nginx installé en suivant Comment installer Nginx sur Ubuntu 18.04. Assurez-vous d'avoir un bloc de serveur pour votre domaine. Encore une fois, ce didacticiel utilisera /etc/nginx/sites-available/your_domain comme 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.

Le projet Certbot recommande à la plupart des utilisateurs d'installer le logiciel via snap, un gestionnaire de packages développé à l'origine par Canonical (la société derrière Ubuntu) et désormais disponible sur de nombreuses distributions Linux :

sudo snap install --classic certbot

Votre sortie affichera la version actuelle de Certbot et l'installation réussie :

Output
certbot 1.21.0 from Certbot Project (certbot-eff✓) installed

Ensuite, créez un lien symbolique vers l'exécutable /snap/bin/certbot nouvellement installé à partir du répertoire /usr/bin/. Cela garantira que la commande certbot peut s'exécuter correctement sur votre serveur. Pour ce faire, exécutez la commande ln suivante. Celui-ci contient le drapeau -s qui créera un lien symbolique ou soft, par opposition à un lien dur :

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbot est maintenant prêt à être utilisé, mais pour qu'il puisse configurer SSL pour Nginx, vous devez vérifier une partie de la configuration de Nginx.

Étape 2 - Confirmation de la configuration de Nginx

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

Si vous avez suivi l'étape de configuration du bloc de serveur recommandée dans le didacticiel d'installation de Nginx , vous aurez un bloc de serveur pour votre domaine sur /etc/nginx/sites-available/your_domain avec la directive server_name déjà définie de manière appropriée. .

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

sudo nano /etc/nginx/sites-available/your_domain

Trouvez la ligne server_name existante. Cela devrait ressembler à ce qui suit :

/etc/nginx/sites-available/votre_domaine

...
server_name your_domain www.your_domain;
...

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 et quittez votre éditeur. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL + X puis Y et ENTER.

Vérifiez maintenant 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 bloc server et le mettre à jour.

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

Étape 3 - Autoriser HTTPS via le pare-feu

Si le pare-feu ufw est 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 vérifier le paramètre actuel en exécutant ce qui suit :

sudo ufw status

Vous devriez recevoir une sortie comme celle-ci, indiquant 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 du trafic HTTPS supplémentaire, 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'

Désormais, lorsque vous exécuterez la commande ufw status, ces nouvelles règles seront reflétées :

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, vous exécuterez Certbot et récupérerez vos 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, exécutez ce qui suit :

sudo certbot --nginx -d your_domain -d your_domain

Cela exécute certbot avec le plug-in --nginx, en utilisant -d pour spécifier les noms pour lesquels vous souhaitez que le certificat soit valide.

Si c'est la première fois que vous utilisez certbot, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation. Après cela, certbot communiquera avec le serveur Let's Encrypt pour demander un certificat pour votre domaine. En cas de succès, vous recevrez la sortie suivante :

Output
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-01-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain
Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 avec une icône de cadenas vert. Si vous testez votre serveur à l'aide du SSL Labs Server Test, il obtiendra une note A.

Maintenant que vous avez obtenu votre certificat SSL, la dernière étape consiste à tester 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. Le package certbot que vous avez installé s'en charge en ajoutant un script de renouvellement à /etc/cron.d. Ce script s'exécute deux fois par jour et renouvellera automatiquement tout certificat dans les trente jours suivant son expiration.

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

sudo certbot renew --dry-run

Si vous ne recevez pas d'erreurs, 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 didacticiel, 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, leur documentation est un bon point de départ.