Actualizado el viernes, 26 abril, 2024

Certbot es un cliente ACME para la autoridad de certificación (CA) Let’s Encrypt. Se utiliza para generar un certificado SSL Let’s Encrypt y renovarlo automáticamente. De forma predeterminada, Certbot utiliza el desafío Let’s Encrypt HTTP-01 para verificar la propiedad del dominio y emitir un certificado SSL para el dominio. Pero el desafío HTTP-01 no funcionará a menos que tenga una dirección IP pública y su computadora sea accesible desde Internet. Por lo tanto, si desea utilizar los certificados SSL Let’s Encrypt para su red doméstica o red privada, debe usar el desafío DNS-01 en su lugar. Cuando se utiliza el desafío DNS-01, Let’s Encrypt verifica la propiedad del dominio utilizando el servidor DNS del dominio. Por lo tanto, también funciona para redes privadas.

Para obtener una explicación detallada sobre cómo funciona el desafío Let’s Encrypt DNS-01 (o validación de DNS), lea el artículo titulado ¿Qué es Let’s Encrypt DNS-01 Challenge y cómo usarlo para obtener los certificados SSL?

En este artículo, le mostraremos cómo utilizar la validación de DNS Let’s Encrypt para obtener un certificado SSL para su nombre de dominio utilizando el complemento DNS Certbot y Certbot CloudFlare.

Tema de Contenidos:

  1. Administrar tu dominio con CloudFlare DNS
  2. Instalación de Certbot y el complemento Certbot CloudFlare en Ubuntu/Debian
  3. Instalación de Certbot y el complemento Certbot CloudFlare en Fedora
  4. Instalación de Certbot y Certbot CloudFlare Plugin en RHEL/AlmaLinux/Rocky Linux/CentOS Stream
  5. Comprobación de si Certbot y el complemento Certbot CloudFlare están instalados correctamente
  6. Generación de un token de API de CloudFlare
  7. Almacenar de forma segura el token de la API de CloudFlare en el ordenador/servidor
  8. Generación de un certificado SSL mediante la validación de DNS de Certbot CloudFlare
  9. Listado de los certificados SSL de Let’s Encrypt usando Certbot
  10. Renovación de los certificados SSL de Let’s Encrypt con Certbot
  11. Conclusión
  12. Referencias

Administrar tu dominio con CloudFlare DNS

Para obtener un certificado SSL Let’s Encrypt utilizando la validación de DNS de CloudFlare, debes tener una cuenta de CloudFlare y tu dominio debe utilizar el DNS de CloudFlare. Puede crear una cuenta de CloudFlare de forma gratuita y el servicio DNS de CloudFlare también es de uso gratuito.

Para administrar tu dominio con CloudFlare DNS, puedes realizar una de las siguientes acciones:

  • Registra tu dominio desde CloudFlare
  • Transfiere tu dominio a CloudFlare
  • Cambia el servidor de nombres DNS de tu nombre de dominio al servidor de nombres DNS de CloudFlare desde el panel de control de tu registrador de dominios

No tienes que comprar un dominio de CloudFlare ni transferir un dominio a CloudFlare para administrarlo con el servicio DNS de CloudFlare. Puedes cambiar el servidor de nombres de tu dominio al servidor de nombres DNS de CloudFlare desde el panel de control de tu registrador de dominios (donde compraste el dominio) y administrar tu dominio desde CloudFlare. Para obtener más información sobre cómo cambiar el servidor de nombres de tu dominio al servidor de nombres DNS de CloudFlare, lee este artículo.

Instalación de Certbot y el complemento Certbot CloudFlare en Ubuntu/Debian

Certbot y el plugin Certbot CloudFlare están disponibles en el repositorio oficial de paquetes de Ubuntu/Debian. Por lo tanto, puede instalarlos en Ubuntu/Debian muy fácilmente.

En primer lugar, actualice la caché del repositorio de paquetes APT con el siguiente comando:

sudo apt update

Para instalar Certbot y el complemento DNS Certbot CloudFlare, ejecute el siguiente comando:

sudo apt install certbot python3-certbot-dns-cloudflare

