HSTS le dice al navegador que rechace el http simple para tu dominio durante un plazo fijado. Cierra un ataque real —la primera petición, antes de la redirección— y el navegador lo recuerda, que es justamente por lo que hay que introducirlo con cuidado.
La cabecera
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Lo que lo hace peligroso
Introdúcelo por etapas
# week 1 - five minutes
add_header Strict-Transport-Security "max-age=300" always;
# week 2 - a day
add_header Strict-Transport-Security "max-age=86400" always;
# week 3 - a week, then a year once nothing has broken
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
includeSubDomains es la parte que pilla a la gente
Se aplica a todos los subdominios, incluidos los que olvidaste: un entorno de pruebas viejo, una herramienta interna, un servidor heredado sin certificado. Todos quedan inalcanzables por http, de golpe. Confirma que cada subdominio tiene un certificado válido antes de añadirlo.
for h in www shop staging api mail; do
printf '%-8s ' "$h"
curl -sS -o /dev/null -w '%{http_code}\
' "https://$h.example.com/" || echo FAIL
done
La precarga es permanente, en la práctica
La lista de precarga va compilada dentro de los navegadores, así que la regla se aplica antes de cualquier visita. Salir de ella tarda meses en llegar a todo el mundo. No añadas el token preload hasta que el sitio lleve un año con el max-age completo sin incidentes.
Si ya te has quedado fuera
Arregla el certificado: esa es la única respuesta de verdad. Para tu propia máquina, Chrome puede borrar un dominio en chrome://net-internals/#hsts, lo que te permite probar y no hace nada por tus visitantes.
