CodeGym /Cursos /Docker SELF /Configuración de HTTPS (SSL/TLS) con Let's Encrypt

Configuración de HTTPS (SSL/TLS) con Let's Encrypt

Docker SELF
Nivel 7 , Lección 3
Disponible

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-nginx
    
  • Para Apache:

    sudo apt-get install certbot python3-certbot-apache
    
Dato interesante:

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 -t
    
  • Para 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.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION