Saltar al contenido principal

Servidor Dedicado: Configura Certbot en Linux

Esta guía fue creada con los siguientes productos:

(Los detalles pueden variar según los productos de diferentes proveedores, pero los conceptos principales permanecen igual)

Introducción

Los certificados SSL son una parte esencial de internet, garantizando que los datos se transmitan de forma segura entre el cliente y el host. En esta guía, exploraremos el proceso de configuración de la herramienta de código abierto Certbot para solicitar certificados SSL gratuitos de la autoridad certificadora sin fines de lucro Let's Encrypt.

Preparación

Para poder usar Certbot, necesitarás un servidor Linux y un dominio que poseas. Debes tener acceso a la configuración DNS del dominio y debes crear un registro DNS A apuntando a la dirección IP de tu servidor Linux para cada dominio raíz o subdominio que planees usar.

Certbot también tiene plugins adicionales que te permiten configurar un certificado para un dominio con un solo clic, compatible con varios servidores web como Nginx o Apache. Recomendamos usar Nginx, ya que es un servidor web de código abierto muy popular y de alto rendimiento. Consulta nuestra guía de proxy inverso en Linux para ayuda con esta configuración.

Instalación

Comienza instalando el paquete de código abierto Certbot, que usarás para solicitar certificados SSL gratuitos de Let's Encrypt.

sudo apt install certbot

Con Certbot instalado, puedes proceder a solicitar certificados para tu(s) dominio(s). Let's Encrypt y Certbot ofrecen varios desafíos ACME para verificar la propiedad del dominio.

Recomendamos usar el método predeterminado HTTP-01 porque permite la renovación automática. Sin embargo, si tienes problemas con este método, puedes intentar usar el método DNS-01 como alternativa, que es manual y no soporta renovaciones automáticas ya que depende de la verificación mediante un registro DNS TXT.

Usa los Plugins para Servidores Web

Para quienes usen un servidor web como Nginx, Apache o su propio servidor, recomendamos ir a la sección de Plugins para Servidores Web más abajo, donde se muestra cómo usar plugins adicionales de Certbot para estos servidores y así aprovechar una instalación con un solo clic y solicitar certificados sin necesidad de apagar el servidor web.

Desafío HTTP-01

Con Certbot instalado, ahora puedes solicitar certificados para tu(s) dominio(s). En este ejemplo, usaremos el modo standalone, lo que significa que Certbot iniciará un servidor web temporal para realizar las acciones necesarias. Esto implica que debes abrir el puerto 80 en las reglas de tu firewall y no tener ningún servidor web o servicio corriendo en el puerto 80 para permitir que el servidor temporal arranque y el desafío pueda ser obtenido (de ahí el HTTP en el nombre del desafío).

En el siguiente comando, usarás el parámetro --standalone para indicarle a Certbot que quieres usar la opción de servidor web temporal.

# Para Dominios Raíz
certbot certonly --standalone -d [tu_dominio_raiz] -d www.[tu_dominio_raiz]

# Para Subdominios
certbot certonly --standalone -d [tu_dominio]

# Configuración Interactiva
certbot certonly --standalone

Al ejecutar el comando, puede que debas seguir una configuración interactiva inicial que te pedirá ingresar un correo electrónico para comunicaciones del certificado, seguido de una lista de correo opcional y los términos y condiciones que debes aceptar.

Certbot generará un desafío ACME y lo alojará usando el servidor web temporal. Los servidores de Let's Encrypt intentarán obtenerlo desde tu servidor y, si todo va bien, los certificados se crearán y guardarán en la ruta /etc/letsencrypt/live/[tu_dominio].

Ahora puedes usar los certificados SSL donde los necesites simplemente proporcionando la ruta local a los certificados.

Registro DNS TXT

Si tienes dificultades para verificar tu dominio mediante el método HTTP-01, como alternativa puedes usar el método DNS-01, que implica crear un registro DNS TXT con un valor proporcionado por Let's Encrypt.

Como mencionamos antes, este método no soporta renovación automática a menos que configures tu propia infraestructura para gestionarlo. Por eso, recomendamos usar el método HTTP-01 siempre que sea posible.

En el siguiente comando, usarás el parámetro --preferred-challenges para indicarle a Certbot que quieres usar el método DNS-01.

# Para Dominios Raíz
certbot certonly --preferred-challenges dns-01 -d [tu_dominio_raiz] -d www.[tu_dominio_raiz] --manual -m [tu_dominio_raiz] -m www.[tu_dominio_raiz]

