HSTS

Тема дорожной карты · Nginx

HTTP Strict Transport Security (HSTS) — механизм политики веб-безопасности, предписывающий браузерам общаться с веб-сервером исключительно по HTTPS, предотвращая атаки с понижением протокола и перехват куков за счёт исключения любых попыток соединения по обычному HTTP. В Nginx HSTS реализуется добавлением заголовка ответа Strict-Transport-Security в SSL/TLS-включённый блок server: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;. Значение max-age задаёт, как долго (в секундах) браузер должен применять HSTS — один год (31536000) является стандартом для продакшен-развёртываний, — тогда как includeSubDomains распространяет политику на все поддомены, а preload включает домен в поддерживаемые браузерами списки предзагрузки HSTS. HSTS следует включать только после того, как вся иерархия домена полностью переведена на HTTPS, поскольку неправильно настроенный заголовок HSTS на обратном прокси Nginx может сделать поддомены недоступными при истечении или некорректной настройке их SSL/TLS-сертификатов. Сочетание HSTS с SSL/TLS-сертификатами под управлением Certbot в Nginx является рекомендуемым базовым уровнем защиты любого публично доступного веб-сервера от атак на транспортный уровень.

Как это работает

HSTS обязателен в 2026. Конфигурация: listen 443 ssl http2;, ssl_certificate /path/fullchain.pem;, ssl_certificate_key /path/privkey.pem;. Современный протокол + cipher: ssl_protocols TLSv1.2 TLSv1.3;, ssl_ciphers ECDHE-... (Mozilla "intermediate" profile — разумный дефолт: https://ssl-config.mozilla.org/). Включайте OCSP stapling, session caching (ssl_session_cache shared:SSL:10m), session tickets осторожно. Авто-renew сертов через certbot (Let's Encrypt) или step-ca.

Когда применять

Let's Encrypt + certbot — для бесплатных авто-ренью сертов в большинстве случаев. Mozilla SSL Configuration Generator — для списка cipher. Тест на SSL Labs (ssllabs.com/ssltest) — цель A+. HTTP → HTTPS редирект на server-уровне. HSTS — только после уверенности, что HTTPS работает везде (неверный HSTS-preload навсегда). TLS 1.3 — самый современный.

Типичные ошибки

Ловушки HSTS: включён SSLv3 / TLS 1.0/1.1 (уязвимы — отключите); слабые cipher (DES, RC4); HSTS слишком рано (запирает HTTPS-only до получения сертов всеми поддоменами); серты истекают, потому что ручное renew забыли (всегда автоматизируйте); session tickets с дефолтным ephemeral-ключом, меняющимся на каждый reload (слишком агрессивно для больших сайтов).

Связанные понятия

Полезные ресурсы