Para confirmar la instalación, presione «Y» y luego presione <Enter>.

Se están instalando Certbot y el complemento DNS Certbot CloudFlare. Tarda un tiempo en completarse.

En este punto, Certbot y el complemento DNS Certbot CloudFlare deben estar instalados.

Instalación de Certbot y el complemento Certbot CloudFlare en Fedora

Certbot y el complemento Certbot CloudFlare están disponibles en el repositorio oficial de paquetes de Fedora y se pueden instalar en Fedora muy fácilmente.

En primer lugar, actualice la base de datos de paquetes DNF con el siguiente comando:

sudo dnf makecache

Para instalar Certbot y el complemento DNS Certbot CloudFlare en Fedora, ejecute el siguiente comando:

sudo dnf install certbot python3-certbot-dns-cloudflare

Para confirmar la instalación, presione «Y» y luego presione <Enter>.

Se están instalando Certbot y el complemento DNS Certbot CloudFlare. Tarda un tiempo en completarse.

En este punto, Certbot y el complemento DNS Certbot CloudFlare deben instalarse en Fedora.

Instalación de Certbot y Certbot CloudFlare Plugin en RHEL/AlmaLinux/Rocky Linux/CentOS Stream

El plugin DNS de Certbot CloudFlare no está disponible en los repositorios oficiales de paquetes de RHEL/AlmaLinux/Rocky Linux/CentOS Stream. El plugin DNS de Certbot CloudFlare está disponible en el repositorio de paquetes EPEL. Puede habilitar el repositorio de paquetes EPEL en RHEL/AlmaLinux/Rocky Linux/CentOS Stream e instalar el complemento DNS Certbot CloudFlare desde allí.

Una vez habilitado el repositorio de paquetes EPEL, actualice la memoria caché de la base de datos DNF con el siguiente comando:

sudo dnf makecache

A continuación, instala Certbot y el plugin Certbot CloudFlare DNS en tu sistema RHEL/AlmaLinux/Rocky Linux/CentOS Stream con el siguiente comando:

sudo dnf install certbot python3-certbot-dns-cloudflare

Para confirmar la instalación, presione «Y» y luego presione <Enter>.

Se están instalando Certbot y el complemento DNS Certbot CloudFlare. Tarda un tiempo en completarse.

Para aceptar la clave GPG del repositorio EPEL, pulse «Y» y, a continuación, pulse <Enter>.

En este punto, Certbot y el complemento DNS Certbot CloudFlare deben estar instalados.

Comprobación de si Certbot y el complemento Certbot CloudFlare están instalados correctamente

Para comprobar si Certbot está instalado en su ordenador, ejecute el siguiente comando:

certbot --version

Si Certbot está instalado, el comando debe imprimir el número de versión del Certbot instalado en su computadora.

Como puede ver, tenemos Certbot 2.1.0 instalado en nuestra máquina Debian.

Para comprobar si el plugin DNS de Certbot CloudFlare está instalado en tu ordenador, ejecuta el siguiente comando:

 sudo certbot plugins

Si el complemento DNS de Certbot CloudFlare está instalado, debería encontrar «dns-cloudflare» en la lista de complementos como se marca en la siguiente captura de pantalla:

Generación de un token de API de CloudFlare

Para verificar la propiedad del dominio, Certbot debe agregar un registro TXT en el dominio administrado por el servidor DNS de CloudFlare. Para ello, Certbot necesita acceso al token de la API de CloudFlare. Puedes crear un token de API para tu dominio desde el panel de control de CloudFlare.

Primero, inicia sesión en tu cuenta de CloudFlare. A continuación, haz clic en el icono de tu perfil
Mi perfil en la esquina superior derecha de la página.

Vaya a la sección «Tokens de API»[1] y haga clic en «Crear token»[2].

Haga clic en «Usar plantilla» en la sección «Editar DNS de zona».

Desde la sección «Permiso», permita el permiso «Editar» a «Zona DNS» seleccionando las opciones marcadas en los menús desplegables.

Si administras varios dominios con CloudFlare, puedes permitir la modificación de una «Zona específica» desde la sección «Recurso de zona». Permitir que un token de API modifique solo una zona es más seguro que permitir que el token de API modifique todas las zonas. Esto se debe a que si el token de la API se ve comprometido, la superficie de ataque será menor y se producirá menos daño.

