Contenido
Resumen
Let's Encrypt es una autoridad de certificación abierta y automatizada que utiliza CUMBRE (Entorno de gestión automática de certificados) protocolo para proporcionar certificados TLS / SSL gratuitos a cualquier cliente compatible. Estos certificados se pueden utilizar para cifrar la comunicación entre los servidores web y los usuarios.
Este tutorial discutirá brevemente las autoridades de certificación y cómo funciona la integración de Zevenet con Let's Encrypt, luego revisará cómo Zevenet usa el certbot (Cliente ACME) para poder realizar la comunicación con la infraestructura Let's encrypt.
Zevenet Load Balancer 6.0.3 o una versión superior incluye un pequeño envoltorio certbot llamado Letencryptz Para utilizar la funcionalidad webroot de Certbot, las siguientes líneas explican cómo funciona esta envoltura, tome todo esto en consideración para que funcione en entornos de producción.
¿Cómo funciona la validación encriptada?
Como una breve descripción de la funcionalidad de webroot, el complemento webroot funciona creando un archivo temporal para cada uno de los dominios solicitados en la ruta del archivo Zevenet /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Luego, el servidor de validación Let's Encrypt realiza solicitudes HTTP para validar que el DNS para cada dominio solicitado se resuelve en el servidor que ejecuta el contenedor letsencryptz y el archivo temporal para fines de validación es accesible, el siguiente diagrama describe un ejemplo real:
En el diagrama anterior, el equilibrador de carga de Zevenet está detrás de un enrutador / servidor de seguridad con una dirección IP pública 185.79.20.147 (como ejemplo), el tráfico HTTP y HTTPS se asigna al balanceador de carga interno con VIP 192.168.101.31 (como ejemplo), donde el balanceador de carga se configura con diferentes granjas de 2:
Nombre de la granja HTTPS Alojamiento web vía 192.168.101.31:443. Esta granja es responsable de ofrecer alojamiento web, se publican diferentes servidores web junto con esto en Internet. Por ejemplo, test1.zevenet.es, test2.zevenet.es, test3.zevenet.es están probando páginas web publicadas en este servicio virtual entre otros.
Nombre de la granja HTTP WebhostingRedirect vía 192.168.101.31:80. Esta granja solo se usa para fines de redireccionamiento, fuerza todo el tráfico de HTTP a HTTPS.
El diagrama anterior describe una solicitud de certificado Let's Encrypt SSL para el dominio test1.zevenet.es como sigue:
1. Se envía una solicitud de certificado desde el propio equilibrador de carga a la infraestructura de Let's Encrypt.
2. Let's encrypt detecta la nueva solicitud de certificado SSL para test1.zevenet.es
3. Vamos a encriptar ejecutar una resolución de IP de DNS para el host solicitado: test1.zevenet.es verificando que el resultado sea la IP pública, la misma IP de origen que inició la solicitud.
4. En este punto Let's encrypt anuncia a Letencryptz script (webroot cerbot) que necesita crear un archivo con un Hachís en el camino publico http://test1.zevenet.es/.well-know/acme-challenge/ (Puerto TCP 80), Directorio local /usr/local/zevenet/app/letsencryptz/webroot/.well-known/acme-challenge/. Entonces, Letencryptz configura un servicio temporal para que este archivo sea accesible desde Internet (la comunidad WebhostingRedirect va a ser modificado para este fin Si no hay granja ya configurada Letencryptz Creará uno temporal en este VIP y Puerto.
6. Tan pronto como Letencryptz confirma la creación del servicio temporal, permite a los servidores de cifrado verificar que el archivo de validación temporal se haya creado y el Hachís el contenido es correcto
7. Finalmente, los servidores Let's Encrypt responden a la primera solicitud con el certificado ya creado para el Nombre común (CN) test1.zevenet.es.
8. Zevenet almacenará el certificado ya creado en la ruta local / usr / local / zevenet / config / y está listo para ser configurado en la granja. Alojamiento web.
En esta etapa, el nuevo certificado Let's Encrypt se usaría para el servicio virtual HTTPS.
Vamos a cifrar los comandos de automatización
Como se describe, el Letencryptz script automatizará las acciones necesarias para administrar sus certificados SSL como crear, renovar, destruir o enumerar, entre otros. Encuentra debajo los comandos 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.
Tomará algo de tiempo la primera vez que se ejecute letsencryptz porque el sistema va a instalar las dependencias no resueltas de forma automática, además se hace una revisión de la configuración antes de comenzar a usarlo, Let's Encrypt solicita una cuenta de correo electrónico o con fines de contacto relacionados con los certificados, esta cuenta de correo electrónico se utilizará junto con cualquier acción realizada contra el sistema Let's Encrypt, este correo electrónico se puede configurar en el archivo de configuración principal /usr/local/zevenet/config/global.confdirectiva $ le_email.
Algunos ejemplos de uso se muestran a continuación.
Creación de certificado Zevenet Let's Encrypt
Este comando solicita un nuevo certificado para el dominio test2.zevenet.es. Tenga en cuenta que la VIP dada será la interna, cuyo tráfico debe ser natado desde la IP pública a la interna. Si Let's Encrypt no puede acceder a este servicio, se rechazará la solicitud.
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:
Listado de certificados Zevenet Let's Encrypt
La ejecución de este comando mostrará los certificados actuales administrados por el 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
Tener en cuenta el campo Nombre del certificado, este campo será reconocido por el wrapper letsencryptz como –Certname.
Renovación del certificado Zevenet Let's Encrypt
El comando anterior verifica si algún certificado ya generado requiere una renovación, en cuyo caso la renovación se realizará automáticamente. Tenga en cuenta que si el certificado renovado está en uso, será necesario reiniciar la granja para aplicar el cambio, utilice la opción -Reanudar la fuerza si tu quieres Letencryptz reinicia todas las granjas necesarias para aplicar los cambios.
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
Eliminación del certificado de Zevenet Let's Encrypt
Este comando revoca y elimina el certificado dado. En caso de que el sistema detecte que el certificado seleccionado está actualmente en uso por cualquier granja HTTPS, la acción será rechazada, en el ejemplo anterior, la acción de eliminación se rechaza porque la granja está usando el certificado 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
Tan pronto como el certificado no esté asignado de la granja, la acción se realizará:
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
Migrar certificados Let's Encrypt a Zevenet
El equilibrador de carga Zevenet guarda todos los archivos de configuración de certbot en el camino local / usr / local / zevenet / config / letsencrypt /. Para mover sus archivos de configuración de certbot existentes (por defecto en / etc / letsencrypt) de otro servidor a Zevenet, solo tiene que hacer un tarball (archivo tar.gz) de este directorio de configuración existente en su servidor y descomprimir el contenido en la ruta de configuración de Zevenet Let's Encrypt. Finalmente, considere modificar la variable $ le_email en el archivo global.conf al mismo correo electrónico utilizado en las solicitudes anteriores.
Soporte de Let's Encrypt Certificates Clustering
El complemento Zevenet Let's Encrypt es totalmente compatible con el servicio Zevenet Cluster. Todas las acciones de Let's Encrypt se guardan en un archivo de configuración replicado por Zevenet Cluster Service, por lo que cualquier acción ejecutada en el MAESTRO el nodo se replicará en el ESCLAVO nodo automáticamente, pero cualquier acción ejecutada en el ESCLAVO El nodo relacionado con Let's Encrypt se descartará para evitar cualquier desincronización.
Let's Encrypt renovación automática de certificados
El complemento Zevenet Let's Encrypt se puede configurar para verificar diariamente si algún certificado necesita una renovación, en caso de que el sistema renueve automáticamente un certificado determinado y esté en uso por alguna granja, entonces la granja se reiniciará automáticamente para aplicar el cambio de certificado.
Para configurar la renovación automática, haga lo siguiente:
Crea el siguiente archivo cron /etc/cron.d/letsencryptz con el siguiente contenido:
root@zva6k:~# cat /etc/cron.d/letsencryptz 00 00 * * * root /usr/local/zevenet/bin/letsencryptz --renew --forcerestart --vip 192.168.101.31
Con esta configuración, la revisión de renovación se ejecutará diariamente a las 00:00 (medianoche). Y el VIP 192.168.101.31 se utilizará en el puerto 80 para fines de verificación desde Let's Encrypt System.
Referencias
Algunas referencias utilizadas en este artículo son: