HSTS

HSTS (HTTP Strict Transport Security, RFC 6797) — HTTP-заголовок, приказывающий браузеру ходить на сайт только по HTTPS. Защита от sslstrip и downgrade-атак.

Заголовок

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

Как работает

  1. Первый визит: HTTP → 301 на HTTPS → HTTPS-ответ с HSTS-заголовком.
  2. Браузер запоминает: домен + max-age.
  3. Любой последующий http:// URL автоматически переписывается на https:// до сетевого запроса.

Проблема первого визита (TOFU)

На самом первом заходе браузер ещё не знает про HSTS. Если атакующий MITM перехватит первый запрос — sslstrip возможен.

HSTS Preload

Список hardcoded в Chrome, Firefox, Safari, Edge. Если ты в списке — браузер знает про HSTS с рождения, без первого визита.

Требования:

Подать: hstspreload.org. Убрать — сложно, до полугода.

Пример nginx

server {
  listen 443 ssl http2;
  add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}

Опасность includeSubDomains

Внутренний dev.example.com без TLS сломается. Проверь все поддомены до включения.

HPKP (мёртвый)

HPKP (HTTP Public Key Pinning) 2015–2018
Chrome отключил в 2018. Слишком опасно: неправильный pin → сайт unreachable месяцами. Заменён на CT logs и DANE.

См. также