Comment sécuriser un serveur nginx avec des certificats Let’s Encrypt sur Ubuntu 16.04 et 18.04?

Introduction

Let’s Encrypt est une autorité de certification (CA) qui fournit un moyen simple d’obtenir et d’installer des certificats TLS / SSL gratuits, permettant ainsi le HTTPS chiffré 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 tutoriel, vous allez utiliser Certbot pour obtenir un certificat SSL gratuit pour Nginx sur Ubuntu 16.04 et configurer votre certificat pour qu’il se renouvelle automatiquement.

Ce didacticiel utilise le fichier de configuration Nginx par défaut au lieu d’un fichier de bloc de serveur distinct. Nous vous recommandons de créer de nouveaux fichiers de bloc de serveur Nginx pour chaque domaine, car cela permet d’éviter certaines erreurs courantes et conserve les fichiers par défaut en tant que configuration de secours comme prévu. Si vous souhaitez configurer SSL à l’aide de blocs serveur à la place, vous pouvez suivre ces blocs serveur Nginx avec le didacticiel Let’s Encrypt.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

– Un serveur Ubuntu 16.04 configuré en suivant cette configuration initiale de serveur pour le didacticiel Ubuntu 16.04, y compris un utilisateur sudo non root et un pare-feu.

– Un nom de domaine entièrement enregistré.

– Nginx installé en suivant Comment installer Nginx sur Ubuntu 16.04.

– Un pare-feu activé

Étape 1 – Installation de Certbot

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

Certbot est en développement très actif, donc les packages Certbot fournis par Ubuntu ont tendance à être obsolètes. Cependant, les développeurs Certbot maintiennent un référentiel de logiciels Ubuntu avec des versions à jour, nous allons donc utiliser ce référentiel à la place.

Tout d’abord, ajoutez le référentiel.

sudo add-apt-repository ppa:certbot/certbot<code class=« western »></code>

Vous devrez appuyer sur ENTER pour accepter. Ensuite, mettez à jour la liste des packages pour récupérer les informations sur les packages du nouveau référentiel.

sudo apt-get update

 

Et enfin, installez le package Nginx de Certbot avec apt-get.

sudo apt-get install python-certbot-nginx

 

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

Étape 2 – Configuration de Nginx

Certbot peut configurer automatiquement SSL pour Nginx, mais il doit être capable de trouver le bloc serveur correct dans votre configuration. Pour ce faire, il recherche une directive server_name qui correspond au domaine pour lequel vous demandez un certificat.

Si vous commencez avec une nouvelle installation de Nginx, vous pouvez mettre à jour le fichier de configuration par défaut. Ouvrez-le avec nano ou votre éditeur de texte préféré.

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

 

Recherchez la ligne server_name existante et remplacez le trait de soulignement _ par votre nom de domaine:

/etc/nginx/sites-available/default

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

Enregistrez le fichier et quittez votre éditeur.

Ensuite, vérifiez la syntaxe de vos modifications de configuration.

sudo nginx -t

 

Si vous obtenez des erreurs, rouvrez le fichier et recherchez les fautes de frappe, puis testez-le à nouveau.

Une fois la syntaxe de votre configuration correcte, rechargez Nginx pour charger la nouvelle configuration.


sudo systemctl reload nginx

 

Certbot pourra désormais trouver le bloc serveur correct et le mettre à jour. Ensuite, nous mettrons à jour notre pare-feu pour autoriser le trafic HTTPS.

Étape 3 – Autoriser HTTPS à travers le pare-feu

Si le pare-feu ufw est activé, comme recommandé par les guides 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:

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 permettre en outre le trafic HTTPS, nous pouvons autoriser le profil Nginx complet, puis supprimer l’allocation de profil HTTP Nginx redondante:

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

Votre statut devrait ressembler à ceci maintenant:

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)

Nous sommes maintenant prêts à exécuter Certbot et à récupérer nos certificats.

Étape 4 – Obtention d’un certificat SSL

Certbot fournit une variété de façons d’obtenir des certificats SSL, via divers plugins. Le plugin Nginx se chargera de reconfigurer Nginx et de recharger la configuration chaque fois que nécessaire:

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 pour lesquels nous voulons que le certificat soit valide.

Si c’est la première fois que vous exécutez 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, puis lancera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

Si cela réussit, certbot vous 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):

Sélectionnez votre choix, puis appuyez sur ENTRÉE. La configuration sera mise à jour et Nginx se rechargera pour récupérer les nouveaux paramètres. certbot terminera avec un message vous indiquant que le processus a réussi et où vos certificats sont stockés:

Output IMPORTANT NOTES:  - Congratulations! Your certificate and chain have been saved at    /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will    expire on 2017-10-23. 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"  - Your account credentials have been saved in your Certbot    configuration directory at /etc/letsencrypt. You should make a    secure backup of this folder now. This configuration directory will    also contain certificates and private keys obtained by Certbot so    making regular backups of this folder is ideal.  - 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 à l’aide de https: // et notez 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 verte. Si vous testez votre serveur à l’aide du test de serveur SSL Labs, il obtiendra la 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 quatre-vingt-dix jours. Il s’agit d’encourager les utilisateurs à automatiser leur processus de renouvellement de certificat. Le package certbot que nous avons installé s’en charge pour nous en exécutant ‘certbot renouvellement’ deux fois par jour via une minuterie systemd. Sur les distributions non-systemd, cette fonctionnalité est fournie par un script placé dans /etc/cron.d. Cette tâche s’exécute deux fois par jour et renouvellera tout certificat dans les trente jours suivant son expiration.

Pour tester le processus de renouvellement, vous pouvez faire un essai à sec 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 récupérer 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 certbot client Let’s Encrypt, 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *