Comment utiliser le mode autonome Certbot pour récupérer des certificats SSL Let's Encrypt sur CentOS 7

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est un service offrant des certificats SSL gratuits via une API automatisée. Le client Let's Encrypt le plus populaire est EFF's Certbot.

Certbot propose différentes manières de valider votre domaine, de récupérer des certificats et de configurer automatiquement Apache et Nginx. Dans ce didacticiel, nous aborderons le mode standalone de Certbot et comment l'utiliser pour sécuriser d'autres types de services, tels qu'un serveur de messagerie ou un courtier de messages comme RabbitMQ.

Nous ne discuterons pas des détails de la configuration SSL, mais lorsque vous aurez terminé, vous aurez un certificat valide qui sera automatiquement renouvelé. De plus, vous pourrez automatiser le rechargement de votre service pour récupérer le certificat renouvelé.

Conditions préalables

Avant de commencer ce tutoriel, vous aurez besoin de :

Étape 1 - Installation de Certbot

Certbot est fourni dans un référentiel supplémentaire appelé Extra Packages for Enterprise Linux (EPEL). Pour activer ce référentiel sur CentOS 7, exécutez la commande yum suivante :

sudo yum --enablerepo=extras install epel-release

Ensuite, le package certbot peut être installé avec yum :

sudo yum install certbot

Vous pouvez confirmer que votre installation a réussi en appelant la commande certbot :

certbot --version
Outputcertbot 0.31.0

Maintenant que Certbot est installé, exécutons-le pour obtenir notre certificat.

Étape 2 - Exécution de Certbot

Certbot doit répondre à un défi cryptographique émis par l'API Let's Encrypt afin de prouver que nous contrôlons notre domaine. Il utilise les ports 80 (HTTP) ou 443 (HTTPS) pour y parvenir. Si vous utilisez un pare-feu, ouvrez le port approprié maintenant. Pour firewalld, cela ressemblerait à ceci :

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

Remplacez https par http ci-dessus si vous utilisez le port 443.

Nous pouvons maintenant exécuter Certbot pour obtenir notre certificat. Nous utiliserons l'option --standalone pour dire à Certbot de gérer le défi en utilisant son propre serveur Web intégré. L'option --preferred-challenges indique à Certbot d'utiliser le port 80 ou le port 443. Si vous utilisez le port 80, vous voulez --preferred-challenges http. Pour le port 443, ce serait --preferred-challenges tls-sni. Enfin, le drapeau -d est utilisé pour spécifier le domaine pour lequel vous demandez un certificat. Vous pouvez ajouter plusieurs options -d pour couvrir plusieurs domaines dans un seul certificat.

sudo certbot certonly --standalone --preferred-challenges http -d example.com

Lors de l'exécution de la commande, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation. Après cela, vous devriez voir 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 key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-10-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

Nous avons nos certificats. Voyons ce que nous avons téléchargé et comment utiliser les fichiers avec notre logiciel.

Étape 3 - Configuration de votre application

La configuration de votre application pour SSL dépasse le cadre de cet article, car chaque application a des exigences et des options de configuration différentes, mais examinons ce que Certbot a téléchargé pour nous. Utilisez ls pour répertorier le répertoire contenant nos clés et certificats :

sudo ls /etc/letsencrypt/live/example.com
Outputcert.pem  chain.pem  fullchain.pem  privkey.pem  README

Le fichier README dans ce répertoire contient plus d'informations sur chacun de ces fichiers. Le plus souvent, vous n'aurez besoin que de deux de ces fichiers :

  • privkey.pem : il s'agit de la clé privée du certificat. Cela doit être gardé en sécurité et secret, c'est pourquoi la plupart du répertoire /etc/letsencrypt a des autorisations très restrictives et n'est accessible que par l'utilisateur root. La plupart des configurations logicielles feront référence à cela comme quelque chose de similaire à ssl-certificate-key ou ssl-certificate-key-file.
  • fullchain.pem : il s'agit de notre certificat, fourni avec tous les certificats intermédiaires. La plupart des logiciels utiliseront ce fichier pour le certificat réel et s'y référeront dans leur configuration avec un nom comme 'ssl-certificate'.

