Instalar un certificado SSL gratis con Let's Encrypt y Certbot
Certificado SSL gratuito para tu servidor Linux: así instalas Certbot en Debian y Ubuntu, emites un certificado de Let's Encrypt para Apache y dejas que se renueve solo.
Un certificado SSL de Let's Encrypt no cuesta nada, se configura en pocos minutos y lo aceptan todos los navegadores habituales. En esta guía activas HTTPS en tu propio servidor Linux con Apache: en Debian 13, Debian 12, Ubuntu 24.04 LTS y Ubuntu 22.04 LTS.
De la emisión se encarga Certbot, el cliente ACME oficial de la Electronic Frontier Foundation. Certbot solicita el certificado, lo inscribe en la configuración de Apache y después lo renueva por su cuenta mediante un timer de systemd.
Requisitos
- Un dominio cuyo registro A (y también el registro AAAA si usas IPv6) apunte a tu VPS o a tu servidor root.
- Un servidor web Apache2 en funcionamiento, con un VirtualHost para ese dominio.
- Acceso root por SSH.
- El puerto 80 y el puerto 443 tienen que ser accesibles desde fuera. Let's Encrypt valida el dominio a través del puerto 80.
Comprueba primero si el dominio apunta realmente a tu servidor. Para ello, introduce tu dominio en https://check-host.net/. Si ahí aparece la dirección IP de tu servidor, puedes continuar. Si el DNS todavía apunta a un destino antiguo, espera a que se propague la actualización, porque de lo contrario la emisión falla.
Actualizar el sistema
Pon primero al día la lista de paquetes y los paquetes instalados:
apt update && apt upgrade -y
Instalar Certbot
Hay dos vías habituales. El paquete de la distribución es el camino más sencillo y resulta más que suficiente para la mayoría de servidores. El paquete snap trae siempre la versión más reciente de Certbot y es el que recomienda oficialmente la Electronic Frontier Foundation.
Variante 1: Certbot desde el repositorio de la distribución
En Debian y Ubuntu, Certbot y el plugin de Apache están directamente en los repositorios de paquetes:
apt install certbot python3-certbot-apache -y
El paquete "python-certbot-apache", muy extendido en su día, pertenecía a Python 2 y ya no existe. En todas las versiones actuales de Debian y Ubuntu, el nombre de paquete correcto es "python3-certbot-apache".
Variante 2: instalar Certbot mediante snap
Si quieres disponer siempre de la versión más reciente de Certbot, por ejemplo para plugins DNS o certificados wildcard, instala Certbot como snap. Elimina antes una posible instalación por paquete, para que las dos no se estorben:
apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Emitir el certificado e integrarlo en Apache
La vía más rápida es el plugin de Apache. Certbot lee los VirtualHosts existentes, solicita el certificado y escribe él mismo la configuración SSL adecuada:
certbot --apache -d MiDominio.com -d www.MiDominio.com
Si prefieres controlar tú mismo la configuración de Apache, puedes hacer que la validación del dominio pase por el directorio webroot. Indica entonces exactamente el directorio que el VirtualHost usa como DocumentRoot:
certbot --authenticator webroot --installer apache -w /var/www/MiDominio.com -d MiDominio.com -d www.MiDominio.com
Si tu página web está en el directorio predeterminado, el comando es:
certbot --authenticator webroot --installer apache -w /var/www/html/ -d MiDominio.com -d www.MiDominio.com
Las preguntas de Certbot
En la primera ejecución, Certbot hace algunas preguntas:
- Dirección de correo electrónico: indica una dirección que leas de verdad. Let's Encrypt la usa para avisarte cuando una renovación no llega a producirse.
- Condiciones de uso: con "A" las aceptas.
- Boletín de la Electronic Frontier Foundation: "Y" para sí, "N" para no. Es voluntario y no influye en el certificado.
- Redirección a HTTPS: elige la opción "Redirect" para que Apache envíe automáticamente todas las peticiones HTTP a HTTPS.
Después, Certbot muestra la ruta del certificado. Los archivos están en /etc/letsencrypt/live/MiDominio.com/. No edites esos archivos a mano, se reescriben en cada renovación.
Comprobar la renovación automática
Un certificado de Let's Encrypt tiene una validez de 90 días. Certbot lo renueva automáticamente en cuanto quedan menos de 30 días de vigencia. Para eso, el paquete incluye un timer de systemd. Comprueba si está activo:
systemctl list-timers certbot.timer
Si el timer no está activo, actívalo:
systemctl enable --now certbot.timer
Prueba después el proceso en seco. Así no se emite nada, Certbot solo simula la renovación:
certbot renew --dry-run
Para que Apache utilice realmente el certificado nuevo tras una renovación, registra una sola vez un deploy hook:
certbot renew --deploy-hook "systemctl reload apache2"
Mostrar y eliminar certificados
Para obtener una visión general de todos los certificados gestionados en el servidor:
certbot certificates
Un certificado que ya no necesites lo eliminas así, para que Certbot no siga intentando renovarlo:
certbot delete --cert-name MiDominio.com
Errores frecuentes
- "Could not bind to port 80": otro servicio ocupa el puerto 80. Detenlo o usa el método webroot, que trabaja con el Apache que ya está en marcha.
- "Invalid response from http://.../.well-known/acme-challenge/...": el dominio no apunta a este servidor, un firewall bloquea el puerto 80, o el directorio webroot indicado no coincide con el VirtualHost.
- "The requested apache plugin does not appear to be installed": falta el paquete "python3-certbot-apache".
- "too many certificates already issued": has alcanzado un límite de Let's Encrypt. A partir de ahora, prueba las configuraciones con
--dry-runantes de solicitar un certificado real. - El navegador sigue mostrando un aviso: vacía la caché del navegador y comprueba si Apache se recargó después de la emisión.
Redirigir HTTP a HTTPS de forma permanente
Si no activaste la redirección cuando Certbot te lo preguntó, puedes añadirla en cualquier momento. Cómo funciona eso con un archivo .htaccess lo describimos en un artículo aparte sobre la redirección de HTTP a HTTPS.
Preguntas frecuentes
¿Cuánto cuesta un certificado SSL de Let's Encrypt?
¿Cuánto tiempo es válido un certificado de Let's Encrypt?
¿Tengo que renovar el certificado a mano?
¿Let's Encrypt funciona también para subdominios?
¿Por qué falla la validación del dominio?
2023-2026 KernelHost GmbH. Todos los derechos reservados. Esta guía está protegida por derechos de autor. Su publicación en otros sitios web, aunque sea de forma parcial o modificada, no está permitida sin nuestro consentimiento por escrito. Las citas con indicación de la fuente y un enlace son muy bienvenidas.

