Comment utiliser Let's encrypt SSL Certificates pour les fermes HTTPS

PUBLIÉ LE 3 juillet, 2019

Aperçu

Let's Encrypt est une autorité de certification ouverte et automatisée qui utilise le ACME (Environnement de gestion automatique des certificats) pour fournir des certificats TLS / SSL gratuits à tout client compatible. Ces certificats peuvent être utilisés pour chiffrer la communication entre les serveurs Web et les utilisateurs.

Ce didacticiel abordera brièvement les autorités de certification et le fonctionnement de l'intégration de Zevenet avec Let's Encrypt, puis examinera comment Zevenet utilise certbot (Client ACME) afin d'établir la communication avec l'infrastructure Let's encrypt.

Zevenet Load Balancer 6.0.3 ou une version ultérieure inclut un minuscule wrapper de certbot appelé permetencryptz Afin d’utiliser la fonctionnalité Web Racine de Certbot, les lignes suivantes expliquent le fonctionnement de ce wrapper. Veuillez tenir compte de tout cela pour le rendre opérationnel dans les environnements de production.

Comment fonctionne la validation Let's encrypt?

En tant que brève description de la fonctionnalité webroot, le plugin webroot fonctionne en créant un fichier temporaire pour chacun des domaines demandés dans le chemin du fichier Zevenet. /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Ensuite, le serveur de validation Let's Encrypt effectue des requêtes HTTP pour valider que le DNS de chaque domaine demandé est résolu sur le serveur exécutant le wrapper letsencryptz et que le fichier temporaire à des fins de validation est accessible, le diagramme suivant décrit un exemple réel:

Chiffrons Zevenet