Si quieres utilizar una única clave de API para modificar todos tus dominios gestionados por CloudFlare, selecciona «Todas las zonas» en la sección «Recurso de zona».

Una vez que hayas terminado de configurar tu token de API, haz clic en «Continuar con el resumen».

Se mostrará un resumen de las acciones que puedes realizar en tus dominios administrados por CloudFlare con el token de API. Haga clic en «Crear token».

Se debe crear un token de API. Copie el token de API en un lugar seguro para no perderlo. Una vez que salga de esta página, no podrá volver a encontrar este token de API. Tienes que generar un nuevo token de API en caso de que lo pierdas:

LyPCAcOBygX1UMHvcsvBFo41aItm2cCVxnjloZj5

Almacenar de forma segura el token de la API de CloudFlare en el ordenador/servidor

Certbot necesita usar el token de la API de CloudFlare para agregar un nuevo registro TXT para su dominio en el servidor DNS de CloudFlare. Por lo tanto, debe almacenar el token de la API de CloudFlare en su computadora/servidor. Almacenar el token de API sin garantizar los permisos de acceso a archivos adecuados puede permitir que otros programas/usuarios tengan acceso al token de API. Esto no es lo que quieres por razones de seguridad. En esta sección, le mostraremos cómo almacenar de forma segura el token de la API de CloudFlare en el sistema de archivos.

En primer lugar, crea un directorio (es decir, ~/.secrets/certbot) en el que quieras almacenar la clave de la API de CloudFlare de la siguiente manera:

mkdir -pv ~/.secrets/certbot

Cree un archivo «cloudflare.ini» en el directorio recién creado (es decir, ~/.secrets/certbot) y ábralo con su editor de texto favorito (es decir, nano) de la siguiente manera:

nano ~/.secrets/certbot/cloudflare.ini

Escribe la siguiente línea en el archivo «cloudflare.ini» y presiona <Ctrl> + X seguido de «Y» y <Enter> para guardarlo (si estás usando el editor de nano texto).dns_cloudflare_api_token = <tu-token-api-de-cloudflare>

Para garantizar un permiso de acceso adecuado para el archivo «cloudflare.ini», ejecute los siguientes comandos para asegurarse de que solo el usuario root tenga acceso de lectura y escritura al archivo:

$ sudo chown root:root ~/.secrets/certbot/cloudflare.ini
$ sudo chmod 0600 ~/.secrets/certbot/cloudflare.ini

Como puede ver, solo el usuario root tiene los permisos de lectura y escritura para el archivo «cloudflare.ini».

ls -lh ~/.secrets/certbot/cloudflare.ini

Otros usuarios que intenten leer el archivo «cloudflare.ini» recibirán un mensaje de error «Permiso denegado».

cat ~/.secrets/certbot/cloudflare.ini

Generación de un certificado SSL mediante la validación de DNS de Certbot CloudFlare

Para generar un certificado SSL Let’s Encrypt para el nombre de dominio comodín «*.nodekite.com» mediante la validación de DNS de CloudFlare, ejecute el comando cerbot de la siguiente manera:

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d *.nodekite.com

Para generar un certificado SSL Let’s Encrypt para los nombres de dominio «nodekite.com» y «www.nodekite.com» utilizando la validación DNS de CloudFlare, utilice la opción «-d» del comando certbot para cada nombre de dominio de la siguiente manera:

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d www.nodekite.com -d nodekite.com

Si los cambios de DNS tardan mucho tiempo en propagarse a los servidores de nombres DNS populares en todo el mundo, puede utilizar la opción «–dns-cloudflare-propagation-seconds» de Certbot para establecer el número de segundos que desea que Certbot espere antes de que se realice la validación de DNS.

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini --dns-cloudflare-propagation-seconds 60 -d *.nodekite.com

Una vez que ejecute el comando Certbot, se le pedirá que escriba su dirección de correo electrónico. Escriba su dirección de correo electrónico y presione <Enter> para continuar.

