Comment sécuriser Apache avec Let's Encrypt sur CentOS 8

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une autorité de certification (CA) qui facilite l'obtention et l'installation de certificats TLS/SSL gratuits, permettant ainsi le chiffrement HTTPS sur les serveurs Web. Il simplifie le processus en travaillant avec des clients, tels que Certbot, pour automatiser les étapes nécessaires.

Dans ce didacticiel, vous utiliserez Certbot pour configurer un certificat TLS/SSL avec le serveur Web Apache sur CentOS 8. De plus, vous automatiserez le processus de renouvellement de certificat à l'aide d'une tâche cron, sur laquelle vous pouvez en savoir plus en lisant Comment utiliser Cron pour automatiser les tâches sur CentOS 8.

Conditions préalables

Pour compléter ce guide, vous aurez besoin de :

  • Un serveur CentOS 8 avec un utilisateur sudo non root et un pare-feu de base firewalld configuré en suivant le guide de configuration initiale du serveur CentOS 8.
  • Apache installé sur le serveur avec un hôte virtuel configuré pour votre domaine. Vous pouvez apprendre à le configurer en suivant notre tutoriel Comment installer le serveur Web Apache sur CentOS 8. Assurez-vous d'avoir un hôte virtuel configuré pour votre domaine. Ce tutoriel utilisera /etc/httpd/sites-available/example.com.conf comme exemple.
  • 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 acheter un sur Namecheap, en obtenir un gratuitement sur Freenom ou utiliser le bureau d'enregistrement de domaine de votre choix.
  • Un DNS A Record qui pointe votre domaine vers l'adresse IP publique de votre serveur. Si vous hébergez votre domaine via DigitalOcean, vous pouvez vous référer à la DigitalOcean DNS documentation pour plus de détails sur la façon d'ajouter ces enregistrements avec la plateforme DigitalOcean. Les enregistrements DNS A sont requis 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, qui nécessiteront tous deux un enregistrement DNS valide.

Lorsque vous avez terminé toutes ces conditions préalables, passez à l'installation du logiciel client Certbot.

Étape 1 - Installation du client Certbot Let's Encrypt

Pour utiliser Let's Encrypt afin d'obtenir un certificat SSL, vous devez d'abord installer Certbot et mod_ssl, un module Apache qui prend en charge le chiffrement SSLv3.

Le package certbot n'est pas disponible via le gestionnaire de packages par défaut. Vous devrez activer le référentiel EPEL pour installer Certbot.

Pour ajouter le dépôt CentOS 8 EPEL, exécutez la commande suivante :

sudo dnf install epel-release

Maintenant que vous avez accès au dépôt, installez tous les packages requis :

sudo dnf install certbot python3-certbot-apache mod_ssl

Une fois ces services installés, vous êtes maintenant prêt à exécuter Certbot et à récupérer vos certificats.

Étape 2 — Obtention d'un certificat

Maintenant que Certbot est installé, vous pouvez l'utiliser pour demander un certificat SSL pour votre domaine.

L'utilisation du client certbot Let's Encrypt pour générer le certificat SSL pour Apache automatise de nombreuses étapes du processus. Le client obtiendra et installera automatiquement un nouveau certificat SSL valide pour les domaines que vous fournissez en tant que paramètres.

Pour exécuter l'installation interactive et obtenir un certificat qui ne couvre qu'un seul domaine, exécutez la commande certbot avec :

sudo certbot --apache -d example.com

Cela exécute certbot avec le plug-in --apache et spécifie le domaine pour lequel configurer le certificat avec l'indicateur -d.

Si vous souhaitez installer un seul certificat valide pour plusieurs domaines ou sous-domaines, vous pouvez les transmettre en tant que paramètres supplémentaires à la commande, en marquant chaque nouveau domaine ou sous-domaine avec l'indicateur -d. Le premier nom de domaine dans la liste des paramètres sera le domaine base utilisé par Let's Encrypt pour créer le certificat. Pour cette raison, transmettez le nom de domaine de base en premier dans la liste, suivi de tout sous-domaine ou alias supplémentaire :

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

Le domaine de base dans cet exemple est example.com.

L'utilitaire certbot peut également vous inviter à choisir un domaine en fonction de votre configuration Apache existante. Pour utiliser cette fonctionnalité, appelez certbot sans spécifier de domaine :

sudo certbot --apache

Le programme vous présentera un guide étape par étape pour personnaliser les options de votre certificat. Il vous demandera de fournir une adresse e-mail pour la récupération de clé perdue et les avis, puis vous invitera à accepter les conditions d'utilisation. Si vous n'avez pas spécifié vos domaines sur la ligne de commande, vous serez également invité à le faire. Si vos fichiers d'hôte virtuel ne spécifient pas explicitement le domaine qu'ils desservent à l'aide de la directive ServerName, il vous sera demandé de choisir le fichier d'hôte virtuel.

