Cookies Este sitio guarda solo lo imprescindible para funcionar. Hoy no usa analítica ni publicidad, y nada de lo que hay aquí te sigue a otras webs. Leer la política de privacidad

Elegir qué permitir
+92 312 8299940Presupuesto gratis
Blog

HSTS: cómo añadir Strict-Transport-Security sin riesgo

HSTS explicado fácil: qué protege la cabecera Strict-Transport-Security, cómo añadirla en htaccess y cómo subir max-age sin riesgo.

By the Denwix team 7 min read

¿Qué es HSTS?

HSTS significa HTTP Strict Transport Security. Es una sola cabecera de respuesta, Strict-Transport-Security. Le dice al navegador: para este sitio, usa solo HTTPS a partir de ahora.

Cuando el navegador ya vio la cabecera, cambia cada enlace http:// por https:// antes de enviar nada. Además, no deja que el visitante ignore un aviso de certificado. Como resultado, nadie puede devolver en silencio a ese visitante a HTTP.

Diagrama: el navegador recibe la cabecera HSTS, recuerda usar solo HTTPS y luego va directo a HTTPS
HSTS convierte una redirección puntual en una regla que el navegador recuerda.

El hueco que cierra HSTS

La mayoría de los sitios ya redirige de HTTP a HTTPS. Eso está bien, pero deja un hueco. La primera petición sigue saliendo por HTTP simple, y solo entonces el servidor responde con la redirección.

En una wifi pública, esa primera petición es el momento débil. Un atacante en la misma red puede responder antes y mantener al visitante en una copia falsa de tu sitio por HTTP. Este truco se llama SSL stripping.

HSTS elimina ese momento en todas las visitas después de la primera. Como el navegador ya conoce la regla, nunca envía la petición HTTP. Además, desaparece el salto de redirección, así que la página también abre un poco más rápido.

Cómo añadir HSTS en htaccess

Primero, comprueba que todas las páginas funcionan con HTTPS, incluidas imágenes, scripts y los subdominios que usas. Después añade una línea al archivo .htaccess en Apache:

Header always set Strict-Transport-Security "max-age=300"

Empieza con un max-age corto de 300 segundos mientras pruebas. Si algo falla, los navegadores olvidan la regla en cinco minutos. En Nginx, la misma línea va en el bloque del servidor HTTPS:

add_header Strict-Transport-Security "max-age=300" always;
Demo: la comprobación muestra que ya se envía Strict-Transport-Security tras añadir una línea en htaccess
Con una línea en htaccess, ya se envía la cabecera Strict-Transport-Security.

Después, revisa el resultado con nuestro HTTP Header Checker gratuito. Muestra si la cabecera se envía y qué max-age usa.

Cómo subir max-age sin riesgo

HSTS es fácil de activar pero lento de desactivar. El navegador guarda la regla durante todo el max-age, aunque quites la cabecera. Por eso, súbelo por pasos:

  1. 300 segundos (cinco minutos) mientras pruebas.
  2. 86400 segundos (un día) cuando nada se haya roto.
  3. 604800 segundos (una semana) tras unos días tranquilos.
  4. 31536000 segundos (un año) cuando todas las páginas lleven un tiempo en HTTPS.

Un año es el valor que recomiendan la mayoría de las guías para un sitio en producción. También es el mínimo para la lista de preload.

includeSubDomains y preload

La opción includeSubDomains aplica la regla también a cada subdominio. Añádela solo cuando todos los subdominios funcionen con HTTPS, incluidos los viejos, como una herramienta interna o un panel de correo.

La opción preload va un paso más allá. Los navegadores traen una lista de sitios HSTS, así que incluso la primera visita usa HTTPS. Sin embargo, salir de esa lista tarda meses. Por lo tanto, envía tu dominio en hstspreload.org solo cuando estés seguro.

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

HSTS en otros servidores y CDN

La idea es igual en todas partes: enviar una cabecera en cada respuesta HTTPS. Así, solo cambia el lugar donde la escribes.

Cloudflare

En el panel de Cloudflare, abre SSL/TLS, luego Edge Certificates, y activa HSTS. Elige ahí el max-age. Como Cloudflare envía la cabecera, no necesitas también una línea en htaccess.

WordPress

Si no puedes editar el servidor, un plugin de seguridad puede añadir la cabecera. Sin embargo, una regla del servidor es más rápida, porque actúa antes de que arranque PHP.

IIS

En servidores Windows, añade una cabecera personalizada llamada Strict-Transport-Security en los encabezados de respuesta HTTP del sitio. Después compruébala con el verificador de cabeceras.

Cómo probar y quitar HSTS

Primero, prueba desde fuera con nuestro HTTP Header Checker. Muestra la cabecera exacta y el max-age que reciben los visitantes.

En Chrome también puedes abrir chrome://net-internals/#hsts y consultar tu dominio. Muestra si el navegador guardó la regla y cuándo termina. En la misma página puedes borrar la regla de tu navegador mientras pruebas.