Presione «Y» y luego presione <Enter> para aceptar los «Términos de servicio» de Let’s Encrypt.

Presione «Y» y luego presione <Enter>.

Se está emitiendo un certificado SSL Let’s Encrypt. Tarda un tiempo en completarse.

En este punto, se emite el certificado SSL Let’s Encrypt. Se debe mostrar la ruta completa donde se guardan los archivos del certificado SSL. También debe mostrarse la fecha de caducidad del certificado SSL.

Listado de los certificados SSL de Let’s Encrypt usando Certbot

Puede enumerar todos los certificados SSL de Let’s Encrypt que generó con Certbot con el siguiente comando:

sudo certbot certificates

Como puede ver, aparece el certificado SSL Let’s Encrypt generado para el dominio «nodekite.com»[1]. Se emite un certificado SSL comodín para el «nodekite.com»[2] nombre de dominio. La fecha de caducidad del certificado es 2024-03-20 (válido por 89 días)[3]. El certificado y la ruta de acceso de la clave privada también se enumeran aquí[4].

Certbot almacena todos los certificados SSL que generó para sus dominios en el directorio «/etc/letsencrypt/live» en su carpeta respectiva.

sudo ls -Rlh /etc/letsencrypt/live/

Renovación de los certificados SSL de Let’s Encrypt con Certbot

Certbot renueva automáticamente todos los certificados SSL de Let’s Encrypt que generaste mediante la validación de DNS de CloudFlare.

Para probar si la función de renovación automática de los certificados SSL de Let’s Encrypt funciona, ejecute el siguiente comando:

sudo certbot renew --dry-run

La acción de renovación automática se simula para cada uno de los certificados SSL Let’s Encrypt que ha generado.

Si las pruebas son exitosas, serás felicitado. Una prueba exitosa significa que los certificados SSL se renovarán automáticamente antes de que caduquen. No tendrás que hacer nada más.

Para que la función de renovación automática de Certbot funcione, el temporizador systemd «cerbot.timer» debe estar habilitado y activo en su computadora/servidor.

Puede verificar si el temporizador systemd «cerbot.timer» está habilitado y activo con el siguiente comando:

sudo systemctl status certbot.timer

Como puede ver, el temporizador systemd «certbot.timer» está habilitado (se inicia automáticamente en el momento del arranque)[1] y activo[2]. Certbot comprueba si es necesario renovar algún certificado SSL después de solo 11 minutos (según la siguiente captura de pantalla) y renueva los certificados SSL que están a punto de caducar[3].

Para comprobar manualmente si algún certificado SSL está a punto de caducar y renovar los certificados SSL que caducan, ejecute el siguiente comando:

sudo certbot renew

En nuestro caso, ningún certificado SSL está a punto de caducar. Por lo tanto, Certbot no intentó renovar ningún certificado SSL.

Para forzar a Certbot a renovar el certificado SSL de un dominio específico (digamos *.nodekite.com), ejecute el siguiente comando:

sudo certbot certonly --force-renew -d *.nodekite.com

Presione «1» y presione <Enter> para seleccionar la primera opción (para la validación de DNS usando CloudFlare DNS).

El certificado SSL debe renovarse.

Conclusión

Para obtener un certificado SSL Let’s Encrypt utilizando la validación de DNS de CloudFlare mediante Certbot, necesita un acceso al token de la API de CloudFlare. En este artículo, te mostramos cómo crear un token de API de CloudFlare para tu dominio y almacenarlo de forma segura en tu ordenador/servidor para que puedas acceder a él con Certbot cuando lo necesites. También le mostramos cómo instalar Certbot y el complemento DNS Certbot CloudFlare en las distribuciones de Linux más populares. Le mostramos cómo generar los certificados SSL comodín de Let’s Encrypt, así como los certificados SSL para dominios individuales utilizando la validación DNS de Certbot y CloudFlare. Por último, te mostramos cómo renovar los certificados SSL de Let’s Encrypt utilizando Certbot de forma automática y manual.

Referencias:

¿Qué es Let's Encrypt DNS-01 Challenge y cómo usarlo para obtener certificados SSL?
Unir tres tablas en SQL