Los navegadores y los buscadores esperan HTTPS, y Let's Encrypt ofrece certificados sin coste. En un VPS Linux Infrawire con AlmaLinux 9, Certbot puede obtener el certificado, modificar la configuración de Apache y renovarlo por sí solo. Los mismos pasos sirven para Rocky Linux 9.
📋 Requisitos previos
- Un VPS AlmaLinux 9 con acceso root o sudo (IP y contraseña en tu área de cliente).
- Un dominio,
example.com, cuyo registro A (y AAAA para IPv6) apunte aVPS_IP. Espera antes a la propagación del DNS. - Apache (httpd) sirviendo el sitio por HTTP en el puerto 80.
1. Instalar Apache y abrir el cortafuegos
Si Apache aún no está instalado, instálalo e inícialo. Después abre HTTP y HTTPS en firewalld; el puerto 80 es necesario para la validación de Let's Encrypt.
Bashdnf install -y httpd systemctl enable --now httpd firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload firewall-cmd --list-services
2. Crear un host virtual para tu dominio
Certbot busca un ServerName que coincida con tu dominio, así que crea un host virtual propio.
Bashmkdir -p /var/www/example.com/public_html echo "Hello" > /var/www/example.com/public_html/index.html
Crea /etc/httpd/conf.d/example.com.conf:
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5</VirtualHost>
Comprueba la sintaxis y recarga:
Bashapachectl configtest systemctl reload httpd
3. Instalar Certbot y mod_ssl
Certbot viene del repositorio EPEL. mod_ssl aporta el módulo TLS de Apache y un certificado por defecto que httpd necesita para escuchar en el puerto 443.
Bashdnf install -y epel-release dnf install -y certbot python3-certbot-apache mod_ssl
4. Solicitar el certificado
Ejecuta Certbot con el complemento de Apache. Valida el dominio por HTTP, escribe un nuevo host virtual *-le-ssl.conf y puede añadir la redirección de HTTP a HTTPS.
Bashcertbot --apache -d example.com -d www.example.com
Introduce un correo real (se usa para avisos de caducidad), acepta los términos y elige la redirección cuando se te pregunte. Cada nombre indicado con -d debe resolver a este servidor; de lo contrario, la validación falla.
Si SELinux está en modo enforcing (el valor por defecto), no hace falta nada especial en una instalación estándar. No lo desactives para esquivar un error.
5. Comprobar la renovación automática
Los certificados de Let's Encrypt duran 90 días. En AlmaLinux 9 el paquete instala un temporizador de systemd que se ejecuta dos veces al día y solo renueva los certificados próximos a caducar.
Bashsystemctl list-timers | grep certbot systemctl status certbot-renew.timer
Si el temporizador no aparece, actívalo:
Bashsystemctl enable --now certbot-renew.timer
Simula una renovación sin tocar el certificado real:
Bashcertbot renew --dry-run
La última línea debe indicar que todas las renovaciones simuladas han tenido éxito. Apache se recarga automáticamente tras una renovación real.
Verificación
Bashcertbot certificates curl -I https://example.com curl -I http://example.com
El primer comando lista los dominios y la fecha de caducidad. La petición HTTPS debe devolver 200 y la HTTP debería responder con un 301 hacia la dirección HTTPS. En el navegador, el candado debe mostrar un certificado válido emitido por Let's Encrypt. Para ver toda la cadena puedes ejecutar openssl s_client -connect example.com:443 -servername example.com.
Solución de problemas
- Fallo del desafío o tiempo de espera durante la validación: el DNS aún no apunta al servidor o el puerto 80 está bloqueado. Revisa
dig +short example.com,firewall-cmd --list-servicesy cualquier cortafuegos situado delante del VPS. - Certbot no encuentra un host virtual coincidente: el
ServerNameoServerAliasde/etc/httpd/conf.d/no coincide con el dominio indicado. Corrígelo, ejecutaapachectl configtesty vuelve a intentarlo. También puedes usarcertbot certonly --apachey configurar las rutas tú mismo. - Demasiados certificados o validaciones fallidas (límite de frecuencia): Let's Encrypt limita los intentos repetidos. Prueba antes con
certbot --apache --dry-runy espera antes de reintentar. - Sitio inaccesible por el 443 tras la instalación: HTTPS no está abierto en firewalld o httpd no se recargó. Ejecuta
firewall-cmd --permanent --add-service=https,firewall-cmd --reloadysystemctl restart httpd.
🔐 Tu sitio Apache en AlmaLinux 9 ya sirve HTTPS y renueva su certificado por sí solo.