Come utilizzare Crittografiamo i certificati SSL per le farm HTTPS

PUBBLICATO DA Zevenet | 3 luglio, 2019

Descrizione

Let's Encrypt è un'autorità di certificazione aperta e automatizzata che utilizza l'estensione ACME (Ambiente di gestione certificati automatico) protocollo per fornire certificati TLS / SSL gratuiti a qualsiasi client compatibile. Questi certificati possono essere utilizzati per crittografare le comunicazioni tra i server Web e gli utenti.

Questo tutorial discuterà brevemente delle autorità di certificazione e di come funziona l'integrazione di Zevenet con Let's Encrypt, quindi esaminerà come Zevenet utilizza il certbot (Client ACME) per poter comunicare con l'infrastruttura Let's encrypt.

Zevenet Load Balancer 6.0.3 o versione successiva include un piccolo wrapper certbot chiamato letsencryptz per poter utilizzare la funzionalità di webroot di Certbot, le seguenti righe spiegano come funziona questo wrapper, si prega di tenerne conto al fine di farlo funzionare negli ambienti di produzione.

Come funziona la convalida di Let's Encrypt?

Come una breve descrizione della funzionalità webroot, il plug-in Webroot funziona creando un file temporaneo per ciascuno dei domini richiesti nel percorso file Zevenet /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Quindi il server di convalida Let's Encrypt effettua richieste HTTP per convalidare che il DNS per ogni dominio richiesto si risolva nel server che esegue il wrapper di letsencryptz e il file temporaneo per scopi di convalida è accessibile, il diagramma seguente descrive un esempio reale:

Facciamo criptare Zevenet

Nel diagramma precedente, Zevenet Load Balancer si trova dietro un router / firewall con un indirizzo IP pubblico 185.79.20.147 (ad esempio), il traffico HTTP e HTTPS è nattato al bilanciamento del carico interno con VIP 192.168.101.31 (ad esempio), in cui il bilanciamento del carico è configurato con 2 farm differenti:

Nome dell'azienda HTTPS Web hosting via 192.168.101.31:443. Questa farm è responsabile dell'offerta di web hosting, diversi server web sono pubblicati insieme a questo su Internet. Per esempio, test1.zevenet.es, test2.zevenet.es, test3.zevenet.es stanno testando le pagine web pubblicate su questo servizio virtuale tra gli altri.
Nome farm HTTP WebhostingRedirect via 192.168.101.31:80. Questa farm viene utilizzata solo per scopi di reindirizzamento, impone tutto il traffico da HTTP a HTTPS.

Il diagramma precedente descrive una richiesta di certificato SSL Let's Encrypt per il dominio test1.zevenet.es come segue:

1. Una richiesta di certificato viene inviata dal sistema di bilanciamento del carico stesso all'infrastruttura Let's Encrypt.
2. Let's encrypt rileva la nuova richiesta di certificato SSL per test1.zevenet.es
3. Facciamo crittografare, eseguire una risoluzione IP DNS per l'host richiesto: test1.zevenet.es controllando che il risultato sia l'IP pubblico, lo stesso IP di origine che ha avviato la richiesta.
4. A questo punto Let's encrypt annuncia a letsencryptz script (webroot cerbot) che ha bisogno di creare un file con a HASH nel percorso pubblico http://test1.zevenet.es/.well-know/acme-challenge/ (80 TCP Port), Directory locale /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Poi, letsencryptz configura un servizio temporale per rendere questo file accessibile da Internet (la fattoria WebhostingRedirect sta per essere modificato per questo scopo. Se la farm non è già configurata letsencryptz creerà uno temporale in questo VIP e Port).
6. Non appena letsencryptz conferma la creazione del servizio temporaneo, i server Lets Encrypt verificano che il file di validazione temporale sia stato creato e il file HASH il contenuto è corretto
7. Infine, i server Let's Encrypt rispondono alla prima richiesta con il certificato già creato per il Nome comune (CN) test1.zevenet.es.
8. Zevenet memorizzerà il certificato già creato nel percorso locale / Usr / local / zevenet / config / ed è pronto per essere configurato nella farm Web hosting.

In questa fase, il nuovo certificato Let's Encrypt verrà utilizzato per il servizio virtuale HTTPS.

Crittografiamo i comandi di automazione

Come descritto, il letsencryptz lo script automatizza le azioni richieste per gestire i certificati SSL come creare, rinnovare, distruggere o elencare, tra gli altri. Trova sotto i comandi disponibili.

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.


Ci vorrà del tempo la prima volta che viene eseguito letsencryptz perché il sistema installerà automaticamente le dipendenze non risolte, inoltre viene eseguita una revisione della configurazione prima di iniziare a usarlo, Let's Encrypt richiede un account di posta elettronica o contatti per scopi relativi ai certificati, questo account di posta elettronica verrà utilizzato durante qualsiasi azione eseguita contro il sistema Let's Encrypt, questa email può essere configurata nel file di configurazione principale /usr/local/zevenet/config/global.conf, direttiva $ le_email.

Di seguito sono riportati alcuni esempi di utilizzo.

Zevenet Let's Encrypt creazione del certificato

Questo comando richiede un nuovo certificato per il dominio test2.zevenet.es. Tieni presente che il VIP dato sarà quello interno, il cui traffico dovrebbe essere nattato dall'IP pubblico a quello interno. Se Let's Encrypt non è in grado di raggiungere questo servizio, la richiesta verrà rifiutata.

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 elenco dei certificati

L'esecuzione di questo comando mostrerà i certificati correnti gestiti dal sistema 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


Prendi in considerazione il campo Nome del certificato, questo campo verrà riconosciuto dal wrapper letsencryptz come –Certname.

Zevenet Let's Encrypt rinnovo del certificato

Il comando precedente controlla se qualche certificato già generato richiede un rinnovo, nel qual caso il rinnovo verrà eseguito automaticamente. Tenere presente che se si utilizza il certificato rinnovato, è necessario riavviare la farm per applicare la modifica, utilizzare l'opzione –Forcerestart se si desidera letsencryptz riavvia tutte le farm necessarie per applicare le modifiche.

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 eliminazione del certificato

Questo comando revoca ed elimina il certificato dato. Nel caso in cui il sistema rilevi che il certificato selezionato è attualmente in uso da qualsiasi farm HTTPS, l'azione verrà rifiutata, nell'esempio sopra l'azione di eliminazione viene rifiutata perché il certificato è in uso dalla farm 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

Non appena il certificato non viene assegnato dalla farm, l'azione verrà eseguita:

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

Migrare Let's Encrypt Certificates a Zevenet

Zevenet Load Balancer salva tutti i file di configurazione di certbot nel percorso locale / Usr / local / zevenet / config / letsencrypt /. Per spostare i file di configurazione di certbot esistenti (per impostazione predefinita in / Etc / letsencrypt) di un altro server su Zevenet, devi solo creare un tarball (file tar.gz) di questa directory di configurazione esistente nel tuo server e decomprimere il contenuto nel percorso di configurazione Let's Encrypt di Zevenet. Infine, considera la possibilità di modificare la variabile $ le_email nel file global.conf alla stessa email utilizzata nelle richieste precedenti.

Let's Encrypt Certificates Clustering support

Il plugin Zevenet Let's Encrypt è totalmente supportato con il servizio Zevenet Cluster. Tutte le azioni Let's Encrypt vengono salvate in un file di configurazione replicato da Zevenet Cluster Service, quindi qualsiasi azione eseguita nel MASTER il nodo verrà replicato nel SCHIAVO nodo automaticamente, ma qualsiasi azione eseguita in SCHIAVO il nodo relativo a Let's Encrypt verrà scartato per evitare qualsiasi desincronizzazione.

Let's Encrypt certificati rinnovo automatico

Il plugin Zevenet Let's Encrypt può essere configurato in modo da controllare quotidianamente se qualche certificato necessita di un rinnovo, nel caso in cui il sistema rinnovi automaticamente un determinato certificato ed è utilizzato da qualche farm, allora la farm verrà riavviata automaticamente per applicare il modifica del certificato.

Per configurare il rinnovo automatico, procedi come segue:

Crea il seguente file cron /etc/cron.d/letsencryptz con il seguente contenuto:

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

Con questa configurazione, il controllo del rinnovo verrà eseguito ogni giorno alle 00:00 (mezzanotte). E il VIP 192.168.101.31 verrà utilizzato nella porta 80 a scopo di verifica da Let's Encrypt System.

Referenze

Alcuni riferimenti utilizzati in questo articolo sono:

Webroot e Certbot
Come funziona Let's Encrypt

Condividere su:

Documentazione sotto i termini della GNU Free Documentation License.

questo articolo è stato utile?

Articoli Correlati