El autor eligió el Fondo de Ayuda para COVID-19 para recibir una donación como parte del programa Escribir por Donaciones.
Introducción
La mayoría de los certificados de Let’s Encrypt se emiten usando la validación HTTP, lo que permite la fácil instalación de certificados en un solo servidor. Sin embargo, la validación HTTP no siempre es adecuada para emitir certificados para uso en sitios web balanceados de carga, ni se puede usar para emitir certificados wildcard.
La validación DNS permite que las solicitudes de emisión de certificados se verifiquen utilizando registros DNS, en lugar de servir contenido mediante HTTP. Esto significa que se pueden emitir certificados simultáneamente para un cluster de servidores web que ejecutan atrás de un balanceador de carga, o para un sistema que no es directamente accesible a través de Internet. También se admiten certificados wildcard mediante validación DNS.
La herramienta acme-dns-certbot se utiliza para conectar Certbot a un servidor DNS de terceros donde los registros de validación del certificado se pueden configurar automáticamente a través de una API cuando solicitas un certificado. La ventaja de esto es que no necesitas integrar Certbot directamente con tu cuenta de proveedor de DNS, ni tampoco necesitas concederle acceso sin restricciones a tu configuración DNS completa, lo que resulta beneficioso para la seguridad.
Las zonas DNS delegadas se utilizan para redirigir las búsquedas de los registros de validación del certificado al servicio DNS de terceros, de modo que una vez completada la configuración inicial, puedes solicitar tantos certificados como quieras sin tener que realizar ninguna validación manual.
Otra ventaja clave de acme-dns-certbot es que se puede utilizar para emitir certificados para servidores individuales que puedan estar ejecutándose detrás de un balanceador de carga o que de otra manera no se pueden acceder directamente a través de HTTP. La validación de certificados HTTP tradicional no se puede utilizar en estos casos, a menos que configure los archivos de validación en cada servidor. La herramienta acme-dns-certbot también es útil si deseas emitir un certificado para un servidor que no es accesible a través de Internet, como un sistema interno o un entorno de pruebas.
En este tutorial, utilizarás el complemento de Certbot para acme-dns-certbot para emitir un certificado de Let’s Encrypt usando la validación por DNS.
Prerrequisitos
Para completar este tutorial, necesitarás:
-
Un servidor Ubuntu 18.04 configurado siguiendo la guía Configuración Inicial del Servidor con Ubuntu 18.04, incluyendo un usuario no root con sudo.
-
Un nombre de dominio para el que puedas obtener un certificado TLS, incluyendo la capacidad para agregar registros DNS. En este ejemplo particular, utilizaremos
your-domain
ysubdomain.your-domain
, así como*.your-domain
para un certificado wildcard. Sin embargo, esto se puede ajustar para otro dominio, subdominios o wildcards si es necesario.
Una vez que tienes estos elementos listos, inicia sesión en tu servidor como usuario no root para comenzar.
Paso 1 — Instalar Certbot
En este paso, instalará Certbot, un programa utilizado para emitir y administrar certificados de Let’s Encrypt.
Certbot está disponible en los repositorios oficiales de Ubuntu Apt, sin embargo, se recomienda utilizar el repositorio mantenido por los desarrolladores de Certbot, ya que siempre contiene la versión más actualizada del software.
Comience agregando el repositorio de Certbot:
Necesitará presionar ENTER
para aceptar el aviso y agregar el nuevo repositorio a su sistema.
Después, instale el paquete Certbot:
Una vez finalizada la instalación, puede verificar que Certbot ha sido instalado correctamente:
Esto mostrará algo similar a lo siguiente:
En este paso ha instalado Certbot. A continuación, descargará y instalará el gancho acme-dns-certbot.
Paso 2 — Instalar acme-dns-certbot
Ahora que se ha instalado el programa básico de Certbot, puede descargar y instalar acme-dns-certbot, que permitirá a Certbot funcionar en modo de validación DNS.
Comience descargando una copia del script:
Nota: Como mejor práctica, asegúrese de revisar este repositorio de Github y el script antes de ejecutarlo. También puede crear un fork de este repositorio y luego utilizar el script acme-dns-certbot.py
. Este fork aporta una capa adicional de seguridad, garantizando que el script permanezca bajo nuestro control y es menos propenso a cambios no verificados.
Una vez que la descarga haya finalizado, marque el script como ejecutable:
A continuación, edite el archivo con su editor de texto favorito y ajuste la primera línea para forzar el uso de Python 3:
Agregue un 3
al final de la primera línea:
#!/usr/bin/env python3
. . .
Esto es necesario para asegurar que el script use la versión más reciente compatible de Python 3, en lugar de la versión antigua de Python 2.
Una vez completado, guarde y cierre el archivo.
Finalmente, mueva el script al directorio de Certbot Let’s Encrypt para que Certbot pueda cargarlo:
En este paso, ha descargado e instalado el hook acme-dns-certbot. A continuación, puede comenzar el proceso de configuración y trabajar para emitir su primer certificado.
Paso 3 — Configuración de acme-dns-certbot
Para comenzar a usar acme-dns-certbot, necesitará completar un proceso de configuración inicial y emitir al menos un certificado.
Comience ejecutando Certbot para forzar que emita un certificado utilizando la validación DNS. Esto ejecutará el script acme-dns-certbot y disparará el proceso de configuración inicial:
Usa el argumento --manual
para deshabilitar todas las características de integración automatizada de Certbot. En este caso, solo estás emitiendo un certificado en bruto, en lugar de instalarlo automáticamente en un servicio.
Configura Certbot para usar el complemento acme-dns-certbot mediante el argumento --manual-auth-hook
. Ejecutas el argumento --preferred-challenges
para que Certbot preste prioridad a la validación DNS.
También debes decir a Certbot que se pare antes de intentar validar el certificado, lo cual haces con el argumento --debug-challenges
. Esto te permite establecer los registros DNS CNAME
requeridos por acme-dns-certbot, lo cual se cubre más adelante en este paso. Sin el argumento --debug-challenges
, Certbot no se detendría, así que no tendrías tiempo para hacer el cambio DNS requerido.
Recuerde sustituir cada uno de los nombres de dominio que desee utilizar usando los argumentos -d
. Si desea emitir un certificado comodín, asegúrese de escape el asterisco (*
) con una barra invertida (\
).
Después de seguir las etapas estándar de Certbot, finalmente le aparecerá una notificación similar a la siguiente:
Necesitará agregar el registro DNS CNAME
requerido a la configuración DNS de su dominio. Esto delegará el control del subdominio _acme-challenge
al servicio de DNS ACME, lo que permitirá a acme-dns-certbot establecer los registros DNS requeridos para validar la solicitud de certificado.
Si está utilizando DigitalOcean como su proveedor de DNS, puede configurar el registro DNS en su panel de control:
Se recomienda establecer el TTL (tiempo de vida) en alrededor de 300 segundos para ayudar a garantizar que cualquier cambio en el registro se propague rápidamente.
Una vez que haya configurado el registro DNS, vuelva a Certbot y presione ENTER
para validar la solicitud de certificado y completar el proceso de emisión.
Esto tardará unos segundos, y luego verá una notificación confirmando que se ha emitido el certificado:
Ha ejecutado acme-dns-certbot por primera vez, ha configurado los registros DNS requeridos y ha emitido un certificado con éxito. A continuación, configurará las renovaciones automáticas de su certificado.
Paso 4 — Usando acme-dns-certbot
En este último paso, utilizará acme-dns-certbot para emitir más certificados y renovar los existentes.
Antes que nada, ya que ha emitido con éxito al menos un certificado utilizando acme-dns-certbot, puede seguir emitiendo certificados para los mismos nombres de DNS sin tener que agregar otro registro CNAME
de DNS. Sin embargo, si desea adquirir un certificado para una subdominio diferente o un nombre de dominio completamente nuevo, se le pedirá que agregue otro registro CNAME
.
Por ejemplo, podría emitir otro certificado wildcard independiente sin tener que volver a realizar la verificación:
Sin embargo, si intentara emitir un certificado para una subdominio, se le pediría que agregue un registro CNAME
para la subdominio:
Esto mostrará una salida similar a la configuración inicial que realizó en el Paso 3:
Ahora que puede utilizar acme-dns-certbot para emitir certificados, resulta conveniente considerar el proceso de renovación también.
Cuando los certificados se acerquen a su fecha de expiración, Certbot puede renovarlos automáticamente por ti:
El proceso de renovación puede ejecutarse de principio a fin sin interacción del usuario y recordará todas las opciones de configuración que especificó durante la configuración inicial.
Para probar que esto funciona sin tener que esperar hasta una fecha de expiración más cercana, puedes disparar una simulación. Esto simulará el proceso de renovación sin hacer ningún cambio real a tu configuración.
Puedes disparar una simulación usando la orden estándar renew
, pero con el argumento --dry-run
:
Esto mostrará algo similar a lo siguiente, que proporcionará una seguridad de que el proceso de renovación está funcionando correctamente:
En este paso final, has emitido otro certificado y luego has probado el proceso de renovación automática dentro de Certbot.
Conclusión
En este artículo, has configurado Certbot con acme-dns-certbot para emitir certificados usando la validación DNS. Esto desbloquea la posibilidad de usar certificados wildcard así como la administración de una amplia gama de servidores web distintos que puedan estar detrás de un balanceador de carga.
Asegúrate de mantener un ojo en el repositorio acme-dns-certbot para cualquier actualización del script, ya que siempre es recomendable ejecutar la versión más reciente soportada.
Si estás interesado en aprender más sobre acme-dns-certbot, tal vez desees revisar la documentación del proyecto acme-dns, que es el elemento del lado del servidor de acme-dns-certbot:
El software acme-dns también puede ser hospedado por sí mismo, lo cual podría ser beneficioso si estás operando en entornos de alta seguridad o complejos.
Alternativamente, podrías explorar los detalles técnicos de la validación de DNS ACME revisando la sección relevante del documento oficial RFC que describe cómo funciona el proceso: