Cómo obtener un certificado Let’s Encrypt mediante validación DNS con certbot-dns-digitalocean en Ubuntu 20.04
El autor seleccionó el Fondo de Ayuda COVID-19 para recibir una donación como parte del programa Write for DOnations .
Introducción
La mayoría de los certificados Let’s Encrypt se emiten mediante validación HTTP, lo que permite la instalación de certificados en un solo servidor. Sin embargo, la validación HTTP no siempre es adecuada para emitir certificados para su uso en sitios web con equilibrio de carga, ni se puede utilizar esta validación para emitir certificados comodín.
La validación de DNS permite verificar las solicitudes de emisión de certificados mediante registros DNS, en lugar de enviar contenido a través de HTTP. Esto significa que se pueden emitir certificados simultáneamente para un grupo de servidores web que se ejecutan detrás de un balanceador de carga o para un sistema al que no se puede acceder directamente a través de Internet.
En este tutorial, utilizará el gancho certbot-dns-digitalocean para que Certbot emita un certificado Let’s Encrypt usando la validación de DNS a través de la API de DigitalOcean.
Puede utilizar la herramienta certbot-dns-digitalocean para integrar Certbot con la API de administración de DNS de DigitalOcean, lo que permite que los registros de validación de certificados se configuren automáticamente sobre la marcha cuando solicita un certificado.
Otro beneficio clave de certbot-dns-digitalocean es que puede usarlo para emitir certificados para servidores individuales que pueden estar ejecutándose detrás de un balanceador de carga o que no son accesibles directamente a través de HTTP. En estos casos, no puede usar la validación de certificados HTTP tradicional, a menos que configure los archivos de validación en todos y cada uno de los servidores, lo que puede resultar inconveniente. La herramienta certbot-dns-digitalocean también es útil si desea emitir un certificado para un servidor al que no se puede acceder a través de Internet, por ejemplo, un sistema interno o un entorno de prueba.
certbot-dns-digitalocean también admite plenamente los certificados comodín, que solo pueden emitirse mediante la validación de DNS.
Prerrequisitos
Para completar este tutorial, necesitarás:
-
Un servidor Ubuntu 20.04 configurado siguiendo la configuración inicial del servidor con Ubuntu 20.04 , incluido un usuario sudo que no sea root.
-
Un nombre de dominio administrado a través de su cuenta de DigitalOcean, es decir, para administrar registros DNS. En este ejemplo en particular, utilizaremos
your_domain
ysubdomain.your_domain
, así como para un certificado comodín, sin embargo, puede ajustar esto para otros dominios o subdominios si es necesario.*.your_domain
-
Una clave API de DigitalOcean (Personal Access Token) con permisos de lectura y escritura. Para crear una, visita Cómo crear un token de acceso personal .
Una vez que tenga esto listo, inicie sesión en su servidor como usuario no root para comenzar.
Paso 1: Instalación de Certbot
En este paso, instalará Certbot, que es un programa para emitir y administrar certificados Let’s Encrypt.
Certbot está disponible dentro de los repositorios oficiales de Ubuntu Apt, por lo que puedes instalarlo usando el administrador de paquetes del sistema predeterminado:
- sudo apt update
- sudo apt install certbot
Una vez finalizada la instalación puedes comprobarlo con el siguiente comando:
- certbot --version
Esto producirá un resultado similar a lo siguiente:
Outputcertbot 0.40.0
En este paso, instalaste Certbot. A continuación, descargarás e instalarás el enlace acme-dns-certbot.
Paso 2: Instalación y configuración de certbot-dns-digitalocean
Ahora que ha instalado el programa base Certbot, puede descargar e instalar certbot-dns-digitalocean, que permitirá que Certbot funcione en modo de validación de DNS utilizando la API de administración de DNS de DigitalOcean.
Al igual que Certbot, que instalaste en el paso 1, la utilidad certbot-dns-digitalocean está disponible en los repositorios predeterminados de Ubuntu. Sin embargo, el repositorio de Certbot contiene una versión actualizada de forma más fiable, por lo que siempre se recomienda utilizarla cuando sea posible.
Continúe instalando el paquete para certbot-dns-digitalocean:
- sudo apt install python3-certbot-dns-digitalocean
Una vez completada la instalación, deberá configurar un archivo de configuración que contenga la clave API de DigitalOcean/Token de acceso personal que generó como parte de los requisitos previos.
Comience creando el creds.ini
archivo en una ubicación privada:
- touch ~/certbot-creds.ini
A continuación, restrinja los permisos del archivo para asegurarse de que ningún otro usuario de su servidor pueda leerlo:
- chmod go-rwx ~/certbot-creds.ini
Por último, abra el archivo usando su editor de texto y agregue su token de acceso de DigitalOcean:
- nano ~/certbot-creds.ini
El contenido del archivo será el siguiente:
~/certbot-creds.ini
dns_digitalocean_token = your_digitalocean_access_token
Una vez hecho esto, guarde y cierre el archivo.
Advertencia: Su token de acceso de DigitalOcean le otorga acceso a su cuenta de DigitalOcean, por lo que debe protegerlo como si fuera una contraseña. No lo comparta con nadie ni lo guarde en un repositorio de código público.
En este paso, descargó e instaló la utilidad certbot-dns-digitalocean y creó un archivo de configuración que contiene sus credenciales de API.
Paso 3: emisión de un certificado
En este paso, emitirá un certificado utilizando Certbot y la API de DigitalOcean.
Para emitir su primer certificado, ejecute Certbot utilizando los siguientes argumentos, asegurándose de especificar la ruta correcta a su archivo de credenciales, así como a sus dominios:
- sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials ~/certbot-creds.ini -d your_domain -d subdomain.your_domain
Nota: Si ve una unsafe permissions on credentials configuration file
advertencia, esto indica que los permisos de archivo no se han restringido correctamente, lo que permite que otros usuarios de su servidor accedan a su token. Vuelva a verificar con el chmod
comando del paso 2.
Certbot tardará unos segundos en solicitar el certificado; luego recibirás un mensaje confirmando que ha emitido tu certificado:
Output...Congratulations! Your certificate and chain have been saved at:/etc/letsencrypt/live/your_domain/fullchain.pemYour key file has been saved at:/etc/letsencrypt/live/your_domain/privkey.pem...
En caso de que la emisión del certificado falle, esto puede deberse a que no hubo tiempo suficiente para que se propagaran los cambios de DNS. Opcionalmente, puede aumentar el retraso de propagación de DNS para dar más tiempo a que los registros DNS de verificación se propaguen y sean recogidos por Let’s Encrypt. El retraso es de 10 segundos de forma predeterminada, pero puede aumentarlo utilizando el --dns-digitalocean-propagation-seconds
argumento:
- sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials ~/certbot-creds.ini --dns-digitalocean-propagation-seconds 30 -d your_domain -d subdomain.your_domain
Por último, también puedes utilizar certbot-dns-digitalocean para emitir certificados comodín para tu dominio:
- sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials ~/certbot-creds.ini -d *.your_domain
Nota: En algunos casos, solicitar varios certificados para los mismos nombres de host en un período de tiempo breve puede provocar que la emisión comience a fallar. Esto se debe a los límites de velocidad y al valor de tiempo de vida (TTL) del DNS, que a veces pueden provocar demoras en la propagación de nuevos cambios de DNS.
Para mitigar esto, es posible que desees esperar la duración del TTL o considerar ajustar la --dns-digitalocean-propagation-seconds
opción que se detalló anteriormente en este paso.
En este paso, utilizó Certbot con certbot-dns-digitalocean por primera vez y emitió sus certificados iniciales.
Paso 4 — Renovación de certificados
En este paso final, renovará los certificados utilizando Certbot con certbot-dns-digitalocean.
Una vez que sus certificados estén próximos a vencer, Certbot podrá renovarlos automáticamente por usted:
- sudo certbot renew
El proceso de renovación puede ejecutarse de principio a fin sin la interacción del usuario. También recordará las opciones de configuración que especificó durante la configuración inicial.
De forma predeterminada, Certbot ejecutará esta tarea como una tarea automática programada del sistema, lo que significa que no es necesario realizar ningún mantenimiento adicional para sus certificados. Puede comprobar que la tarea programada se ha instalado correctamente imprimiendo el estado del servicio del sistema asociado, que es certbot.timer
:
- sudo systemctl status certbot.timer
Esto generará algo similar a lo siguiente, que muestra la tarea cargada programada para ejecutarse dos veces al día:
Output● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Sun 2020-11-22 18:18:40 UTC; 2 weeks 6 days ago Trigger: Sun 2020-12-13 7:17:57 UTC; 11h leftNov 22 18:18:40 droplet1 systemd[1]: Started Run certbot twice daily.
Sin embargo, para comprobar que esto funciona sin tener que esperar hasta que se acerque la fecha de vencimiento de su(s) certificado(s), puede ejecutar una “ejecución en seco”. Esto simulará el proceso de renovación sin realizar ningún cambio real en su configuración.
Puedes iniciar una ejecución en seco utilizando el renew
comando estándar, pero con el --dry-run
argumento:
- sudo certbot renew --dry-run
Esto generará algo similar a lo siguiente, lo que garantizará que el proceso de renovación esté funcionando correctamente:
Output...Cert not due for renewal, but simulating renewal for dry runPlugins selected: Authenticator dns-digitalocean, Installer NoneRenewing an existing certificatePerforming the following challenges:dns-01 challenge for your_domaindns-01 challenge for subdomain.your_domainWaiting 10 seconds for DNS changes to propagateWaiting for verification...Cleaning up challenges...
En este paso final, probó el proceso de renovación automática dentro de Certbot.
Conclusión
En este tutorial, configurará Certbot con certbot-dns-digitalocean para emitir certificados mediante la validación de DNS con la API de administración de DNS de DigitalOcean.
Si está interesado en obtener más información sobre certbot-dns-digitalocean, puede revisar la documentación oficial de la utilidad:
- Documentación de certbot-dns-digitalocean
Como alternativa, si no está usando DigitalOcean para administrar sus registros DNS, puede consultar Cómo adquirir un certificado Let’s Encrypt usando la validación DNS con acme-dns-certbot en Ubuntu 18.04 , que es una alternativa independiente del proveedor a certbot-dns-digitalocean.
Por último, si desea obtener más información técnica, puede profundizar en los detalles de la validación de DNS de ACME revisando la sección correspondiente del documento RFC oficial, que describe cómo funciona el proceso:
- RFC8555 – Sección 8.4
Deja una respuesta