Pour plus d'informations sur les autres fichiers présents, reportez-vous à la section "Où sont mes certificats" de la documentation Certbot.

Certains logiciels auront besoin de leurs certificats dans d'autres formats, dans d'autres emplacements ou avec d'autres autorisations d'utilisateur. Il est préférable de tout laisser dans le répertoire letsencrypt et de ne modifier aucune autorisation (les autorisations seront de toute façon écrasées lors du renouvellement), mais parfois ce n'est tout simplement pas une option. Dans ce cas, vous devrez écrire un script pour déplacer les fichiers et modifier les autorisations si nécessaire. Ce script devra être exécuté chaque fois que Certbot renouvellera les certificats, dont nous parlerons ensuite.

Étape 4 - Activer le renouvellement automatique du certificat

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é inclut une minuterie systemd pour vérifier les renouvellements deux fois par jour, mais il est désactivé par défaut. Activez le minuteur en exécutant la commande suivante :

sudo systemctl enable --now certbot-renew.timer
OutputCreated symlink from /etc/systemd/system/timers.target.wants/certbot-renew.timer to /usr/lib/systemd/system/certbot-renew.timer.

Vous pouvez vérifier l'état de la minuterie en utilisant systemctl :

sudo systemctl status certbot-renew.timer
Output● certbot-renew.timer - This is the timer to set the schedule for automated renewals
   Loaded: loaded (/usr/lib/systemd/system/certbot-renew.timer; enabled; vendor preset: disabled)
   Active: active (waiting) since Fri 2019-05-31 15:10:10 UTC; 48s ago

La minuterie doit être active. Certbot renouvellera désormais automatiquement tous les certificats sur ce serveur chaque fois que nécessaire.

Étape 5 - Exécution des tâches lors du renouvellement des certificats

Maintenant que nos certificats se renouvellent automatiquement, nous avons besoin d'un moyen d'exécuter certaines tâches après un renouvellement. Nous devons au moins redémarrer ou recharger notre serveur pour récupérer les nouveaux certificats, et comme mentionné à l'étape 3, nous devrons peut-être manipuler les fichiers de certificat d'une manière ou d'une autre pour les faire fonctionner avec le logiciel que nous utilisons. C'est le but de l'option renew_hook de Certbot.

Pour ajouter un renew_hook, nous mettons à jour le fichier de configuration de renouvellement de Certbot. Certbot se souvient de tous les détails de la façon dont vous avez récupéré le certificat pour la première fois et fonctionnera avec les mêmes options lors du renouvellement. Nous avons juste besoin d'ajouter notre crochet. Ouvrez le fichier de configuration avec votre éditeur préféré :

sudo vi /etc/letsencrypt/renewal/example.com.conf

Un fichier texte s'ouvrira avec quelques options de configuration. Ajoutez votre crochet sur la dernière ligne :

/etc/letsencrypt/renewal/example.com.conf

renew_hook = systemctl reload rabbitmq

Mettez à jour la commande ci-dessus pour tout ce que vous devez exécuter pour recharger votre serveur ou exécutez votre script munging de fichier personnalisé. Habituellement, sur CentOS, vous utiliserez principalement systemctl pour recharger un service. Enregistrez et fermez le fichier, puis exécutez une simulation Certbot pour vous assurer que la syntaxe est correcte :

sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Certbot est configuré pour se renouveler si nécessaire et exécuter toutes les commandes nécessaires pour obtenir votre service en utilisant les nouveaux fichiers.

Conclusion

Dans ce didacticiel, nous avons installé le client Certbot Let's Encrypt, téléchargé un certificat SSL en mode autonome et activé les renouvellements automatiques avec des crochets de renouvellement. Cela devrait vous donner un bon départ pour utiliser les certificats Let's Encrypt avec des services autres que votre serveur Web habituel.

Pour plus d'informations, veuillez consulter la documentation de Certbot.