Hoe te gebruiken Let's encrypt SSL-certificaten voor HTTPS-farms

GEPOST DOOR Zevenet | 3 juli 2019

Overzicht

Let's Encrypt is een open en geautomatiseerde certificeringsinstantie die de ACME (Automatische certificaatbeheersomgeving) protocol om gratis TLS / SSL-certificaten aan elke compatibele client te verstrekken. Deze certificaten kunnen worden gebruikt om de communicatie tussen de webservers en gebruikers te coderen.

Deze tutorial bespreekt kort de certificaatautoriteiten en hoe Zevenet-integratie werkt met Let's Encrypt, en bekijkt vervolgens hoe Zevenet de certbot (ACME-client) om de communicatie met Let's encrypt-infrastructuur te maken.

Zevenet Load Balancer 6.0.3 of hogere versie bevat een kleine certbot-wrapper genaamd letsencryptz om de Certbot webroot-functionaliteit te gebruiken, leggen de volgende regels uit hoe deze wrapper werkt, neem dit allemaal in overweging om het in productie-omgevingen te laten werken.

Hoe werkt de validatie van Let's encrypt?

Als een korte beschrijving van de webroot-functionaliteit werkt de webroot-plug-in door een tijdelijk bestand te maken voor elk van uw aangevraagde domeinen in het Zevenet-bestandspad /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Vervolgens doet de Let's Encrypt-validatieserver HTTP-verzoeken om te valideren dat de DNS voor elk aangevraagd domein wordt omgezet naar de server waarop letsencryptz-wrapper draait en dat het tijdelijke bestand voor validatiedoeleinden toegankelijk is, het volgende diagram beschrijft een echt voorbeeld:

Laten we Zevenet versleutelen

In het vorige diagram bevindt de Zevenet Load-balancer zich achter een router / firewall met een openbaar IP-adres 185.79.20.147 (als voorbeeld), het HTTP- en HTTPS-verkeer is natt voor interne load-balancer met VIP 192.168.101.31 (als voorbeeld), waarbij de load-balancer is geconfigureerd met verschillende 2-farms:

HTTPS Farm Name Web hosting via 192.168.101.31:443. Deze boerderij is verantwoordelijk voor het aanbieden van webhosting, verschillende webservers worden samen met deze gepubliceerd op internet. Bijvoorbeeld, test1.zevenet.es, test2.zevenet.es, test3.zevenet.es zijn het testen van webpagina's gepubliceerd op deze virtuele dienst onder anderen.
HTTP Farm Name WebhostingRedirect via 192.168.101.31:80. Deze farm wordt alleen gebruikt voor omleidingsdoeleinden en dwingt al het verkeer van HTTP naar HTTPS.

Het vorige diagram beschrijft een SSL Let's Encrypt Certificate-aanvraag voor het domein test1.zevenet.es als volgt:

1. Een certificaatverzoek wordt vanuit de load balancer zelf naar de Let's Encrypt-infrastructuur gestuurd.
2. Let's encrypt detecteert het nieuwe SSL-certificaatverzoek voor test1.zevenet.es
3. Laten we een DNS IP-resolutie uitvoeren voor de gevraagde host: test1.zevenet.es controleren of het resultaat het openbare IP-adres is, hetzelfde oorsprong-IP dat de aanvraag heeft gestart.
4. Op dit punt kondigt Let's encrypt aan aan letsencryptz script (webroot cerbot) dat het nodig heeft om een ​​bestand met een te maken HASH in het openbare pad http://test1.zevenet.es/.well-know/acme-challenge/ (80 TCP-poort), lokale directory /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. dan, letsencryptz configureert een tijdelijke service om dit bestand toegankelijk te maken via internet (de farm WebhostingRedirect zal voor dit doel worden aangepast. Als er nog geen boerderij is geconfigureerd letsencryptz zal een tijdelijke creëren in deze VIP en Port).
6. Zodra letsencryptz bevestigt het maken van de tijdelijke service, Lets Encrypt-servers verifiëren dat het tijdelijke validatiebestand is gemaakt en de HASH inhoud is correct.
7. Ten slotte antwoorden Let's Encrypt-servers op het eerste verzoek met het reeds gemaakte certificaat voor het Gemeenschappelijke naam (CN) test1.zevenet.es.
8. Zevenet slaat het reeds gemaakte certificaat op in het lokale pad / Usr / local / zevenet / config / en het is klaar om te worden geconfigureerd in de farm Web hosting.

In dit stadium zou het nieuwe Let's Encrypt-certificaat worden gebruikt voor de virtuele HTTPS-service.

Laten we automatiseringsopdrachten versleutelen

Zoals beschreven, de letsencryptz script zal de vereiste acties automatiseren om uw SSL-certificaten te beheren, zoals aanmaken, vernieuwen, vernietigen of lijst, onder anderen. Zoek hieronder de beschikbare commando's.

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.


