Comment récupérer des certificats génériques SSL Let's Encrypt à l'aide de la validation CloudFlare sur CentOS 7

De Get Docs
Aller à :navigation, rechercher

L'auteur a sélectionné Code.org pour recevoir un don dans le cadre du programme Write for DOnations.

Introduction

Let's Encrypt est une autorité de certification (CA) qui fournit des certificats gratuits pour le chiffrement Transport Layer Security (TLS). Il fournit un client logiciel appelé Certbot qui simplifie le processus de création, de validation, de signature, d'installation et de renouvellement de certificat.

Let's Encrypt prend désormais en charge les certificats génériques qui vous permettent de sécuriser tous les sous-domaines d'un domaine avec un seul certificat. Cela sera utile si vous souhaitez héberger plusieurs services, tels que des interfaces Web, des API et d'autres sites à l'aide d'un seul serveur.

Pour obtenir un certificat générique de Let's Encrypt, vous devez utiliser l'un des plugins DNS de Certbot, qui incluent :

  • certbot-dns-cloudflare
  • certbot-dns-route53
  • certbot-dns-google
  • certbot-dns-digitalocean

Le plugin que vous choisissez dépend du service qui héberge vos enregistrements DNS. Dans ce didacticiel, vous obtiendrez un certificat générique pour votre domaine en utilisant la validation CloudFlare avec Certbot sur CentOS 7. Vous allez ensuite configurer le certificat pour le renouveler lorsqu'il expire.

Conditions préalables

Pour terminer ce didacticiel, vous aurez besoin des éléments suivants :

Étape 1 - Installation de Certbot

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

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

sudo yum install -y epel-release

Une fois l'installation terminée, vous pouvez installer certbot :

sudo yum install -y certbot

Et installez ensuite le plugin CloudFlare pour Certbot :

sudo yum install -y python2-cloudflare python2-certbot-dns-cloudflare

Si vous utilisez un autre service DNS, vous pouvez trouver le plugin correspondant à l'aide de la commande yum search :

yum search python2-certbot-dns

Vous avez préparé votre serveur pour obtenir des certificats. Vous devez maintenant obtenir la clé API de CloudFlare.

Étape 2 - Obtenir l'API CloudFlare

Pour que Certbot renouvelle automatiquement les certificats génériques, vous devez lui fournir votre identifiant CloudFlare et votre clé API.

Connectez-vous à votre compte Cloudflare et accédez à la Page de profil.

Cliquez sur le bouton View dans la ligne Global API Key.

Pour des raisons de sécurité, il vous sera demandé de saisir à nouveau le mot de passe de votre compte Cloudflare. Saisissez-le et validez le CAPTCHA. Cliquez ensuite à nouveau sur le bouton Afficher. Vous verrez votre clé API :

Copiez cette clé. Vous l'utiliserez à l'étape suivante.

Retournez maintenant sur votre serveur pour continuer le processus d'obtention du certificat.

Étape 3 - Configuration de Certbot

Vous disposez de toutes les informations nécessaires pour indiquer à Certbot comment utiliser Cloudflare, mais écrivons-les dans un fichier de configuration afin que Сertbot puisse l'utiliser automatiquement.

Exécutez d'abord la commande certbot sans aucun paramètre pour créer le fichier de configuration initial :

sudo certbot

Créez ensuite un fichier de configuration dans le répertoire /etc/letsencrypt qui contiendra votre e-mail et votre clé API CloudFlare :

sudo vi /etc/letsencrypt/cloudflareapi.cfg

Ajoutez-y ce qui suit, en remplaçant les espaces réservés par votre identifiant Cloudflare et votre clé API :

/etc/letsencrypt/cloudflareapi.cfg

dns_cloudflare_email = your_cloudflare_login
dns_cloudflare_api_key = your_cloudflare_api_key

Enregistrez le fichier et quittez l'éditeur. Avec la clé API de Cloudflare, vous pouvez faire les mêmes choses depuis la ligne de commande que vous pouvez faire depuis l'interface utilisateur Cloudflare, donc afin de protéger votre compte, rendez le fichier de configuration lisible uniquement par son propriétaire afin que personne d'autre ne puisse obtenir votre clé :

sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg

Avec les fichiers de configuration en place, obtenons un certificat.

Étape 4 — Obtention du certificat