Dans le diagramme précédent, l’équilibreur de charge Zevenet se trouve derrière un routeur / pare-feu avec une adresse IP publique. 185.79.20.147 (à titre d'exemple), le trafic HTTP et HTTPS est transféré à l'équilibreur de charge interne avec VIP 192.168.101.31 (à titre d'exemple), l'équilibreur de charge étant configuré avec différentes batteries 2:

Nom de la ferme HTTPS Hébergement Web via 192.168.101.31:443. Cette batterie de serveurs est responsable de l'offre d'hébergement Web. Différents serveurs Web sont également publiés sur Internet. Par exemple, test1.zevenet.es, test2.zevenet.es, test3.zevenet.es testons entre autres les pages Web publiées sur ce service virtuel.
Nom de la batterie HTTP WebhostingRedirect via 192.168.101.31:80. Cette batterie de serveurs est uniquement utilisée à des fins de redirection. Elle force tout le trafic de HTTP à HTTPS.

Le diagramme précédent décrit une demande de certificat SSL Let's Encrypt pour le domaine test1.zevenet.es comme suit:

1. Une demande de certificat est envoyée depuis l'équilibreur de charge lui-même vers l'infrastructure Let's Encrypt.
2. Let's encrypt détecte la nouvelle demande de certificat SSL pour test1.zevenet.es
3. Cryptons exécutons une résolution IP DNS pour l'hôte demandé: test1.zevenet.es vérifier que le résultat est l'adresse IP publique, la même adresse IP d'origine que celle qui a initié la demande.
4. À ce stade, Let's encrypt annonce permetencryptz script (webroot cerbot) nécessaire pour créer un fichier avec un HASH dans le chemin public http://test1.zevenet.es/.well-know/acme-challenge/ (Port TCP 80), répertoire local /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Alors, permetencryptz configure un service temporel afin de rendre ce fichier accessible depuis Internet (la batterie de serveurs). WebhostingRedirect va être modifié à cet effet. S'il n'y a pas de batterie déjà configurée permetencryptz créera un temporel dans ce VIP et Port).
6. Aussitôt que permetencryptz confirme la création temporaire du service, permet aux serveurs d’Encrypt de vérifier que le fichier de validation temporel a été créé et HASH le contenu est correct.
7. Enfin, les serveurs Let's Encrypt répondent à la première requête avec le certificat déjà créé pour le Nom commun (CN) test1.zevenet.es.
8. Zevenet stockera le certificat déjà créé dans le chemin local / usr / local / zevenet / config / et il est prêt à être configuré dans la ferme Hébergement Web.

À ce stade, le nouveau certificat Let's Encrypt serait utilisé pour le service virtuel HTTPS.

Let's Encrypt Automation Commands

Comme décrit, le permetencryptz script automatisera les actions requises pour gérer vos certificats SSL tels que créer, renouveler, détruire ou lister, entre autres. Retrouvez ci-dessous les commandes disponibles.

root@zva6k:~# letsencryptz

letsencryptz description:

letsencryptz is a let's encrypt (certbot) wrapper with minimal parameters ready to manage Let's Encrypt certificates for ZEVENET https profiles. Take into account that this wrapper uses certbot webroot feature so the public Let's encrypt architecture requires to connect with a local Virtual IP and port (TCP 80 by default) in order to do a request validation for the requested domain, so as soon as the "obtain" param is used, this script will configure an HTTP farm which will be accessed by Let's encrypt for verification purpose, this configuration is done automatically by this script itself, only ensure that the used Virtual IP and HTTP port 80 is not used by any another load balanced farm, and also ensure that the DNS resolution for the requested domain is reachable from let's encrypt system.


usage:

/usr/local/zevenet/bin/letsencryptz <action> <commands>

action: --obtain | --destroy | --renew | --list | --listconf | --help

	--obtain: Request new Certificates using webroot cert-bot module.

		commands: --vip <Virtual IP> --farm <Farm Name> --domain <domain1> --domain <domain2> --domain <domainN> --test

        		--vip: The Virtual IP already configured were to publish a temporal web server, this will be connected by let's encrypt public servers to verify the certificate request. The Virtual IP has to be free on the 80 port in order to be bound by a local process, if it isn't free then use --farm instead.
        		--farm: The farm name which configures a temporal Service called "letsencryptz", if no farm is used a temporal farm called "letsencryptZevenet" will be configured in the selected Virtual IP.
        		--domain: The domain which requests the Certificate for, i.e. www.mycompany.com.
			--test: Optional parameter, if used the certificate is requested for test purpose.

	--destroy: Revoke and delete the indicated Certificate Name, the action is rejected if the given certificate is in use by a farm.
		
		commands: --certname <Certificate Name>
	       	
			--certname: Certificate Name, this value can be obtained from the action --list.

	--renew: Renew the certificates near to expiry, no commands needed
		
		commands: --test --forcerestart --vip <Virtual IP> --farm <Farm Name>
	       		--test:	Optional parameter, if used a dry-run is executed, the renew of the certificates is simulated. 
			--forcerestart: Optional parameter, if used the farms that are using the renewed certificates will be restarted in order to apply the changes.
                        --vip: The Virtual IP already configured where to publish a temporal web server, this will be connected by let's encrypt public servers to verify the certificate renew. The Virtual IP has to be free on the 80 port in order to be bound by a local process, if it isn't free then use --farm instead.
                        --farm: The farm name which configures a temporal Service called "letsencryptz", if no farm is used a temporal farm called "letsencryptZevenet" will be configured in the selected Virtual IP.

	--list: List all the local certificates managed by let's encrypt and the status, no commands needed.

	--listconf: List the Zevenet let's encrypt configuration module (check global.conf file), no commands needed. 

	--help: Obtain this help.


Cela prendra un certain temps la première fois que letsencryptz est exécuté car le système va installer automatiquement les dépendances non résolues, également un examen de la configuration est effectué avant de commencer à l'utiliser, Let's Encrypt demande un compte de messagerie ou des fins de contact liées aux certificats, ce compte de messagerie sera utilisé lors de toute action effectuée contre le système Let's Encrypt, cet e-mail peut être configuré dans le fichier de configuration principal /usr/local/zevenet/config/global.conf, directive $ le_email.

Quelques exemples d'utilisation sont présentés ci-dessous.

Création de certificat Zevenet Let's Encrypt

Cette commande demande un nouveau certificat pour le domaine. test2.zevenet.es. Tenez compte du fait que le VIP donné sera le VIP interne, dont le trafic doit être transféré de l'adresse IP publique à l'adresse IP interne. Si Let's Encrypt ne parvient pas à atteindre ce service, la demande sera refusée.

root@zva6k:~# letsencryptz --obtain --vip 192.168.101.31 --domain test2.zevenet.es
WARNING: No farm name specified, a temporal farm with name letsencryptZevenet will be created in VIP 192.168.101.31 port 80.
Configuring farm for let's encrypt Certificate Name verification
Obtaining Certificate for domains test2.zevenet.es...
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Non-standard path(s), might not work with crontab installed by your operating system package manager
Certificate Request for the domain(s) test2.zevenet.es OK
Created Certificate name test2.zevenet.es in PEM format ready for HTTPS profile
Destroying webroot configuration for the farm letsencryptZevenet
Deleting already configuration for letsencryptZevenet, service letsencryptz
Restarting farms using renewed certificates: 

Liste des certificats Zevenet Let's Encrypt

L'exécution de cette commande affichera les certificats actuels gérés par le système Zevenet Let's Encrypt.

root@zva6k:~# letsencryptz --list
Listing all available certificates for the current configuration in config dir /usr/local/zevenet/config/letsencrypt/
Saving debug log to /var/log/letsencrypt/letsencrypt.log
	Certificate Name: test1.zevenet.es
	Domain(s): test1.zevenet.es
	Expiry Date: 2019-09-19 10:48:02+00:00 (VALID: 77 days)
	Pem Certificate file: /usr/local/zevenet/config/test1_zevenet_es.pem

	Certificate Name: test3.zevenet.es
	Domain(s): test3.zevenet.es
	Expiry Date: 2019-09-26 06:32:52+00:00 (VALID: 83 days)
	Pem Certificate file: /usr/local/zevenet/config/test3_zevenet_es.pem


Prendre en compte le terrain Nom du certificat, ce champ sera reconnu par l’encapsuleur letsencryptz comme –Certname.

Renouvellement du certificat Zevenet Let's Encrypt

La commande précédente vérifie si un certificat déjà généré nécessite un renouvellement, auquel cas le renouvellement sera effectué automatiquement. Notez que si le certificat renouvelé est en cours d'utilisation, un redémarrage de la ferme sera nécessaire pour appliquer le changement, veuillez utiliser l'option –Forcerestart si tu veux permetencryptz redémarre toutes les batteries de serveurs requises pour appliquer les modifications.

root@zva6k:~# letsencryptz --renew --vip 192.168.101.31
Renewing all the required certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Cert not yet due for renewal
Cert not yet due for renewal

Suppression du certificat Zevenet Let's Encrypt

Cette commande révoque et supprime le certificat donné. Si le système détecte que le certificat sélectionné est actuellement utilisé par une batterie de serveurs HTTPS, l'action sera rejetée. Dans l'exemple ci-dessus, l'action de suppression est rejetée car le certificat est utilisé par la batterie. testhttps.

root@zva6k:~# letsencryptz --destroy --certname test3.zevenet.es
Revoking and deleting certificate(s) test3.zevenet.es for the current configuration...
This file can't be deleted because is used by the farm(s):  testhttps

Dès que le certificat n'est plus attribué à la batterie, l'action sera effectuée:

root@zva6k:~# letsencryptz --destroy --certname test3.zevenet.es
Revoking and deleting certificate(s) test3.zevenet.es for the current configuration...
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Deleted certificate(s) test3.zevenet.es in path /usr/local/zevenet/config/test3_zevenet_es.pem

Migrer les certificats Let's Encrypt vers Zevenet

Zevenet Load Balancer enregistre tous les fichiers de configuration de certbot dans le chemin local / usr / local / zevenet / config / letsencrypt /. Pour déplacer vos fichiers de configuration certbot existants (par défaut dans / etc / letsencrypt) d'un autre serveur vers Zevenet, il vous suffit de créer une archive tar (fichier tar.gz) de ce répertoire de configuration existant sur votre serveur et de décompresser le contenu dans le chemin de configuration Zevenet Let's Encrypt. Enfin, pensez à modifier la variable $ le_email dans le fichier global.conf au même email que celui utilisé dans les requêtes précédentes.

Prise en charge du clustering de certificats Let's Encrypt

Le plugin Zevenet Let's Encrypt est totalement pris en charge avec le service Zevenet Cluster. Toutes les actions Let's Encrypt sont enregistrées dans un fichier de configuration répliqué par le Zevenet Cluster Service, donc toute action exécutée dans le MASTER noeud sera répliqué sur le ESCLAVE nœud automatiquement, mais toute action exécutée dans le ESCLAVE Le nœud lié à Let's Encrypt sera supprimé afin d'éviter toute désynchronisation.

Renouvellement automatique des certificats Let's Encrypt

Le plugin Zevenet Let's Encrypt peut être configuré afin de vérifier quotidiennement si un certificat nécessite un renouvellement, au cas où le système renouvelle automatiquement un certificat donné et qu'il est utilisé par une ferme, la ferme sera redémarrée automatiquement afin d'appliquer le changement de certificat.

Pour configurer le renouvellement automatique, procédez comme suit:

Créez le fichier cron suivant /etc/cron.d/letsencryptz avec le contenu suivant:

root@zva6k:~# cat /etc/cron.d/letsencryptz
00 00 * * *	root	/usr/local/zevenet/bin/letsencryptz --renew --forcerestart --vip 192.168.101.31

Avec cette configuration, le contrôle de renouvellement sera exécuté quotidiennement à 00h00 (minuit). Et le VIP 192.168.101.31 sera utilisé dans le port 80 à des fins de vérification à partir de Let's Encrypt System.

Références

Certaines références utilisées dans cet article sont:

Webroot et Certbot
Comment fonctionne Let's Encrypt

Partager sur:

Documentation sous les termes de la licence de documentation libre GNU.

Cet article a-t-il été utile?

Articles Relatifs