Seguridad Web: Certificados SSL/TLS con Let's Encrypt, Certbot y HTTPS
El protocolo HTTPS (HyperText Transfer Protocol Secure) cifra todo el tráfico intercambiado entre el navegador del cliente y el servidor web a través del puerto TCP 443, garantizando tres principios de seguridad fundamentales: confidencialidad (nadie puede espiar los datos), integridad (nadie puede alterarlos en tránsito) y autenticidad (garantiza que el usuario está conectado al servidor legítimo).
En la actualidad, gracias a Let's Encrypt y la herramienta Certbot, la emisión y renovación de certificados SSL/TLS es completamente gratuita y 100% automatizada.
1. Let's Encrypt y la Automatización con Certbot #
Let's Encrypt es una Autoridad de Certificación (CA) abierta y gratuita que utiliza el protocolo ACME para verificar de forma automática que el administrador controla el dominio antes de emitir el certificado.
1┌──────────────────────┐ ┌───────────────────────────────────┐ 2│ CLIENTE WEB │ │ SERVIDOR LINUX │ 3├──────────────────────┤ ├───────────────────────────────────┤ 4│ Navegador Web │ ── HTTPS (443) ──► │ Nginx / Apache + Certificado TLS │ 5│ │ ◄─ Datos Cifrados ─ │ (Emitido por Let's Encrypt) │ 6└──────────────────────┘ └───────────────────────────────────┘
Instalación de Certbot para Nginx o Apache: #
1sudo apt update 2sudo apt install certbot python3-certbot-nginx python3-certbot-apache
Obtención y configuración automática del certificado: #
Para Nginx:
1sudo certbot --nginx -d tudominio.com -d www.tudominio.com
Para Apache:
1sudo certbot --apache -d tudominio.com -d www.tudominio.com
Durante el proceso, Certbot:
- Realiza el desafío ACME HTTP-01 creando un archivo temporal en
/.well-known/acme-challenge/. - Descarga los certificados firmados en
/etc/letsencrypt/live/tudominio.com/. - Modifica automáticamente la configuración del servidor web para activar SSL y configurar la redirección obligatoria de HTTP (puerto 80) hacia HTTPS (puerto 443).
2. Renovación Automática de Certificados #
Los certificados de Let's Encrypt tienen una validez de 90 días. Certbot instala automáticamente un temporizador de systemd (certbot.timer) o una tarea cron que comprueba dos veces al día los certificados a renovar:
1# Probar la renovación automática en modo simulación (Dry Run) 2sudo certbot renew --dry-run
3. Certificados Autofirmados para Entornos de Laboratorio Local #
Si estás trabajando en una red local con direcciones IP privadas (ej. 192.168.1.50) sin un dominio público registrado, puedes generar un certificado SSL autofirmado con openssl:
1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ 2 -keyout /etc/ssl/private/servidor_local.key \ 3 -out /etc/ssl/certs/servidor_local.crt
Luego se enlaza en Nginx:
1server { 2 listen 443 ssl; 3 server_name 192.168.1.50; 4 5 ssl_certificate /etc/ssl/certs/servidor_local.crt; 6 ssl_certificate_key /etc/ssl/private/servidor_local.key; 7 8 location / { 9 root /var/www/html; 10 index index.html; 11 } 12}
Resumen del tema
Conceptos clave #
- HTTPS en Puerto 443: cifrado del canal de comunicación web mediante TLS para proteger credenciales y datos en tránsito.
- Let's Encrypt & Certbot: emisión gratuita y configuración automática de certificados SSL/TLS reconocidos por todos los navegadores.
- Redirección 301: reenvío automático de todo el tráfico del puerto 80 hacia el puerto seguro 443.
- Renovación con
certbot renew: automatización desatendida para renovar certificados antes de su expiración de 90 días.
Qué debes recordar #
En producción, publica siempre tus servicios web bajo HTTPS usando Certbot (certbot --nginx o certbot --apache) para garantizar la seguridad y confianza de tus usuarios.