Comment sécuriser Nginx avec Let’s Encrypt sur CentOS 7

introduction

Let’s Encrypt est une nouvelle autorité de certification qui fournit un moyen simple d’obtenir et d’installer des certificats TLS / SSL gratuits, permettant ainsi le cryptage HTTPS sur des 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 les serveurs Web Apache et Nginx.

Dans ce didacticiel, nous allons vous montrer comment utiliser le client Let’s Encrypt decertbot pour obtenir un certificat SSL gratuit et l’utiliser avec Nginx sur CentOS 7. Nous vous montrerons également comment renouveler automatiquement votre certificat SSL.

Conditions préalables

Avant de suivre ce tutoriel, vous aurez besoin de quelques choses.

  • Un serveur CentOS 7 avec un utilisateur non root disposant des privilègessudo. Vous pouvez apprendre comment configurer un tel compte utilisateur en suivant les étapes 1 à 3 de nosinitial server setup for CentOS 7 tutorial.

  • Vous devez posséder ou contrôler le nom de domaine enregistré avec lequel vous souhaitez utiliser le certificat. Si vous ne possédez pas déjà un nom de domaine enregistré, vous pouvez en enregistrer un auprès d’un des nombreux bureaux d’enregistrement de noms de domaine (par exemple, Namecheap, GoDaddy, etc.).

  • Un DNSA Record qui pointe votre domaine vers l'adresse IP publique de votre serveur. Cela est nécessaire en raison de la façon dont Let’s Encrypt a confirmé que vous êtes propriétaire du domaine pour lequel il émet un certificat. Par exemple, si vous souhaitez obtenir un certificat pourexample.com, ce domaine doit être résolu sur votre serveur pour que le processus de validation fonctionne. Notre configuration utiliseraexample.com etwww.example.com comme noms de domaine, doncboth DNS records are required.

Une fois toutes les conditions préalables remplies, passons à l’installation du logiciel client Let’s Encrypt.

[[step-1 -—- Installing-the-certbot-let-39-s-encrypt-client]] == Étape 1 - Installation du client Certbot Let’s Encrypt

La première étape pour utiliser Let’s Encrypt pour obtenir un certificat SSL consiste à installer le logicielcertbot sur votre serveur. Actuellement, le meilleur moyen de l'installer consiste à utiliser le référentiel EPEL.

Activez l'accès au référentiel EPEL sur votre serveur en tapant:

sudo yum install epel-release

Une fois le référentiel activé, vous pouvez obtenir le packagecertbot-nginx en tapant:

sudo yum install certbot-nginx

Le client Let’s Encrypt decertbot est maintenant installé et prêt à être utilisé.

[[step-2 -—- setting-up-nginx]] == Étape 2 - Configuration de Nginx

Si vous n’avez pas encore installé Nginx, vous pouvez le faire maintenant. Le référentiel EPEL doit déjà être activé à partir de la section précédente, vous pouvez donc installer Nginx en tapant:

sudo yum install nginx

Ensuite, démarrez Nginx en utilisantsystemctl:

sudo systemctl start nginx

Certbot peut configurer automatiquement SSL pour Nginx, mais il doit être capable de trouver le blocserver correct dans votre configuration. Pour ce faire, il recherche une directiveserver_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 vi /etc/nginx/nginx.conf

Recherchez la ligneserver_name existante:

/etc/nginx/sites-available/default

server_name _;

Remplacez le trait de soulignement_ par votre nom de domaine:

/etc/nginx/nginx.conf

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 fonctionne sans erreur, rechargez Nginx pour charger la nouvelle configuration:

sudo systemctl reload nginx

Certbot pourra maintenant trouver le blocserver correct et le mettre à jour. Nous allons maintenant mettre à jour notre pare-feu pour autoriser le trafic HTTPS.

[[step-3 -—- update-the-firewall]] == Étape 3 - Mise à jour du pare-feu

Si un pare-feu est activé, assurez-vous que les ports 80 et 443 sont ouverts au trafic entrant. Si vous n’exécutez pas de pare-feu, vous pouvez passer à l’avance.

Si vous avez un pare-feufirewalld en cours d’exécution, vous pouvez ouvrir ces ports en tapant:

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

Si un pare-feuiptables est en cours d'exécution, les commandes que vous devez exécuter dépendent fortement de votre jeu de règles actuel. Pour un ensemble de règles de base, vous pouvez ajouter un accès HTTP et HTTPS en tapant:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

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

[[step-4 -—- getting-a-certificate]] == Étape 4 - Obtention d'un certificat

Certbot propose diverses méthodes pour obtenir des certificats SSL, via différents plugins. Le plugin Nginx se chargera de la reconfiguration de Nginx et du rechargement de la configuration chaque fois que nécessaire:

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

Cela exécutecertbot 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 exécutezcertbot, 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:

OutputPlease choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Sélectionnez votre choix puis appuyez surENTER. 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 à l'aide dehttps:// et notez l'indicateur de sécurité de votre navigateur. Cela devrait représenter que le site est correctement sécurisé, généralement avec une icône de verrou vert.

[[step-5 -—- update-diffie-hellman-parameters]] == Étape 5 - Mise à jour des paramètres Diffie-Hellman

Si vous testez votre serveur en utilisant lesSSL Labs Server Test maintenant, il n'obtiendra qu'une note deB en raison de la faiblesse des paramètres Diffie-Hellman. Ceci affecte la sécurité de l’échange de clé initial entre notre serveur et ses utilisateurs. Nous pouvons résoudre ce problème en créant un nouveau fichierdhparam.pem et en l'ajoutant à notre blocserver.

Créez le fichier en utilisantopenssl:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Cela prendra un certain temps, jusqu'à quelques minutes. Quand c'est fait, ouvrez le fichier de configuration Nginx qui contient votre blocserver. Dans notre exemple, c’est le fichier de configuration par défaut:

sudo vi /etc/nginx/nginx.conf

Collez la ligne suivante n'importe où dans le blocserver:

/etc/nginx/nginx.conf

. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Enregistrez le fichier et quittez votre éditeur, puis vérifiez la configuration:

sudo nginx -t

Si vous n'avez pas d'erreur, rechargez Nginx:

sudo systemctl reload nginx

Votre site est désormais plus sécurisé et devrait recevoir une note deA.

[[step-6 -—- setting-up-auto-renew]] == Étape 6 - Configuration du renouvellement automatique

Les certificats de Let Encrypt ne sont valables que quatre-vingt-dix jours. Cela encourage les utilisateurs à automatiser leur processus de renouvellement des certificats. Nous devons définir une commande d'exécution régulière pour vérifier l'expiration des certificats et les renouveler automatiquement.

Pour exécuter le contrôle de renouvellement tous les jours, nous utiliseronscron, un service système standard pour exécuter des travaux périodiques. Nous disons àcron ce qu'il faut faire en ouvrant et en éditant un fichier appelécrontab.

sudo crontab -e

Votre éditeur de texte ouvrira la crontab par défaut qui est un fichier texte vide à ce stade. Collez la ligne suivante, puis enregistrez-la et fermez-la:

crontab

. . .
15 3 * * * /usr/bin/certbot renew --quiet

La partie15 3 * * * de cette ligne signifie «exécuter la commande suivante à 3 h 15, tous les jours». Vous pouvez choisir n'importe quel moment.

La commanderenew pour Certbot vérifie tous les certificats installés sur le système et met à jour ceux qui sont configurés pour expirer dans moins de trente jours. --quiet dit à Certbot de ne pas fournir d'informations ou d'attendre l'entrée de l'utilisateur.

cron exécutera désormais cette commande quotidiennement. Tous les certificats installés seront automatiquement renouvelés et rechargés lorsqu'ils auront trente jours ou moins avant leur expiration.

[.note] #Pour plus d'informations sur la création et la planification de tâches cron, vous pouvez consulter notre guideHow to Use Cron to Automate Tasks in a VPS.
#

Conclusion

Dans ce didacticiel, nous avons installé le client Let’s Encryptcertbot, 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,their documentation est un bon point de départ.