1. De qué trata esta lección y por qué es importante
En el mundo moderno, HTTPS ya es el estándar para todos los sitios. Si quieres que tus usuarios se sientan seguros, y que Google no baje tu sitio en la clasificación de resultados de búsqueda (sí, HTTPS impacta en el SEO), estás prácticamente obligado a configurar SSL/TLS. El protocolo HTTPS protege los datos transmitidos entre el usuario y el servidor mediante encriptación, lo que elimina la posibilidad de que sean interceptados por atacantes.
En esta lección repasaremos paso a paso cómo conectar HTTPS gratis a tu servidor web usando Let's Encrypt. Let's Encrypt es un centro de certificación (CA) de confianza que proporciona certificados gratuitos y herramientas para su instalación. También aprenderemos a renovar automáticamente nuestros certificados para evitar dolores de cabeza relacionados con su vencimiento.
HTTP vs HTTPS
HTTP (Hypertext Transfer Protocol) es un protocolo de transferencia de datos. Es bueno para mirar memes de gatos, PERO… si alguien se conecta a tu red Wi-Fi (por ejemplo, en una cafetería), podrá interceptar los datos que envías al servidor (¡horror, tu contraseña se convertirá en "su contraseña"!).
HTTPS (Hypertext Transfer Protocol Secure) es la versión de HTTP con encriptación añadida. Los datos transmitidos entre el cliente y el servidor están protegidos mediante SSL/TLS (Secure Sockets Layer / Transport Layer Security). Los atacantes ya no podrán ver el contenido de los "paquetes" de datos, incluso si logran interceptarlos.
2. Instalación de Let's Encrypt y Certbot
Certbot es una herramienta creada por los desarrolladores de Let's Encrypt que permite obtener y configurar fácilmente los certificados SSL para tu servidor web. Es lo suficientemente inteligente como para trabajar automáticamente con Nginx o Apache, haciendo todo el trabajo tedioso por nosotros. Empecemos con la instalación.
Instalación de Certbot
Asegúrate de que tu servidor esté actualizado:
sudo apt-get update
sudo apt-get upgrade
Ahora instalemos Certbot y sus plugins:
Para Nginx:
sudo apt-get install certbot python3-certbot-nginxPara Apache:
sudo apt-get install certbot python3-certbot-apache
Certbot en sí es simplemente código Python, mantenido activamente por la comunidad. Se integra fácilmente con la mayoría de los servidores.
3. Obtención de un certificado SSL con Certbot
Para Nginx
Certbot puede configurar HTTPS automáticamente para tu sitio si usas Nginx. Escribe:
sudo certbot --nginx
Certbot escaneará tus hosts virtuales actuales (bloques server en la configuración). Te preguntará para qué dominio deseas configurar HTTPS. Asegúrate de que el dominio apunte a tu servidor a través de DNS (por ejemplo, utilizando un registro A).
Ejemplo de salida:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Selecciona tu dominio (por ejemplo, 1).
Certbot configurará automáticamente la configuración de Nginx y la probará. Después de una instalación exitosa, verás un mensaje como este:
Congratulations! Your certificate and chain have been saved ...
Ahora tu sitio está disponible en HTTPS. Puedes verificar esto abriendo https://example.com en tu navegador.
Para Apache
Si utilizas Apache, el comando será un poco diferente:
sudo certbot --apache
Certbot también escaneará tus hosts virtuales (bloques <VirtualHost>) y te ofrecerá configurar HTTPS para los dominios seleccionados. Selecciona los necesarios y Certbot hará todo por ti.
Después de completar el proceso, nuevamente verás un mensaje de felicitación y podrás verificar la accesibilidad de tu sitio a través de HTTPS.
4. Actualización automática de certificados
Los certificados de Let's Encrypt tienen una validez de solo 90 días, por lo que es necesario renovarlos regularmente. Certbot puede hacerlo automáticamente, pero necesitamos asegurarnos de que todo esté configurado correctamente.
Verificación de la vigencia de los certificados
Puedes verificar cuándo expira tu certificado:
sudo certbot certificates
El resultado mostrará tus dominios y la fecha de expiración de sus certificados.
Configuración de la renovación automática
Durante la instalación, Certbot añade automáticamente una tarea en Cron o un Systemd Timer para verificar las actualizaciones. Si quieres asegurarte de que todo funciona, añade una tarea de prueba en Cron:
sudo crontab -e
Añade la siguiente línea:
0 0 * * * certbot renew --quiet
Este comando revisa y renueva los certificados diariamente a la medianoche. La clave --quiet desactiva la salida de información innecesaria.
Renovación manual
Si quieres renovar los certificados manualmente (por ejemplo, para pruebas), utiliza:
sudo certbot renew
5. Activación de redirección automática HTTP → HTTPS
Tu sitio aún puede estar disponible a través de HTTP, pero eso no es seguro. Configuraremos una redirección automática de todas las solicitudes a HTTPS.
Para Nginx
Certbot puede configurar automáticamente la redirección al emitir el certificado. Si no habilitaste esto antes, agrega manualmente la redirección en tu archivo de configuración del host virtual:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Reinicia Nginx para aplicar los cambios:
sudo systemctl restart nginx
Para Apache
Certbot también ofrece habilitar redirecciones automáticamente. Si te saltaste este paso, añade lo siguiente en tu archivo de host virtual:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Reinicia Apache:
sudo systemctl restart apache2
6. Depuración de errores
Si algo sale mal, empieza por revisar los logs:
Para Nginx
sudo tail -f /var/log/nginx/error.log
Para Apache
sudo tail -f /var/log/apache2/error.log
Pruebas de configuración
También revisa la configuración del servidor web:
Para Nginx:
sudo nginx -tPara Apache:
sudo apachectl configtest
Verificar HTTPS
Asegúrate de que tu sitio esté disponible por HTTPS:
curl -I https://example.com
Deberías ver el estado 200 OK y la línea Strict-Transport-Security, lo que significa que HTTPS está funcionando.
Ahora estás listo para crear sitios HTTPS seguros y protegidos. Tus usuarios estarán contentos, Google también, y podrás dormir tranquilo sabiendo que tus datos están protegidos de los villanos de internet.
GO TO FULL VERSION