Defaults.Exposed

Defaults.ExposedSoluciones › HSTS (Strict-Transport-Security)

Cómo arreglar HSTS (Strict-Transport-Security)

El HSTS es una instrucción de una línea que tu web da a cada navegador: «vuelve siempre a mí por la conexión segura y cifrada, nunca por la insegura». Sin él, tu candado puede arrancarse en silencio en una wifi compartida, y la primerísima visita a tu web queda expuesta.

En resumen, para tu negocio: Tener HTTPS (el candado) no es lo mismo que imponerlo. Sin HSTS, un atacante en la misma wifi que tu cliente puede degradar en silencio la conexión a HTTP simple y sin cifrar, capturando inicios de sesión, datos de tarjeta y datos de formulario mientras el cliente no ve nada raro. Tu certificado SSL, que quizá estás pagando, queda esquivado. La solución es gratis y lleva unos 15 minutos a quien lleve tu web.

Lo que esto te puede costar

Por qué importa. El HTTPS protege una conexión una vez está cifrada, pero no obliga a los navegadores a usarla. Los atacantes explotan ese hueco con el «despojo de SSL»: en cualquier red compartida mantienen al visitante en silencio en HTTP inseguro, leyéndolo todo. El HSTS le dice al navegador que rechace por completo el HTTP simple para tu dominio, durante mucho tiempo, así que el hueco se cierra tras la primera visita. Es una única cabecera de respuesta, gratis de añadir, y en nuestra puntuación vale puntos de verdad, porque un valor ausente o demasiado corto deja a cada visitante en wifi pública expuesto.

Qué es esto, en palabras sencillas

Casi con seguridad ya tienes HTTPS, el pequeño candado en la barra del navegador. Bien. Pero aquí está la parte que casi nadie cuenta: tener HTTPS no es lo mismo que forzarlo.

El HTTPS hace que una conexión esté cifrada una vez que el navegador decide usarla. El HSTS —abreviatura de HTTP Strict Transport Security (Seguridad de Transporte Estricta de HTTP)— es la instrucción que hace que el navegador la use siempre. Es una única línea invisible que tu web envía a cada visitante y que dice, en efecto:

«A partir de ahora, para mi dominio, háblame solo por la conexión segura. Nunca por la insegura. Ni lo intentes.»

El navegador lo recuerda y lo obedece durante el tiempo que le digas, normalmente un año. Tras la primera visita segura de un visitante, su navegador sencillamente se negará a cargar tu web por HTTP simple y sin cifrar, aunque algo intente forzarlo.

Sin HSTS, esa regla de «usa siempre la versión segura» no existe, y los atacantes saben exactamente cómo explotar el hueco.

Lo que esto te puede costar

Estos son escenarios realistas y cotidianos. Nunca nombramos a una empresa real; son ilustraciones de cómo se usa el hueco.

  1. El pago en la cafetería. Un cliente abre tu tienda en la wifi de una cafetería y va a pagar. Un atacante en la misma red ejecuta una herramienta gratuita y conocida que mantiene al cliente en HTTP simple en lugar de HTTPS. El cliente ve lo que parece tu web normal —sin aviso, sin candado roto en el sitio donde miraría— y escribe los datos de su tarjeta. El atacante lee cada pulsación. Tu certificado SSL no hizo nada, porque a la conexión nunca se le permitió volverse segura en primer lugar.

  2. El empleado de viaje. Un miembro del personal inicia sesión en tu panel de administración o tu correo web desde un hotel o aeropuerto. El mismo truco de degradación captura su nombre de usuario y contraseña. Ahora el atacante tiene una vía de entrada a tu negocio, no porque tu política de contraseñas fuera débil, sino porque la página de inicio de sesión era alcanzable por HTTP inseguro.

  3. El acuerdo que se atasca. Un cliente mayor te envía su cuestionario de seguridad estándar antes de firmar. Una línea pregunta: «¿Tu web impone el HTTPS mediante HSTS?». Tu contacto informático tiene que responder «no», y el proceso de compras se pausa mientras corres a arreglar un ajuste gratuito de 15 minutos que ahora parece una bandera roja delante de un comprador.

  4. La comprobación de ciberseguro o cumplimiento. El escaneo de una aseguradora, o un auditor revisando tu postura de protección de datos, señala la cabecera ausente. El cifrado de los datos personales es una expectativa explícita bajo las reglas de protección de datos (Artículo 32 del RGPD), y «tenemos un certificado pero no lo imponemos» es un lugar débil donde estar.

  5. La falsa sensación de seguridad. Estás pagando por el SSL, el candado aparece, y todos suponen que la web es segura. Lo es en su mayoría, hasta que un cliente está en una red compartida, que es justo cuando es más vulnerable y menos propenso a notar algo raro.

