Comment récupérer les certificats SSL Wildcard Let’s Encrypt à l’aide de la validation CloudFlare sur CentOS 7

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

introduction

Let’s Encrypt est une autorité de certification (CA) qui fournit des certificats gratuits pourTransport Layer Security (TLS) encryption. 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 leswildcard certificates 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 utilisant un seul serveur.

Pour obtenir un certificat générique de Let’s Encrypt, vous devez utiliser l’un desDNS plugins de Certbot, qui comprend:

  • certbot-dns-cloudflare

  • certbot-dns-route53

  • certbot-dns-google

  • certbot-dns-digitalocean

Le plug-in 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 validationCloudFlare avec Certbot sur CentOS 7. Vous allez ensuite configurer le certificat pour le renouveler lorsqu'il expire.

Conditions préalables

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

[[step-1 -—- Installing-certbot]] == Étape 1 - Installation de Certbot

Le packagecertbot n’est pas disponible par défaut via le gestionnaire de packages de CentOS. Vous devrez activer le référentielEPEL pour installer Certbot et ses plugins.

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

sudo yum install -y epel-release

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

sudo yum install -y certbot

Et installez ensuite le plugin CloudFlare pour Certbot:

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

[.Remarque]##

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

yum search python2-certbot-dns

Vous avez préparé votre serveur pour obtenir des certificats. Maintenant, vous devez obtenir la clé API auprès de CloudFlare.

[[step-2 -—- getting-the-cloudflare-api]] == É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 auxProfile page.

Cliquez sur le boutonView dans la ligneGlobal API Key.

CloudFlare Profile - API Keys

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

CloudFlare Profile - API Keys

Copiez cette clé. Vous allez l'utiliser dans la prochaine étape.

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

[[step-3 -—- configuring-certbot]] == Étape 3 - Configuration de Certbot

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

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

sudo certbot

Ensuite, créez un fichier de configuration dans le répertoire/etc/letsencrypt qui contiendra votre email CloudFlare et votre clé API:

sudo vi /etc/letsencrypt/cloudflareapi.cfg

Ajoutez-y les éléments suivants, en remplaçant les espaces réservés par votre clé de connexion et votre clé API Cloudflare:

/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 à partir de la ligne de commande que vous pouvez faire à partir de l'interface utilisateur de 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.

[[step-4 -—- getting-the-certificate]] == Étape 4 - Obtention du certificat

Pour obtenir un certificat, nous utiliserons la commandecertbot et spécifierons le plug-in que nous voulons, le fichier d'informations d'identification que nous voulons utiliser et le serveur que nous devrions utiliser pour traiter la demande. Par défaut, Certbot utilise les serveurs de production de Let’s Encrypt, qui utilisent l’API deACME 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 de renouvellement et de sécurité urgents:

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, vous serez invité à 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

Il vous sera ensuite demandé de partager votre adresse e-mail avec la Fondation Electronic Frontier
:

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

Maintenant, vous avez votre certificat générique. Jetons un coup d’œil à ce que Certbot a téléchargé pour vous. Utilisez la commandels pour voir le contenu du répertoire qui contient vos clés et certificats:

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

Le fichierREADME contient des informations sur ces fichiers:

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

Vous verrez la sortie comme ceci:

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’avez généralement besoin que de deux de ces fichiers:fullchain.pem etprivkey.pem.

Par exemple, vous pouvez configurer plusieurs services Web:

  • wwww.example.com

  • api.example.com

  • courrier.example.com

Pour ce faire, vous aurez besoin d’un serveur Web, tel qu’Apache ou Nginx. L'installation et la configuration de ces serveurs vont au-delà de la portée de ce didacticiel, mais les guides suivants vous guideront à travers toutes les étapes nécessaires à la configuration des serveurs et à l'application de vos certificats.

Pour Nginx, consultez ces didacticiels:

Pour Apache, consultez ces tutoriels:

Voyons maintenant comment renouveler les certificats automatiquement.

[[step-5 -—- renewing-certificates]] == Étape 5 - Renouvellement des certificats

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

Créons uncron task
qui exécutera le contrôle de renouvellement tous les jours.

Utilisez la commande suivante pour ouvrir le fichiercrontab 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écuter la commande suivante à 2h30, tous les jours».

  • La commandecertbot renew vérifiera tous les certificats installés sur le système et mettra à jour ceux qui sont configurés pour expirer dans moins de trente jours.

  • --noninteractive dit à 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 commanderenew inclut des hooks pour exécuter des commandes ou des scripts avant ou après le renouvellement d'un certificat. Vous pouvez également configurer ces points d'ancrage dans le fichier de configuration de renouvellement pour votre domaine.

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

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

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

your_domain.conf’>/etc/letsencrypt/renewal/your_domain.conf

renew_hook = systemctl reload nginx

Désormais, Certbot redémarrera automatiquement votre serveur Web après avoir installé le certificat mis à jour.

Conclusion

Dans ce tutoriel, 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.