Hace muchos años publiqué un artículo que quedó obsoleto sobre cómo instalar certificados autofirmados en Apache y conseguir el famoso candado verde en el navegador. Era junio de 2020 y explicaba cómo generar nuestros propios certificados utilizando OpenSSL, crear una autoridad certificadora (CA) e instalarla como confiable en nuestro ordenador.
Aquel procedimiento estaba orientado a entornos de desarrollo y sigue siendo válido para determinadas situaciones. Sin embargo, desde entonces el mundo de los certificados SSL/TLS ha cambiado bastante. De hecho, el propio candado verde ya es historia: Google Chrome lo sustituyó en 2023 por un icono de controles, considerando que HTTPS debería ser el comportamiento habitual y no algo excepcional.
Pero hay un cambio mucho más importante, especialmente para quienes administramos servidores: los certificados digitales tienen una duración cada vez más corta y su renovación manual está dejando de ser una alternativa razonable.
En este artículo voy a repasar cómo hemos llegado hasta aquí y cómo podemos olvidarnos de gestionar manualmente los certificados HTTPS de nuestros servidores utilizando Let’s Encrypt, el protocolo ACME y Certbot.
Los certificados SSL cada vez duran menos
En aquel artículo de 2020 generábamos nuestros propios certificados autofirmados y podíamos establecer fechas de caducidad bastante lejanas. De hecho, con certificados propios sigue siendo posible. Sin embargo, con los certificados públicos, aquellos que los navegadores reconocen como confiables, las cosas han cambiado mucho.
Antes podían tener una validez de varios años, después se redujo a poco más de uno y, desde hace muy poco, se están aplicando nuevos recortes que van a reducir considerablemente su duración.
Esta es la evolución de los límites máximos para los certificados públicos:
| Entrada en vigor | Validez máxima |
|---|---|
| Antes de abril de 2015 | 5 años |
| Abril de 2015 | 39 meses |
| Marzo de 2018 | 825 días |
| Septiembre de 2020 | 398 días |
| Marzo de 2026 | 200 días |
| Marzo de 2027 | 100 días |
| Marzo de 2029 | 47 días |
Por su parte, Let’s Encrypt lleva años emitiendo certificados de 90 días y también ha anunciado que reducirá su duración a 64 días en febrero de 2027 y a tan solo 45 días en febrero de 2028.
Todo esto puede resultar un auténtico engorro, especialmente cuando administramos muchos dominios o trabajamos con servidores internos que no tienen acceso directo a Internet. Pero detrás hay un motivo de ciberseguridad: si alguien consigue comprometer la clave privada de un certificado, podría llegar a utilizarla para suplantar nuestro servidor. Cuanto menos dure ese certificado, menor será el tiempo durante el que podría aprovecharlo.
El problema es que, con certificados que pronto caducarán cada mes y medio, renovarlos manualmente deja de ser una opción práctica. Por suerte, existen herramientas que permiten automatizar todo este proceso.
ACME: el protocolo que automatiza los certificados
Cuando hablamos de certificados gratuitos y automatizados, probablemente el primer nombre que nos viene a la cabeza sea Let’s Encrypt.
Este proyecto, impulsado por la organización sin ánimo de lucro Internet Security Research Group (ISRG), ha contribuido enormemente a extender HTTPS por Internet.
Una de las claves de su éxito ha sido ACME (Automatic Certificate Management Environment).
ACME es un protocolo diseñado para automatizar la gestión de certificados digitales, desde la validación de un dominio hasta la emisión y renovación de sus certificados.
Su funcionamiento, simplificando bastante, es el siguiente:
- Un cliente ACME solicita un certificado para un dominio.
- La autoridad certificadora pide una prueba de que controlamos ese dominio.
- El cliente demuestra dicho control, por ejemplo, publicando un recurso HTTP o un registro DNS.
- La autoridad emite el certificado.
- El cliente lo instala y se encarga de renovarlo cuando corresponda.
Todo ello puede realizarse sin intervención humana.
Es importante destacar que ACME no es un protocolo exclusivo de Let’s Encrypt. Es un estándar abierto que pueden utilizar distintas autoridades certificadoras.
Certbot: automatizando HTTPS en Linux
Vamos ahora con la parte práctica.
Certbot es un cliente ACME gratuito y de código abierto que permite gestionar certificados digitales desde nuestros servidores.
Lo interesante es que dispone de integración con servidores web como Apache y Nginx.
Esto significa que no necesitamos generar manualmente certificados con OpenSSL, descargar ficheros, configurar sus rutas, modificar los VirtualHosts y repetir todo el procedimiento cada pocos meses.
Con Certbot podemos automatizar prácticamente todo ese trabajo.
Voy a explicar el procedimiento para un servidor Linux con Ubuntu y Apache.
1. Instalar Certbot
Certbot está disponible en los repositorios oficiales de Ubuntu, se instala así de fácil:
sudo apt update
sudo apt install certbot python3-certbot-apache
2. Generar nuestro primer certificado e instalarlo en Apache
Vamos a suponer que tenemos una página web alojada en nuestro servidor y que Apache ya tiene configurado un VirtualHost.
Por ejemplo:
<VirtualHost *:80>
ServerName midominio.com
ServerAlias www.midominio.com
DocumentRoot /var/www/midominio
</VirtualHost>
Los dominios deben resolver hacia nuestro servidor y este debe ser accesible desde Internet por el puerto 80 para utilizar la validación HTTP habitual.
La primera vez que utilicemos Certbot, el comando es un poquito más largo. Pero es muy sencillo, se hace así:
sudo certbot --apache -d midominio.com -d www.midominio.com -m [email protected] --agree-tos --redirect
¿Qué estamos haciendo?
--apacheindica que queremos utilizar la integración con Apache.-despecifica los dominios que incluirá el certificado.-mregistra nuestro correo electrónico de contacto.--agree-tosacepta los términos de servicio de la autoridad certificadora.--redirectsolicita redirigir automáticamente las peticiones HTTP a HTTPS.
Los parámetros del correo y la aceptación de condiciones son necesarios para registrar inicialmente nuestra cuenta ACME, pero no tendremos que repetirlos en cada operación posterior utilizando esa misma cuenta.
Si todo funciona correctamente, Certbot realizará automáticamente las operaciones necesarias para validar el dominio, solicitar el certificado a Let’s Encrypt e instalarlo en Apache.
También modificará la configuración de nuestros VirtualHosts para habilitar HTTPS, utilizando los certificados que almacena habitualmente en /etc/letsencrypt/live/.
En una instalación estándar, Certbot se encargará de recargar Apache para aplicar los cambios. Es decir, normalmente ni siquiera necesita reiniciar completamente el servicio.
Y lo mejor es que también deja preparada la renovación automática del certificado.
Todo esto con un único comando.
3. ¿Y si tengo varios dominios o VirtualHosts?
Aquí viene otra de las grandes ventajas.
Si utilizamos Apache para alojar varias páginas web, podemos gestionar diferentes certificados desde la misma instalación de Certbot.
Imaginemos que, además de midominio.com, tenemos configuradas otras dos páginas en sus propios VirtualHosts.
Solo tenemos que ejecutar:
sudo certbot --apache -d blog.otrodominio.com
Y para otra web:
sudo certbot --apache -d ejemplo.es -d www.ejemplo.es
Certbot buscará los VirtualHosts correspondientes y, si puede identificarlos correctamente, se encargará de configurar los certificados.
Los nuevos dominios se incorporarán también a su sistema de renovaciones automáticas.
Otra posibilidad es ejecutar directamente:
sudo certbot --apache
En ese caso, Certbot puede detectar los nombres de dominio configurados en Apache y ofrecernos una selección interactiva para decidir cuáles queremos proteger.
No es necesario crear un certificado diferente para cada nombre de dominio: podemos incluir varios nombres dentro de un mismo certificado, como ocurre con midominio.com y www.midominio.com.
Eso sí, cada dominio que queramos incluir debe superar su correspondiente validación. Y para trabajar cómodamente con el plugin de Apache es recomendable tener correctamente definidos ServerName y ServerAlias.
4. ¿Cómo funciona la renovación automática?
Cuando instalamos Certbot mediante uno de los métodos habituales, se configura una tarea programada que comprueba periódicamente si hay certificados pendientes de renovar.
En instalaciones modernas de Ubuntu, esta programación se realiza normalmente mediante un temporizador de systemd.
Si lo hemos instalado utilizando Snap, podemos comprobar su estado con:
sudo systemctl status snap.certbot.renew.timer
También podemos consultar los temporizadores relacionados con Certbot:
sudo systemctl list-timers --all | grep certbot
Si lo hemos instalado desde APT, normalmente encontraremos un temporizador denominado certbot.timer.
Es importante entender que Certbot no necesita mantener un servicio ejecutándose permanentemente. El temporizador lanza periódicamente una tarea que revisa los certificados y solo renueva aquellos para los que corresponde hacerlo.
Cuando se realiza una renovación, Certbot utiliza la configuración almacenada para volver a validar el dominio y obtener un certificado actualizado.
Si utilizamos el plugin de Apache, también se encarga de recargar el servidor web cuando corresponde para que comience a utilizar el nuevo certificado.
5. Consultar los certificados y comprobar las renovaciones
Certbot también proporciona comandos muy útiles para revisar nuestra instalación.
Para consultar todos los certificados que administra, los dominios que incluyen y sus fechas de caducidad:
sudo certbot certificates
Para realizar una prueba de renovación sin sustituir realmente nuestros certificados de producción:
sudo certbot renew --dry-run
Este último comando es especialmente recomendable después de instalar Certbot o realizar modificaciones importantes en Apache, el DNS o las reglas del firewall.
También podemos ejecutar manualmente el proceso habitual de renovación:
sudo certbot renew
Aunque normalmente no tendremos necesidad de hacerlo, ya que la tarea programada se encargará de ello.
Los registros de ejecución pueden consultarse en:
/var/log/letsencrypt/
Conviene revisar ocasionalmente estos registros y, en entornos de producción, disponer de monitorización que nos avise si un certificado está próximo a caducar. La automatización reduce mucho el trabajo, pero también puede fallar por cambios en DNS, problemas de conectividad o errores en la configuración.
¿Y si mi servidor no está expuesto a Internet?
Hasta ahora hemos utilizado --apache, que normalmente valida el dominio mediante HTTP-01. Este método requiere que la autoridad certificadora pueda acceder a nuestro servidor por el puerto 80.
Pero ACME permite otras alternativas.
Con la validación DNS-01, por ejemplo, podemos demostrar que controlamos un dominio publicando un registro TXT en su zona DNS pública.
Esto permite emitir certificados para servicios que no están expuestos directamente a Internet, siempre que utilicemos un dominio que podamos validar mediante DNS público.
Certbot también dispone de plugins para automatizar esta validación con proveedores DNS como Cloudflare.
Es una opción interesante para servidores internos y también para obtener certificados wildcard, como *.midominio.com.
Eso sí, no debemos confundir un dominio público que apunta a un servidor interno con un nombre puramente privado, como servidor.local. Las autoridades certificadoras públicas no pueden emitir certificados para cualquier nombre interno arbitrario.
Para esos casos, una autoridad certificadora privada sigue siendo una alternativa válida, como explicaba en aquel artículo de 2020.
Conclusión: automatizar los certificados ya no es opcional en la práctica
Hace años, renovar manualmente un certificado SSL una vez cada varios años era una tarea asumible.
Con el tiempo pasamos a hacerlo anualmente. Ahora hemos reducido su duración a 200 días y, a partir de 2029, los certificados públicos tendrán una validez máxima de apenas 47 días.
Let’s Encrypt, de hecho, ya ha anunciado que emitirá certificados de 45 días por defecto en 2028.
Gestionar manualmente todo este proceso, especialmente cuando administramos varios servidores y dominios, deja de tener sentido.
La buena noticia es que las herramientas ya existen y funcionan realmente bien. El protocolo ACME permite automatizar la emisión y renovación de certificados y, gracias a aplicaciones como Certbot, podemos integrar estos procesos directamente con Apache o Nginx.
Ya no se trata únicamente de conseguir que aparezca HTTPS en nuestro navegador, sino de garantizar que ese HTTPS siga funcionando sin depender de que alguien se acuerde de renovar un certificado.
Y, viendo la dirección que ha tomado el sector, es una automatización que conviene incorporar cuanto antes.