El hilo común: el coste no es abstracto. Es la tarjeta o el inicio de sesión de un cliente real, capturado en el peor momento posible, sin que salte ninguna alarma.

Qué es en realidad

Cuando un navegador pide una página a tu web, tu servidor devuelve la página más unas «cabeceras» invisibles —instrucciones extra que el navegador lee pero el visitante nunca ve—. El HSTS es una de esas cabeceras:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Tres partes importan:

Por qué importa «la primera visita»

El HSTS tiene una limitación inherente: un navegador solo obedece la regla después de haber visto la cabecera al menos una vez. Así que la primerísima conexión de un visitante nuevo sigue siendo una pequeña ventana de exposición. Dos cosas la estrechan: una redirección de HTTP a HTTPS (que los lleva a la versión segura rápido) y preload (que elimina la ventana por completo). Por eso una configuración completa empareja el HSTS con una redirección adecuada.

Cómo se ve lo «bueno», y cómo se puntúa

Nuestra comprobación lee tu cabecera en vivo y califica el max-age:

Valor de max-ageQué significaResultado
1 año o más (≥ 31536000)Excelente — el ajuste recomendadoNota máxima
6 meses o más (≥ 15768000)Bien, pero no el año completoParcial
1 día o más (≥ 86400)Débil — demasiado corto para ser fiableBaja / parcial
Menos de 1 día, o sin cabeceraEfectivamente sin protecciónSuspenso (severidad alta)

Así que una cabecera que existe pero está puesta en unos pocos minutos se trata como un suspenso: parece configurada pero no hace su trabajo. Apunta a un año. La comprobación también anota si están presentes includeSubDomains y preload.

Cómo solucionarlo (gratis, ~15 minutos)

Pasa esta sección a quien lleve tu web: tu informático, tu desarrollador web o el soporte de tu hosting. La solución es gratis. Es una única cabecera, o un interruptor en tu plataforma de hosting. No hay nada que comprar.

Una regla de orden importante primero: el HSTS es pegajoso; una vez habilitado, los navegadores se negarán al HTTP simple para tu dominio durante todo el max-age. Así que confirma que el HTTPS funciona correctamente en tu web principal y en cada subdominio antes de activarlo de forma amplia. El camino seguro es: prueba con un valor corto → confirma que nada se rompe → sube a un año.

Paso 1 — Asegúrate de que el HTTPS ya funciona en todas partes

Visita tu web y tus subdominios clave por https:// y confirma que cargan limpiamente con un certificado válido. Confirma también que las peticiones por http:// simple redirigen a https://. (Si no lo hacen, arregla primero la redirección de HTTP a HTTPS: el HSTS asume que está en su sitio.)

Paso 2 — Añade la cabecera (elige tu plataforma)

Cloudflare (o CDN similar): Esta es la más fácil. Ve a SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) y habilítalo. Pon el Max-Age en 6 o 12 meses, y habilita «Apply HSTS policy to subdomains» una vez estés seguro de que todos los subdominios están en HTTPS.

Nginx: añade dentro de tu bloque server de HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Apache: asegúrate de que mod_headers está habilitado, luego añade a tu host virtual de HTTPS:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Microsoft IIS: añade a web.config dentro de <customHeaders>:

<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />

Nota sobre Google Workspace / Microsoft 365: estos hacen funcionar tu correo, no el hosting de tu web; el HSTS se configura allá donde viva de verdad tu web pública (tu CDN, tu servidor web o tu constructor de webs), no en el panel de administración de Workspace/365. Si tu web está en un constructor como Squarespace, Wix o Shopify, el HSTS suele gestionarse por ti; revisa sus ajustes de SSL/seguridad si nuestra comprobación lo señala.