De eerste keer dat letsencryptz wordt uitgevoerd, zal enige tijd duren omdat het systeem automatisch onopgeloste afhankelijkheden gaat installeren, er wordt ook een configuratie-evaluatie uitgevoerd voordat we het gaan gebruiken, Let's Encrypt vraagt ​​een e-mailaccount of contactdoeleinden met betrekking tot de certificaten, dit e-mailaccount wordt gebruikt bij elke actie die wordt ondernomen tegen het Let's Encrypt-systeem. Deze e-mail kan worden geconfigureerd in het hoofdconfiguratiebestand /usr/local/zevenet/config/global.conf, richtlijn $ le_email.

Enkele gebruiksvoorbeelden worden hieronder weergegeven.

Zevenet Let's Encrypt certificaatcreatie

Deze opdracht vraagt ​​om een ​​nieuw certificaat voor het domein test2.zevenet.es. Houd er rekening mee dat de gegeven VIP de interne is, welk verkeer van de openbare IP naar de interne moet worden natteerd. Als Let's Encrypt deze service niet kan bereiken, wordt het verzoek afgewezen.

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: 

Zevenet Let's Encrypt-certificatenlijst

De uitvoering van deze opdracht toont de huidige certificaten die worden beheerd door het Zevenet Let's Encrypt-systeem.

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


Houd rekening met het veld Certificaatnaam, wordt dit veld door de letsencryptz-wrapper herkend als –Certnaam.

Zevenet Let's Encrypt certificaatvernieuwing

De vorige opdracht controleert of een al gegenereerd certificaat een vernieuwing vereist, in welk geval de vernieuwing automatisch wordt uitgevoerd. Houd er rekening mee dat als het vernieuwde certificaat in gebruik is, een herstart van de boerderij vereist is om de wijziging toe te passen, gebruik dan de optie -Forcerestart als je wilt letsencryptz herstart alle vereiste bedrijven om de wijzigingen toe te passen.

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

Zevenet Let's Encrypt certificaatverwijdering

Met deze opdracht wordt het gegeven certificaat ingetrokken en verwijderd. In het geval dat het systeem detecteert dat het geselecteerde certificaat momenteel in gebruik is door een HTTPS-farm, wordt de actie afgewezen, in het bovenstaande voorbeeld wordt de verwijderactie geweigerd omdat het certificaat door de farm wordt gebruikt 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

Zodra het certificaat niet is toegewezen aan de boerderij, wordt de actie uitgevoerd:

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

Migreer Let's Encrypt-certificaten naar Zevenet

Zevenet Load balancer slaat alle configuratiebestanden van op certbot op het lokale pad / Usr / local / zevenet / config / letsencrypt /. Om uw bestaande certbot-configuratiebestanden te verplaatsen (standaard in / Etc / letsencrypt) van een andere server naar Zevenet, hoeft u alleen een tarball (tar.gz-bestand) van deze bestaande configuratiemap op uw server te maken en de inhoud in het Zevenet Let's Encrypt-configuratiepad uit te pakken. Overweeg ten slotte om de variabele te wijzigen $ le_email in het bestand global.conf naar dezelfde e-mail die in de vorige aanvragen is gebruikt.

Let's Encrypt Certificates Clustering-ondersteuning

De Zevenet Let's Encrypt-plug-in wordt volledig ondersteund met de Zevenet Cluster-service. Alle Let's Encrypt-acties worden opgeslagen in een configuratiebestand dat is gerepliceerd door de Zevenet Cluster Service, dus elke actie die wordt uitgevoerd in de MASTER knooppunt zal worden gerepliceerd naar de SLAAF knooppunt automatisch, maar elke actie die wordt uitgevoerd in de SLAAF knooppunt gerelateerd aan Let's Encrypt zal worden verwijderd om desynchronisatie te voorkomen.

Laten we certificaten automatisch vernieuwen

De Zevenet Let's Encrypt-plug-in kan worden geconfigureerd om dagelijks te controleren of een certificaat vernieuwd moet worden, in het geval dat het systeem automatisch een bepaald certificaat vernieuwt en het wordt gebruikt door een of andere boerderij, dan wordt de boerderij automatisch opnieuw opgestart om de certificaat wijzigen.

Ga als volgt te werk om het automatisch verlengen te configureren:

Maak het volgende cron-bestand /etc/cron.d/letsencryptz met de volgende inhoud:

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

Met deze configuratie wordt de vernieuwingscontrole dagelijks om 00:00 uur (middernacht) uitgevoerd. En de VIP 192.168.101.31 zal worden gebruikt in poort 80 voor verificatiedoeleinden van Let's Encrypt System.

Referenties

Enkele verwijzingen in dit artikel zijn:

Webroot en Certbot
Hoe Let's Encrypt werkt

Delen op:

Documentatie onder de voorwaarden van de GNU-licentie voor vrije documentatie.

Was dit artikel behulpzaam?

Gerelateerde artikelen