# Para Subdominios
certbot certonly --preferred-challenges dns-01 -d [tu_dominio] --manual -m [tu_dominio]

# Configuración Interactiva
certbot certonly --preferred-challenges dns-01

Al ejecutar el comando, puede que debas seguir una configuración interactiva inicial que te pedirá ingresar un correo electrónico para comunicaciones del certificado, seguido de una lista de correo opcional y los términos y condiciones que debes aceptar.

Certbot te dará instrucciones para crear un registro DNS TXT con un valor específico que debes usar. El objetivo normalmente será _acme-challenge. seguido de tu dominio (en este ejemplo, sería _acme-challenge.zapdocs.example.com) y el valor que debe tener se mostrará en la consola.

Una vez creado el registro, presiona enter para continuar. Si todo está correcto y propagado, los certificados se crearán y guardarán en la ruta /etc/letsencrypt/live/[tu_dominio].

nota

Ten paciencia, ya que los cambios en registros DNS pueden tardar un poco en propagarse. Normalmente ocurre en minutos, pero en casos raros puede tardar más.

Ahora puedes usar los certificados SSL donde los necesites simplemente proporcionando la ruta local a los certificados.

Plugins para Servidores Web

Certbot incluye varios plugins adicionales para servidores web que facilitan aún más la gestión de certificados, ya que los plugins editan automáticamente los bloques de servidor relevantes. Para usar un plugin, solo tienes que añadir el parámetro correspondiente a tu comando certbot.

Ambos métodos usan el desafío HTTP-01 y funcionan de manera similar. Cuando usas uno de los plugins, Certbot busca el bloque de servidor que incluye el dominio solicitado como parámetro server_name. Una vez encontrado, Certbot genera un desafío ACME y añade un bloque temporal location /.well-known/acme-challenge/... en la configuración del servidor.

Los servidores de Let's Encrypt intentarán obtener este desafío desde tu servidor y, si todo va bien, tu certificado se generará y la configuración del bloque de servidor para el servidor web seleccionado se editará automáticamente para usar HTTPS (puerto 443) y añadir las rutas al certificado recién generado.

Plugin para Nginx

Antes de usar el plugin, asegúrate de que esté instalado.

sudo apt install python3-certbot-nginx

Para usar el plugin de Nginx, debes usar el parámetro --nginx en tu comando así:

# Para Dominios Raíz
certbot --nginx -d [tu_dominio_raiz] -d www.[tu_dominio_raiz]

# Para Subdominios
certbot --nginx -d [tu_dominio]

# Configuración Interactiva
certbot --nginx
consejo

Si quieres desactivar los ajustes automáticos de bloques de servidor con un solo clic que hace Certbot, puedes incluir el parámetro certonly en el comando, por ejemplo certbot certonly.

Renovación Automática

En la mayoría de los casos, Certbot debería configurar automáticamente la renovación del certificado mediante un cronjob y/o un timer de systemd. Puedes confirmar esto ejecutando el siguiente comando que usa el parámetro --dry-run para probar el proceso.

certbot renew --dry-run
consejo

Como mencionamos antes, el método DNS-01 no soporta renovación automática vía Certbot, a menos que configures tu propia infraestructura para gestionarlo. Por eso, recomendamos usar el método HTTP-01.

Esto debería ser exitoso si todo está como se espera. Si quieres ver o modificar la renovación automática, el comando estará en alguna de estas ubicaciones: /etc/crontab/, /etc/cron.*/* o mediante systemctl list-timers.

Configuración Manual de Cronjob

Si por alguna razón la renovación automática no está configurada, puedes añadirla tú mismo con un cronjob. Abre el menú crontab con crontab -e. Si es la primera vez que lo haces, te pedirá seleccionar un editor. Elige la primera opción, que debería ser /bin/nano.

Con el archivo abierto en nano, añade la siguiente línea para ejecutar la renovación todos los días a las 6am hora local.

0 6 * * * certbot renew

Guarda el archivo y sal de nano con CTRL + X, luego Y para confirmar y finalmente ENTER.

Conclusión

Has configurado exitosamente Certbot para tu(s) dominio(s) mediante varios métodos, incluyendo standalone, webroot o alguno de los plugins, proporcionando a tu sitio web una transmisión de datos segura vía HTTPS. Para más preguntas o ayuda, no dudes en contactar a nuestro equipo de soporte, ¡disponible todos los días para ayudarte! 🙂