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

introduction

Let’s Encrypt est une autorité de certification qui fournit des certificats gratuits pour les https://www.digitalocean.com/community/tutorials/openss-sentials-working-with-ssl-certificates- private-keys-and-csrs [chiffrement TLS (Transport Layer Security)], activant ainsi le protocole HTTPS chiffré sur les serveurs Web. Il simplifie le processus de création, validation, signature, installation et renouvellement des certificats en fournissant un logiciel client qui automatise la plupart des étapes: https: //certbot.eff.org/ [Certbot].

Dans ce didacticiel, vous allez utiliser Certbot pour configurer un certificat TLS / SSL à partir de Let’s Encrypt sur un serveur CentOS 7 exécutant Apache en tant que serveur Web. De plus, vous automatiserez le processus de renouvellement des certificats à l’aide d’un travail cron, sur lequel vous pourrez en apprendre davantage en consultant https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks- on-a-vps [Comment utiliser Cron pour automatiser des tâches sur un VPS].

Conditions préalables

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

Lorsque toutes ces conditions préalables sont remplies, continuez pour installer le logiciel client Let’s Encrypt.

É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 https://httpd.apache.org/docs/2.4/mod/mod_ssl.html [+ mod_ssl +], un module Apache prenant en charge Cryptage SSL v3.

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

Pour ajouter le référentiel CentOS 7 EPEL, exécutez la commande suivante:

sudo yum install epel-release

Maintenant que vous avez accès au référentiel, installez tous les packages requis:

sudo yum install certbot python2-certbot-apache mod_ssl

Au cours du processus d’installation, il vous sera demandé d’importer une clé GPG. Cette clé vérifiera l’authenticité du paquet que vous installez. Pour permettre à l’installation de se terminer, acceptez la clé GPG en tapant + y + et en appuyant sur + ENTER + lorsque vous y êtes invité.

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

Utiliser le 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 ne couvrant qu’un seul domaine, exécutez la commande + certbot + avec:

sudo certbot --apache -d

Ceci exécute + certbot + avec le plugin + - apache + et spécifie le domaine pour lequel le certificat doit être configuré 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 étiquetant 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 à la liste, suivi de tout sous-domaine ou alias supplémentaire:

sudo certbot --apache -d  -d

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

L’utilitaire + certbot + peut également vous demander des informations sur le domaine lors de la procédure de demande de certificat. Pour utiliser cette fonctionnalité, appelez + certbot + sans 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 électronique pour les avis de récupération de clé perdue, 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 le domaine qu’ils desservent explicitement à l’aide de la directive + ServerName +, il vous sera demandé de choisir le fichier d’hôte virtuel. Dans la plupart des cas, le fichier + ssl.conf par défaut fonctionnera.

Vous pourrez également choisir d’activer à la fois les accès + http + et + https + ou de forcer toutes les demandes à être redirigées vers + https +. Pour une meilleure sécurité, il est recommandé de choisir l’option +2: Redirect + si vous n’avez aucun besoin particulier d’autoriser des connexions non chiffrées. Sélectionnez votre choix puis appuyez sur + ENTER.

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):

Lorsque l’installation est terminée avec succès, vous verrez un message semblable à ceci:

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live//fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live//privkey.pem
  Your cert will expire on . 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"
- 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 le statut de votre certificat SSL pour vous assurer que tout fonctionne.

Étape 3 - Vérification de l’état de votre certificat

À ce stade, vous pouvez vous assurer que Certbot a créé votre certificat SSL correctement à l’aide du SSL Server Test de la société de sécurité cloud https://www.qualys.com/ [ Qualys].

Ouvrez le lien suivant dans votre navigateur Web préféré, en remplaçant «++» par votre domaine * base *:

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

Vous allez atterrir sur une page qui commence immédiatement à tester la connexion SSL à votre serveur:

image: https: //assets.digitalocean.com/articles/LE_CentOS7_66505/SSL_Server_Test.png [Test du serveur SSL]

Une fois le test lancé, quelques minutes peuvent être nécessaires. Le statut du test sera mis à jour dans votre navigateur.

