Cómo funcionan realmente HTTPS y TLS: Guía práctica

Security2026-11-02TryQuickToolBox

Has visto el icono del candado en tu navegador y sabes que HTTPS es importante. Pero, ¿realmente entiendes qué sucede cuando un navegador se conecta a un sitio HTTPS? Muchos desarrolladores tratan TLS como una caja negra: lo configuran una vez y lo olvidan. Eso funciona hasta que algo falla, el rendimiento se resiente o una auditoría de seguridad revela configuraciones incorrectas.

Esta guía explica HTTPS y TLS en términos prácticos. Aprenderás el proceso de handshake, cómo los certificados establecen confianza y los pasos para implementar TLS correctamente en tus servidores. Sin exceso de jerga, solo los conceptos que necesitas para depurar problemas y tomar decisiones informadas.

Qué es realmente HTTPS

HTTPS es HTTP sobre TLS (Transport Layer Security). Proporciona tres garantías:

TLS es el protocolo que hace esto posible. SSL es su predecesor; todavía verás "certificados SSL" en marketing, pero los sistemas modernos usan TLS (actualmente TLS 1.3 es el más reciente).

El handshake TLS: paso a paso

Antes de que fluya cualquier dato HTTP, el cliente y el servidor realizan un handshake para acordar parámetros de cifrado y verificar identidades. Este es el flujo simplificado para TLS 1.3, el estándar moderno:

  1. Client Hello: El navegador envía una lista de suites de cifrado compatibles, versiones de TLS y un valor aleatorio (client random).
  2. Server Hello: El servidor elige una suite de cifrado, envía su propio valor aleatorio (server random) y proporciona su cadena de certificados.
  3. Intercambio de claves: Usando Diffie-Hellman efímero (o similar), ambas partes derivan un secreto compartido sin transmitirlo directamente. Esto proporciona secreto hacia adelante (forward secrecy): comprometer la clave privada del servidor en el futuro no descifrará sesiones pasadas.
  4. Verificación del certificado: El cliente verifica el certificado contra las CA raíz de confianza, valida el nombre de dominio y comprueba la expiración y el estado de revocación.
  5. Finished: Ambos lados envían un MAC (código de autenticación de mensaje) para confirmar que el handshake no fue manipulado. Comienza el tráfico HTTP cifrado.

TLS 1.3 redujo el handshake a un solo viaje de ida y vuelta (1-RTT) y admite la reanudación 0-RTT para visitantes recurrentes, mejorando la latencia. TLS 1.2 requería dos viajes de ida y vuelta.

Certificados: el ancla de confianza

Un certificado TLS vincula una clave pública a un nombre de dominio y está firmado por una Autoridad de Certificación (CA). Cuando tu navegador se conecta a example.com, verifica que el certificado:

Puedes obtener certificados gratuitos de Let's Encrypt, que emite certificados de 90 días mediante el protocolo ACME. Herramientas de automatización como Certbot gestionan la renovación. Para servicios internos, puedes ejecutar tu propia CA, pero los clientes deben confiar en ella explícitamente.

Configurar TLS en tu servidor

Una configuración adecuada equilibra seguridad, compatibilidad y rendimiento. Aquí tienes una lista de verificación:

Para Nginx, una configuración segura mínima se ve así:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
    ssl_prefer_server_ciphers off;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    add_header Strict-Transport-Security "max-age=63072000" always;

    location / {
        proxy_pass http://localhost:3000;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Prueba tu configuración con herramientas como SSL Labs' SSL Test o testssl.sh. Apunta a una calificación A, pero no persigas puntuaciones perfectas a costa de romper clientes antiguos si debes soportarlos.

Errores comunes y cómo evitarlos

Preguntas frecuentes

¿Cuál es la diferencia entre HTTPS y TLS?

HTTPS es HTTP sobre TLS. TLS es el protocolo criptográfico que proporciona cifrado, autenticación e integridad. No puedes tener HTTPS sin TLS.

¿Necesito un certificado separado para www y sin www?

Puedes incluir ambos en el campo Subject Alternative Names (SAN) de un único certificado. La mayoría de las CA emiten certificados que cubren ambos por defecto o con una configuración simple.

¿Con qué frecuencia debo rotar mis certificados TLS?

Sigue el período de validez de la CA: 90 días para Let's Encrypt. Automatiza la renovación con un cron job o un timer de systemd. Rota inmediatamente si una clave privada se ve comprometida.

¿Listo para inspeccionar tu tráfico web? Usa el Analizador de Logs de Nginx para parsear los logs de acceso y verificar solicitudes HTTPS, códigos de estado y posibles problemas.