Pour obtenir un certificat, nous allons utiliser la commande certbot et spécifier le plugin que nous voulons, le fichier d'informations d'identification que nous voulons utiliser et le serveur que nous devons utiliser pour gérer la demande. Par défaut, Certbot utilise les serveurs de production de Let's Encrypt, qui utilisent l'API ACME version 1, mais Certbot utilise un autre protocole pour obtenir des certificats génériques, vous devez donc fournir un point de terminaison ACME v2.

Exécutez la commande suivante pour obtenir le certificat générique pour votre domaine :

sudo certbot certonly --cert-name your_domain --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg --server https://acme-v02.api.letsencrypt.org/directory -d "*.your_domain" -d your_domain

Il vous sera demandé de spécifier l'adresse e-mail qui doit recevoir les avis urgents de renouvellement et de sécurité :

Output...
Plugins selected: Authenticator dns-cloudflare, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): your email

Ensuite, il vous sera demandé d'accepter les conditions d'utilisation :

Output-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

Ensuite, il vous sera demandé de partager votre adresse e-mail avec l'Electronic Frontier Foundation :

Output-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N

Ensuite, Certbot obtiendra vos certificats. Vous verrez le message suivant :

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

Vous avez maintenant votre certificat générique. Jetons un coup d'œil à ce que Certbot a téléchargé pour vous. Utilisez la commande ls pour voir le contenu du répertoire contenant vos clés et certificats :

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

Le fichier README contient des informations sur ces fichiers :

$ cat /etc/letsencrypt/live/your_domain/README

Vous verrez une sortie comme celle-ci :

LISEZMOI

This directory contains your keys and certificates.

`privkey.pem`  : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem`     : will break many server configurations, and should not be used
                 without reading further documentation (see link below).

We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

À partir de là, vous pouvez configurer vos serveurs avec le certificat générique. Vous n'aurez généralement besoin que de deux de ces fichiers : fullchain.pem et privkey.pem.

Par exemple, vous pouvez configurer plusieurs services Web :

  • wwww.exemple.com
  • api.exemple.com
  • mail.exemple.com

Pour ce faire, vous aurez besoin d'un serveur Web, tel qu'Apache ou Nginx. L'installation et la configuration de ces serveurs dépassent le cadre de ce didacticiel, mais les guides suivants vous guideront à travers toutes les étapes nécessaires pour configurer les serveurs et appliquer vos certificats.

Pour Nginx, jetez un œil à ces tutoriels :

Pour Apache, consultez ces tutoriels :

Examinons maintenant le renouvellement automatique des certificats.

Étape 5 — Renouvellement des certificats

Let's Encrypt émet des certificats de courte durée valables 90 jours. Nous devrons configurer une tâche cron pour vérifier les certificats expirants et les renouveler automatiquement.

Créons une tâche cron qui exécutera la vérification de renouvellement quotidiennement.

Utilisez la commande suivante pour ouvrir le fichier crontab pour le modifier :

sudo crontab -e

Ajoutez la ligne suivante au fichier pour tenter de renouveler les certificats quotidiennement :

crontab

30 2 * * * certbot renew --noninteractive
  • 30 2 * * * signifie "exécutez la commande suivante à 2h30 du matin, tous les jours".
  • La commande certbot renew vérifiera tous les certificats installés sur le système et mettra à jour ceux qui doivent expirer dans moins de trente jours.
  • --noninteractive indique à Certbot de ne pas attendre l'entrée de l'utilisateur.

Vous devrez recharger votre serveur Web après la mise à jour de vos certificats. La commande renew inclut des crochets pour exécuter des commandes ou des scripts avant ou après le renouvellement d'un certificat. Vous pouvez également configurer ces hooks dans le fichier de configuration de renouvellement de votre domaine.

Par exemple, pour recharger votre serveur Nginx, ouvrez le fichier de configuration du renouvellement :

sudo vi /etc/letsencrypt/renewal/your_domain.conf

Ajoutez ensuite la ligne suivante sous la section [renewalparams] :

/etc/letsencrypt/renewal/<^>votre_domaine<^>.conf

renew_hook = systemctl reload nginx

Désormais, Certbot redémarrera automatiquement votre serveur Web après l'installation du certificat mis à jour.

Conclusion

Dans ce didacticiel, vous avez installé le client Certbot, obtenu votre certificat générique à l'aide de la validation DNS et activé les renouvellements automatiques. Cela vous permettra d'utiliser un seul certificat avec plusieurs sous-domaines de votre domaine et de sécuriser vos services Web.