Cómo obtener un certificado Let’s Encrypt mediante validación DNS con certbot-dns-digitalocean en Ubuntu 20.04

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de Certbot
  • Paso 2: Instalación y configuración de certbot-dns-digitalocean
  • Paso 3: emisión de un certificado
  • Paso 4 — Renovación de certificados
  • Conclusión
  • 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_domainy subdomain.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:

    1. sudo apt update
    2. sudo apt install certbot

    Una vez finalizada la instalación puedes comprobarlo con el siguiente comando:

    1. 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:

    1. 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.iniarchivo en una ubicación privada:

    1. 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:

    1. chmod go-rwx ~/certbot-creds.ini

    Por último, abra el archivo usando su editor de texto y agregue su token de acceso de DigitalOcean:

    1. 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:

    1. 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 fileadvertencia, 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 chmodcomando 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-secondsargumento:

    1. 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:

    1. 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-secondsopció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:

    1. 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:

    1. 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 renewcomando estándar, pero con el --dry-runargumento:

    1. 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
    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion