Automatización de renovaciones de certificados SSL de Azure Application Gateway con Let’s Encrypt y Azure Automation

Contenidos

16b7623f-bb2b-45be-80e2-34869ed42955-7654250 Vamos a cifrar es un LIBREAutoridad de certificación abierta y automatizada que le ofrece la organización sin fines de lucro Grupo de investigación de seguridad de Internet (ISRG) y con el apoyo de grandes corporaciones como Google, Facebook, Microsoft y muchos otros, para tener una Web más segura y respetuosa con la privacidad.

Muchos sitios web y servicios ya lo utilizan en todo el mundo. Si puede obtener certificados SSL emitidos por una CA conocida de forma gratuita, no hay excusa para usar HTTPS en su sitio web y estar seguro de forma predeterminada. El proceso de emisión de un certificado Let’s Encrypt se puede automatizar mediante el uso de un software que utiliza el Protocolo ACME, que normalmente se ejecuta en su proveedor de alojamiento web. Estos certificados normalmente caducan en no más de 3 meses (algo que aumenta la seguridad del sistema), por lo que es necesario automatizar las renovaciones para evitar las renovaciones manuales.

Un buen ejemplo de esta implementación es la extensión Let’s Encrypt de Azure App Service, que automatiza las renovaciones mediante un trabajo web. Puede leer más sobre esto en este Publicación del blog de Scott Hanselman.

Al usar Azure Application Gateway, una de las cosas que debe hacer es instalar el certificado SSL en la puerta de enlace. Probablemente desee implementar la descarga SSL, por lo que todos los recursos necesarios para proteger el canal de comunicación los maneja la puerta de enlace y no los servidores detrás.

En esta publicación, voy a explicar solo este escenario, mostrando cómo puede automatizar las renovaciones de Let’s Encrypt SSL en una puerta de enlace de aplicaciones de Azure.

71194445-b559-49ca-821b-c5f1ba4ddb3e-2665380

La idea detrás de esta implementación es evitar cualquier modificación en cualquier infraestructura que esté detrás de Application Gateway, para completar las verificaciones de renovación y validaciones realizadas por el proceso Let’s Encrypt. En resumen:

  1. se ejecutará un runbook de Azure Automation en un cronograma (es decir, una vez cada dos semanas) para renovar e instalar el certificado Let’s Encrypt actual. Let’s Encrypt necesita validar la propiedad del dominio, por lo que devuelve un código de desafío que el runbook almacena en una cuenta de almacenamiento detrás de la puerta de enlace de la aplicación;
  2. una regla especial en Application Gateway redirige la verificación de validación proveniente de Let’s Encrypt a la cuenta de almacenamiento, por lo que la verificación de propiedad del dominio es exitosa
  3. el runbook de Azure Automation finalmente descarga el nuevo certificado y lo instala en Application Gateway

Tenga en cuenta que con esta implementación, no es necesario manipular ninguna otra infraestructura detrás de Application Gateway.

Quería emitir y automatizar las renovaciones de certificados Let’s Encrypt para “api.davidjrh.com”. Tenga en cuenta que ya tenía un registro DNS de Tipo A dirigido a mi Application Gateway.

0d81f27b-d4e6-47d5-b396-f2f501bd719a-3502620

C: > nslookup api.davidjrh.com
Servidor: google-public-dns-a.google.com
Dirección: 8.8.8.8

 

Respuesta no autorizada:
Nombre: api.davidjrh.com
Dirección: 23.102.37.253

Para implementar el proceso de renovación Let’s Encrypt para emitir nuevos certificados SSL en Application Gateway, siga estos pasos:

Crear una cuenta de almacenamiento

1. Cree una cuenta de Azure Storage que se usará para alojar las solicitudes de desafío para la verificación de propiedad del dominio DNS. Utilice los parámetros más baratos, como «Rendimiento estándar» y LRS.

77ebd1e0-9a92-414f-b4de-41a76ab68e28-8869793

2. Una vez que la cuenta de almacenamiento esté lista, cree un contenedor «público» con permisos de «blob público».

6c913dfa-681e-4c31-b986-c805c6c08ad9-8183586

3. Cree el directorio virtual » .well-known acme-challenge» con la herramienta Explorador de Storage.

d5923013-af23-49ae-97a3-354750084039-9006069

Modifique Application Gateway para redirigir las solicitudes de desafío ACME a la cuenta de almacenamiento.

4. Cuando creó Azure Application Gateway, probablemente especificó una regla HTTP que estaba asociada a un agente de escucha de http. En este caso, debe eliminar esa regla que será reemplazada por una regla basada en la ruta como se muestra en el siguiente paso

d94b0fee-541d-4f92-819f-7c3967e533f3-7855175

5. Cree una nueva regla basada en ruta que redirija las solicitudes que realizará Let’s Encrypt en el proceso de renovación con la siguiente configuración:

da00d758-665d-43cc-9e98-9b60f02b5b4d-1217886

6. Establezca los parámetros que tenía en la regla http y haga clic en «Agregar configuración»

dd6ee5f2-1511-4e12-a90c-f5718cb1add0-7891161