Paso 3 — Prueba en pequeño, luego comprométete

Empieza con max-age=300 (5 minutos). Confirma que la web sigue cargando a la perfección en todas partes. Luego súbelo a max-age=31536000 (un año). Ese es el ajuste de nota máxima.

Paso 4 (opcional, patrón oro) — preload

Una vez estés seguro y hayas ejecutado una cabecera de un año con includeSubDomains durante un tiempo, puedes enviar tu dominio en hstspreload.org para que se grabe en los navegadores. Esto cierra la ventana de la primera visita por completo. Trátalo como un compromiso deliberado: retirar un dominio de la lista es lento.

Errores habituales

Preguntas frecuentes

Ya tenemos HTTPS y el candado aparece. ¿No es suficiente?

No, y este es el malentendido más común con diferencia. El candado significa que una conexión PUEDE cifrarse; no obliga a los navegadores a usar la versión cifrada. Sin HSTS, un atacante en la misma red puede mantener a un visitante en HTTP simple (lo que se llama despojo de SSL) y leer todo lo que escribe, mientras el cliente ve una web de aspecto normal. El HSTS es la instrucción que hace obligatorio el «solo cifrado». HTTPS sin HSTS es una puerta cerrada que en realidad no tiene el pestillo echado.

¿Es caro o arriesgado activarlo?

La solución en sí es gratis —es una línea en tu servidor web o un interruptor en tu CDN— y lleva unos 15 minutos. La única precaución real: el HSTS es pegajoso. Una vez que un navegador lo ve, se negará al HTTP simple para tu dominio durante todo el tiempo que especificaste. Así que debes estar seguro de que el HTTPS funciona en tu web principal Y en cada subdominio antes de habilitarlo de forma amplia. Empieza con un valor corto de prueba, confirma que nada se rompe, y luego súbelo a un año. Hecho en ese orden, el riesgo es insignificante.

¿Qué aspecto tiene de verdad lo «bueno»?

Un max-age de al menos un año (31536000 segundos). Nuestra comprobación otorga la nota máxima a un año o más, nota parcial a seis meses, débil/parcial a un día, y trata cualquier cosa por debajo de un día como efectivamente ausente. La configuración más fuerte también añade includeSubDomains (cubre shop.tuweb.com, app.tuweb.com, etc.) y preload (graba la protección en los navegadores para que incluso la primerísima visita sea segura).

¿Qué es «preload» y lo necesitamos?

El HSTS solo protege a un visitante DESPUÉS de que su navegador haya visto la cabecera al menos una vez, así que la primera petición de un visitante nuevo sigue siendo una pequeña ventana. La lista de precarga del HSTS, integrada en Chrome, Firefox, Safari y Edge, cierra esa ventana enviando tu dominio a los navegadores por adelantado. Es opcional y un compromiso algo mayor (la retirada es lenta), pero es el patrón oro. Para la mayoría de las pequeñas empresas, un max-age de un año con includeSubDomains ya es un resultado fuerte y seguro; la precarga es el paso extra una vez estés asentado.

Estamos en Squarespace / Wix / Shopify, ¿tenemos siquiera que hacer algo?

La mayoría de los constructores de webs totalmente alojados (Squarespace, Wix, Shopify y similares) imponen el HTTPS y a menudo configuran el HSTS por ti automáticamente, así que puede que ya pases sin nada que hacer. La excepción es cuando usas un dominio personalizado o una CDN delante de tu web; entonces el ajuste puede caerse por los huecos. Ejecuta la comprobación: si pasa, has terminado. Si la señala, la solución es el interruptor en los ajustes de SSL/seguridad de tu plataforma, o una línea en tu CDN.

Si no lo arreglamos, ¿baja nuestra calificación?

Sí. El HSTS es una comprobación puntuada de seguridad web, no informativa: una cabecera ausente o demasiado corta cuesta puntos y se califica como severidad alta, porque expone directamente los datos de tus visitantes en redes compartidas. Es también uno de los puntos más baratos de recuperar: una única cabecera gratuita, unos 15 minutos de trabajo.