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

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une nouvelle autorité de certification (CA) qui fournit un moyen simple 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 les serveurs Web Apache et Nginx.

Dans ce tutoriel, nous allons vous montrer comment utiliser Certbot pour obtenir un certificat SSL gratuit et l'utiliser avec Nginx sur Ubuntu 14.04 LTS. Nous vous montrerons également comment renouveler automatiquement votre certificat SSL.

Nous utiliserons le fichier de configuration Nginx par défaut dans ce didacticiel au lieu d'un fichier de bloc de serveur séparé. 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 de blocs de serveur à la place, vous pouvez suivre ce bloc de serveur Nginx avec le didacticiel Let's Encrypt.

Conditions préalables

Avant de suivre ce tutoriel, vous aurez besoin de quelques éléments.

  • Un serveur Ubuntu 14.04 avec un utilisateur non root disposant des privilèges sudo. Vous pouvez apprendre à configurer un tel compte utilisateur en suivant notre tutoriel configuration initiale du serveur pour Ubuntu 14.04.
  • Nginx installé, Comment installer Nginx sur Ubuntu 14.04 LTS
  • Vous devez posséder ou contrôler le nom de domaine enregistré avec lequel vous souhaitez utiliser le certificat. Si vous n'avez pas encore de nom de domaine enregistré, vous pouvez en enregistrer un auprès de l'un des nombreux bureaux d'enregistrement de noms de domaine (par exemple Namecheap, GoDaddy, etc.).
  • Un DNS A Record qui pointe votre domaine vers l'adresse IP publique de 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. Ceci est nécessaire en raison de la façon dont Let's Encrypt valide que vous possédez le domaine pour lequel il émet un certificat. Par exemple, si vous souhaitez obtenir un certificat pour example.com, ce domaine doit être résolu sur votre serveur pour que le processus de validation fonctionne. Notre configuration utilisera example.com et www.example.com comme noms de domaine, donc les deux enregistrements DNS sont requis.

Une fois que vous avez réglé toutes les conditions préalables, passons à l'installation de Certbot, le logiciel client Let's Encrypt.

É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. Les développeurs de Certbot maintiennent leur propre référentiel de logiciels Ubuntu avec des versions à jour du logiciel. Étant donné que Certbot est en développement si actif, il vaut la peine d'utiliser ce référentiel pour installer un Certbot plus récent que celui fourni par Ubuntu.

Tout d'abord, ajoutez le dépôt :

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 sur les packages du nouveau référentiel :

sudo apt-get update

Et enfin, installez Certbot avec apt-get :

sudo apt-get install python-certbot-nginx

Le client certbot Let's Encrypt est maintenant prêt à être utilisé.

Étape 2 - Configuration de Nginx

Certbot peut configurer automatiquement SSL pour Nginx, mais il doit pouvoir trouver le bon bloc server 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 :

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

Recherchez la ligne server_name existante :

/etc/nginx/sites-available/default

server_name localhost;

Remplacez localhost par votre nom de domaine :

/etc/nginx/sites-available/default

server_name example.com www.example.com;

Enregistrez le fichier et quittez votre éditeur. Vérifiez la syntaxe de vos modifications de configuration avec :

sudo nginx -t

Si cela s'exécute sans erreur, rechargez Nginx pour charger la nouvelle configuration :

sudo service nginx reload

Certbot pourra désormais trouver le bon bloc server et le mettre à jour. Nous allons maintenant mettre à jour notre pare-feu pour autoriser le trafic HTTPS.

Étape 3 — 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 maintenant téléchargés, installés et configuré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 cadenas vert. Si vous testez votre serveur à l'aide du SSL Labs Server Test, il obtiendra une note A.

Étape 4 - 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 exécutant 'certbot refresh' 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 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, nous avons installé le client Let's Encrypt certbot, téléchargé des certificats SSL pour notre 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.