Para quitar HSTS a todos, envía max-age=0 durante un tiempo en lugar de borrar la cabecera. Así cada navegador que visita olvida la regla. Después, ya puedes quitar la línea.

Errores comunes

  • Empezar con un max-age de un año. Si HTTPS falla, los visitantes quedan fuera hasta que pase el año.
  • Añadir includeSubDomains cuando un subdominio aún no tiene certificado.
  • Enviar la cabecera por HTTP. Los navegadores la ignoran ahí; solo cuenta en HTTPS.
  • Olvidar la palabra always, de modo que las páginas de error salen sin la cabecera.
  • Enviar el dominio a la lista de preload como prueba.

En resumen, HSTS es una línea, pero max-age es una promesa. Súbelo despacio y revisa cada paso con el HTTP Header Checker. Para ver cada directiva en detalle, consulta la guía de MDN sobre Strict-Transport-Security.

Preguntas y respuestas

¿Qué hace HSTS?

Le dice al navegador que use solo HTTPS para tu sitio durante un tiempo. Después de la primera visita, el navegador nunca envía una petición HTTP a tu sitio.

¿Sigo necesitando la redirección de HTTP a HTTPS con HSTS?

Sí. La redirección cubre la primera visita, antes de que el navegador vea la cabecera. HSTS cubre todas las visitas siguientes.

¿Qué max-age debo usar en HSTS?

Empieza con 300 segundos mientras pruebas y súbelo por pasos. Para un sitio en producción, 31536000 segundos (un año) es el valor final habitual.

¿Cómo quito HSTS?

Envía la cabecera con max-age=0. Los navegadores borran la regla la próxima vez que visiten por HTTPS. Hasta entonces, mantienen la regla vieja.

¿HSTS es bueno para el SEO?

No de forma directa. Sin embargo, quita un salto de redirección a quienes vuelven y los protege, lo que ayuda a la velocidad y la confianza.

¿Por qué no aparece mi cabecera HSTS?

Comprueba que se envía por HTTPS, que el módulo headers de Apache está activo y que una CDN o caché no la elimina. Nuestro HTTP Header Checker muestra lo que llega de verdad.

¿Qué es el preload de HSTS?

Una lista integrada en los navegadores, para que incluso la primera visita use HTTPS. Necesitas max-age de un año, includeSubDomains y preload, y luego envías el dominio en hstspreload.org.

¿HSTS puede dejar fuera a los visitantes?

Sí, si HTTPS falla mientras hay un max-age largo activo. Por eso se empieza corto y solo se sube cuando todo funciona.

¿HSTS hace más lento mi sitio?

No. Quita la redirección de HTTP a HTTPS a quienes vuelven, así que las páginas abren un poco más rápido.

¿Dónde activo HSTS en Cloudflare?

En SSL/TLS, Edge Certificates, en HTTP Strict Transport Security. Entonces no necesitas añadirla también en htaccess.

¿Puedo añadir HSTS con un plugin de WordPress?

Sí, muchos plugins de seguridad pueden enviarla. Aun así, una regla en htaccess o Nginx es más rápida y también cubre archivos que no son de WordPress.

¿Por qué mi cabecera HSTS sale dos veces?

La añaden a la vez el servidor y la CDN o un plugin. Deja una sola fuente, así el max-age queda claro.

¿Cómo veo si Chrome guardó mi regla HSTS?

Abre chrome://net-internals/#hsts y consulta tu dominio. Ahí también puedes borrar la regla de tu navegador.

¿HSTS funciona en localhost?

Los navegadores ignoran HSTS en localhost y en direcciones IP, por eso se prueba en un dominio real.

¿Qué pasa si caduca el certificado con HSTS activo?

Quienes vieron la regla no pueden saltarse el aviso. Por eso la renovación automática del certificado importa aún más con HSTS.

¿HSTS es lo mismo que una redirección 301?

No. La redirección la envía el servidor en cada petición HTTP. En cambio, HSTS hace que el navegador se salte del todo la petición HTTP.

¿Todos los subdominios deben usar HTTPS antes de includeSubDomains?

Sí. Revisa cada subdominio, incluidos los viejos y las herramientas internas, antes de añadir la opción.

¿Cuánto se tarda en entrar en la lista de preload?

Normalmente de unas semanas a unos meses, porque la lista llega con las nuevas versiones del navegador.

¿HSTS protege contra todos los ataques?

No. Frena el paso a HTTP simple. Aun así necesitas otras cabeceras, como una Content-Security-Policy, para otros riesgos.

¿El SEO Checker revisa HSTS?

Sí. Nuestro SEO Checker muestra si se envía la cabecera y enlaza a esta guía cuando falta.

Guía en vídeo

Cómo añadir HSTS sin riesgo

En este vídeo breve ves la herramienta del primer al último clic. Escoge tu idioma justo debajo y pon los subtítulos si te ayudan.

Comprueba tu cabecera HSTS ahora

Escribe tu URL en el HTTP Header Checker para ver si se envía Strict-Transport-Security y qué max-age usa.