Une fois les tests terminés, la page affiche une note indiquant la sécurité et la qualité de la configuration de votre serveur. Au moment d’écrire ces lignes, les paramètres par défaut attribueront une note * A *:

image: https: //assets.digitalocean.com/articles/LE_CentOS7_66505/SSL_Report_A.png [Rapport SSL - A]

Pour plus d’informations sur la manière dont SSL Labs détermine ces notes, consultez l’article SSL Labs en détaillant les mises à jour apportées à l’évaluation. régime en janvier 2018.

Essayez de recharger votre site Web en utilisant + https: // + et notez l’indicateur de sécurité de votre navigateur. Il va maintenant indiquer que le site est correctement sécurisé, généralement avec une icône de verrou vert.

Lorsque votre certificat SSL est en place et vérifié, l’étape suivante consiste à configurer le renouvellement automatique de votre certificat pour le maintenir en vigueur.

Étape 4 - Configuration du renouvellement automatique

Les certificats Let Encrypt sont valides pendant 90 jours, mais il est recommandé de les renouveler tous les 60 jours pour laisser une marge d’erreur. C’est pourquoi il est recommandé d’automatiser ce processus pour vérifier et renouveler périodiquement le certificat.

Tout d’abord, examinons 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 se trouvent dans 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/.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
http-01 challenge for
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//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//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 valable pour tous les domaines inclus dans ce certificat.

Un moyen pratique de vous assurer que vos certificats ne seront pas périmés est de créer un cron. travail qui exécutera périodiquement la commande de renouvellement automatique pour vous. Comme le renouvellement vérifie d’abord la date d’expiration et ne l’exécute que si le certificat a moins de 30 jours d’expiration, il est prudent de créer un travail cron qui s’exécute chaque semaine ou même tous les jours.

La https://certbot.eff.org/lets-encrypt/centosrhel7-apache Suivre la documentation officielle de Certbot] recommande d’exécuter + cron + deux fois par jour. Cela garantira que, si Let’s Encrypt initie une révocation de certificat, il ne restera plus qu’une demi-journée avant le renouvellement de votre certificat par Certbot.

Editez le + crontab + pour créer un nouveau travail qui exécutera le renouvellement deux fois par jour. Pour éditer le + crontab + pour l’utilisateur * root *, lancez:

sudo crontab -e

Votre éditeur de texte ouvrira la valeur par défaut + crontab +, qui est un fichier texte vide à ce stade. Ce tutoriel utilisera l’éditeur de texte vi. Pour en savoir plus sur cet éditeur de texte et son successeur vim, consultez notre https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on-a-cloud-server # tutoriel-gestion [Installation et utilisation de l’éditeur de texte Vim sur un serveur Cloud].

Entrez en mode insertion en appuyant sur + i + et ajoutez la ligne suivante:

crontab0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

Lorsque vous avez terminé, appuyez sur + ECHAP + pour quitter le mode insertion, puis sur ': wq + `et` + ENTER + `pour enregistrer et quitter le fichier. Cela créera un nouveau travail cron qui sera exécuté tous les jours à midi et à minuit. En ajoutant un élément aléatoire à vos tâches cron, vous vous assurez que les tâches horaires ne se produisent pas toutes à la même minute, ce qui provoque un pic de serveur; ` python -c 'importation aléatoire; temps d’importation; time.sleep (random.random () * 3600) '+ `sélectionnera une minute aléatoire dans l’heure pour vos tâches de renouvellement.

Pour plus d’informations sur la création et la planification de tâches cron, vous pouvez consulter notre https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-on-a-vps [ Comment utiliser Cron pour automatiser des tâches dans un VPS]. Des informations plus détaillées sur le renouvellement se trouvent dans la Certbot documentation.

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 du certificat. Si vous avez des questions sur l’utilisation de Certbot, vous pouvez consulter la documentation officielle Certbot. Nous vous recommandons également de consulter périodiquement le blog officiel Encrypt] sur https://letsencrypt.org/blog/[Let.