7. Especifique los parámetros de configuración con la ruta «/.well-known/acme-challenge/*» con una redirección (permanente), apuntando a un sitio externo con la URL del contenedor de la cuenta de almacenamiento que creó antes:

6294fcad-45c8-443e-9e06-c9b37fde26d4-2861319

19fbcc55-b935-48fc-804a-43a9abb1b190-9371724

9. Pruebe la regla creando un archivo llamado «test.html» en la cuenta de almacenamiento y navegando por la URL /.well-known/acme-challenge/test.html»>/.well-known/acme-challenge/test.html»>http:///.well-known/acme-challenge/test.html

a25dbf84-c632-4012-80f9-2957dd69d086-3330642

Si todo se configuró correctamente, al navegar por la URL, la puerta de enlace de la aplicación debe redirigir su navegador a la cuenta de almacenamiento como se muestra a continuación. No continúe hasta que haya configurado correctamente la regla de redirección.

2066c740-bd7b-43d3-b2c5-af198e3a0222-3732689

Instalación del certificado Let’s Encrypt por primera vez en la puerta de enlace

Para instalar el certificado Let’s Encrypt en la puerta de enlace por primera vez, primero debe emitirlo. Hay varias formas de emitir el certificado, pero la más sencilla es utilizar Certbot, una herramienta disponible en GitHub y construida en Python que le permite obtener certificados de Let’s Encrypt. Hay otros clientes, por lo que probablemente puedas compartir mejores ideas en el área de comentarios de esta publicación.

Normalmente uso una PC con Windows 10 como entorno de desarrollo, y el proceso para instalar la herramienta se describe en este enlace, que básicamente muestra cómo instalar Python y luego ejecutar «pip install certbot». Pero como tenía el subsistema Linux habilitado en mi computadora portátil con Windows con Ubuntu, seguí este otro enfoque:

  1. Abrió una consola bash en el subsistema de Linux.
  2. Python instalado con «sudo apt-get install certbot»
  3. Ejecuté el siguiente comando para emitir el certificado solo localmente en modo manual, registrando una cuenta con mi dirección de correo electrónico en el servicio Let’s Encrypt y emitiendo un certificado para el dominio «api.davidjrh.com» aceptando los Términos de servicio:
    sudo certbot certonly – email  -d api.davidjrh.com –agree-tos –manual
    b2772023-72ff-4ccd-94a8-5a56a1c683b2-6156685
  4. Siguió las instrucciones de la pantalla y creó el archivo en la cuenta de almacenamiento con el contenido requerido
    30dd8ce4-28c2-4feb-975c-cf8d289ca707-7599761
  5. Emitió con éxito el certificado

davidjrh @ DESKTOP-JQL0N5G: ~ $ sudo ls /etc/letsencrypt/live/api.davidjrh.com
LÉAME cert.pem chain.pem fullchain.pem privkey.pem

El certificado, la cadena y la clave se emiten en formato .pem, así que para cargar el certificado en .pfx, utilicé OpenSSL para convertir de PEM a PFX:

794cb37b-358a-4140-b4dd-72463394d65c-5188707

Finalmente, modifiqué mi escucha HTTPS actual para usar el certificado LetsEncrypt. IMPORTANTE: recuerda el nombre que le vas a dar a este certificado, ya que tendrás que especificarlo como parámetro en el proceso de renovación posteriormente

1190c74b-d5e9-4637-86c5-2d85c5959e83-6194814

Después de aplicar los cambios, puede verificar que el certificado SSL de LetsEncrypt funcione correctamente con solo navegar por un recurso a través de HTTPS

d4857036-dd9f-4832-9dae-4417c07d98cc-9749850

Ahora que el certificado LetsEncrypt está instalado y funcionando correctamente, el siguiente paso es automatizar las renovaciones. Hagámoslo con un runbook de Automatización de Azure.

Crear una cuenta de automatización

1. En Azure Portal, cree una cuenta de Azure Automation (o use una existente) para alojar el runbook. Tenga en cuenta que puede crear esta cuenta de automatización y ejecutar hasta 500 minutos por mes de forma gratuita.

7ce18f74-9168-4c4a-8fe5-adc5e94feda7-7925603

2. Dentro del recurso de Automatización, abra los Módulos y explore la galería para importar los siguientes módulos: ‘AzureRM.profile’, ‘AzureRM.Network’ y ‘ACMESharp’. Asegúrese de importar la última versión de todos ellos y actualizar los actuales ya importados (por ejemplo, AzureRM.profile está habilitado de forma predeterminada, pero necesitamos la última versión disponible en la galería).

2dd8a833-c908-4e6c-8765-f8c404629460-9082209

3. En la cuenta de Azure Automation, cree un runbook de PowerShell llamado LetsEncryptCertificateRenewal

6e0a9a3b-88bc-48f8-941c-1f4b84b2401c-7101631

4. Edite el runbook de PowerShell y pegue el contenido del script disponible en GitHub y haga clic en el botón «Publicar» para que esté disponible para su programación.

a9b644b6-f44c-49f9-89f3-b2142ac38efa-4320385

Puede probar el runbook en el panel de prueba y pasar los parámetros necesarios (nombre de dominio, dirección de correo electrónico utilizada en LetsEncrypt, nombres de grupos de recursos, nombre de la cuenta de almacenamiento, nombre de la puerta de enlace de la aplicación y el nombre del certificado que utilizó al configurar el oyente https ). Tarda unos 15 minutos en completarse. Al navegar nuevamente por el sitio con https, notará que el certificado se actualizó correctamente.

IMPORTANTE: LetsEncrypt tiene sus propios límites semanales al emitir certificados para un dominio específico en producción (50 por semana), así que tenga cuidado al probar el script de PowerShell.

217e2735-3dc7-409e-83cb-8778d91f1f1e-9497931

5. Cree un programa de automatización de Azure para renovar el certificado SSL. En mi caso, creé un horario para renovarlo cada 2 semanas.

f2d4bf48-e355-4a20-9ef8-2a0a624e0b8d-4912355

6. Configure los parámetros para programar el runbook con la programación que creó anteriormente.

b879223a-bc5b-4f8f-917c-a0f1afcee32a-6237806

Y eso es todo. Ahora ha configurado las renovaciones automáticas de su certificado SSL de Application Gateway con Azure Automation.

¡Espero que esto ayude!

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.