Comment configurer Let's Encrypt avec les blocs de serveur Nginx sur Ubuntu 16.04

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 Ubuntu 16.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 certaines erreurs courantes et de conserver les fichiers par défaut comme configuration de secours, comme prévu. Si vous souhaitez configurer SSL à l'aide du bloc de serveur par défaut, vous pouvez suivre ce didacticiel Nginx + Let's Encrypt à la place.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 16.04 configuré en suivant ce tutoriel de configuration initiale du serveur pour Ubuntu 16.04, y compris un utilisateur sudo non root et un pare-feu.
  • Un nom de domaine entièrement enregistré. Ce didacticiel utilisera example.com 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 ce didacticiel sur les noms d'hôtes pour plus de détails sur la façon de les ajouter.
    • Un enregistrement A avec example.com pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.example.com pointant vers l'adresse IP publique de votre serveur.
  • Nginx installé en suivant Comment installer Nginx sur Ubuntu 16.04.
  • Un fichier de bloc de serveur Nginx distinct pour votre domaine, configuré en suivant ce didacticiel de blocs de serveur Nginx pour Ubuntu 16.04. Ce didacticiel utilisera /etc/nginx/sites-available/example.com.

É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.

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

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

sudo add-apt-repository ppa:certbot/certbot

Vous devrez appuyer sur ENTER pour accepter. Ensuite, mettez à jour la liste des packages pour récupérer les informations de package 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 à être utilisé, mais pour qu'il puisse configurer 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 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 le didacticiel préalable sur les blocs de serveur Nginx, vous devriez avoir un bloc de serveur pour votre domaine sur /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 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/example.com

Trouvez la ligne server_name existante. Ça devrait ressembler à ça:

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

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

Si c'est le cas, vous pouvez quitter votre éditeur et passer à 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 que la syntaxe de votre fichier de configuration est 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, nous mettrons à jour notre 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 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, nous pouvons autoriser le profil complet Nginx, 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
OutputStatus: 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 config 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 aimerions 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, 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 vous demandera comment vous souhaitez configurer vos paramètres HTTPS.

OutputPlease 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 ENTER. 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 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 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.

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. Le package certbot que nous avons installé s'en charge pour nous 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 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 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.