Lorsque l'installation est terminée avec succès, vous verrez un message semblable à celui-ci :

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-09-24. 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

Les fichiers de certificat générés seront disponibles dans un sous-répertoire nommé d'après votre domaine de base dans le répertoire /etc/letsencrypt/live.

Maintenant que vos certificats sont téléchargés, installés et chargés, vous pouvez vérifier l'état de votre certificat SSL pour vous assurer que tout fonctionne.

Étape 3 - Test du certificat et de la configuration SSL

À ce stade, vous pouvez vous assurer que Certbot a correctement créé votre certificat SSL en utilisant le SSL Server Test de la société de sécurité cloud Qualys.

Ouvrez le lien suivant dans votre navigateur Web préféré, en remplaçant example.com par votre domaine :

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Vous arriverez sur une page qui commencera immédiatement à tester la connexion SSL à votre serveur :

Une fois le test lancé, il peut prendre quelques minutes. Le statut du test sera mis à jour dans votre navigateur.

Une fois les tests terminés, la page affichera une note alphabétique qui évalue la sécurité et la qualité de la configuration de votre serveur. Au moment d'écrire ces lignes, les paramètres par défaut donneront une note A :

Pour plus d'informations sur la façon dont SSL Labs détermine ces notes, consultez le SSL Labs Grading post détaillant les mises à jour apportées au système de notation en janvier 2018.

Essayez de recharger votre site Web en utilisant https:// et remarquez l'indicateur de sécurité de votre navigateur. Il indiquera maintenant que le site est correctement sécurisé, généralement avec une icône de verrouillage.

Une fois votre certificat SSL installé et vérifié, l'étape suivante consiste à configurer le renouvellement automatique de votre certificat afin de le maintenir valide.

Étape 4 - Configuration du renouvellement automatique

Les certificats Let's Encrypt sont valables 90 jours, mais il est recommandé de vérifier le renouvellement deux fois par jour en cas de révocation ou autre problème. Pour cette raison, il est recommandé d'automatiser ce processus.

Examinons d'abord la commande que vous utiliserez pour renouveler le certificat. Le client certbot Let's Encrypt dispose d'une commande renew qui vérifie automatiquement les certificats actuellement installés et tente de les renouveler s'ils sont à moins de 30 jours de la date d'expiration. En utilisant l'option --dry-run, vous pouvez exécuter une simulation de cette tâche pour tester le fonctionnement de renew :

sudo certbot renew --dry-run

La sortie devrait ressembler à ceci :

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/example.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)
...

Notez que si vous avez créé un certificat groupé avec plusieurs domaines, seul le nom de domaine de base sera affiché dans la sortie, mais le renouvellement sera valide pour tous les domaines inclus dans ce certificat.

Un moyen pratique de vous assurer que vos certificats ne seront pas obsolètes consiste à créer une tâche cron qui exécutera périodiquement la commande de renouvellement automatique pour vous.

La documentation officielle de Certbot recommande d'exécuter cron deux fois par jour. Cela garantira que, dans le cas où Let's Encrypt initie une révocation de certificat, il n'y aura pas plus d'une demi-journée avant que Certbot renouvelle votre certificat. La documentation suggère d'utiliser la commande suivante pour ajouter une tâche cron appropriée au fichier crontab /etc/crontab :

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

Cela créera une nouvelle tâche cron qui s'exécutera à midi et à minuit tous les jours (0 0,12 * * *). Il exécutera ensuite le court script python3, qui fera une pause pendant une période aléatoire comprise entre zéro et soixante minutes. Ceci est recommandé afin de réduire la charge sur les serveurs de Let's Encrypt.

Une fois le script python terminé, la commande réelle certbot renew s'exécutera.

Pour plus d'informations sur la création et la planification de tâches cron, vous pouvez consulter notre guide Comment utiliser Cron pour automatiser des tâches sur CentOS 8. Des informations plus détaillées sur le renouvellement sont disponibles dans la documentation Certbot.

Conclusion

Dans ce guide, vous avez installé le client Let's Encrypt Certbot, téléchargé des certificats SSL pour votre domaine et configuré le renouvellement automatique des certificats. Si vous avez des questions sur l'utilisation de Certbot, vous pouvez consulter la documentation officielle Certbot. Nous vous recommandons également de consulter le blog officiel Let's Encrypt pour des mises à jour importantes de temps à autre.