Все статьи о SSL SSL и сертификаты

HSTS: HTTP Strict Transport Security -- подробное объяснение

HSTS (HTTP Strict Transport Security) — это заголовок безопасности, который указывает браузерам всегда подключаться по HTTPS — даже если пользователь набирает http:// или переходит по HTTP-ссылке. Как только браузер получает заголовок HSTS, он автоматически обновляет все последующие запросы к этому домену на HTTPS, предотвращая атаки на понижение протокола и незащищённые соединения.

Почему HSTS важен

Без HSTS первый запрос к вашему сайту может быть по HTTP (до срабатывания 301-перенаправления). В этом коротком окне злоумышленник в сети может:

  • Снять HTTPS — перехватить перенаправление и удержать пользователя на HTTP (атака SSL stripping)
  • Украсть куки — если куки отправляются при начальном HTTP-запросе
  • Внедрить контент — модифицировать ответ перенаправления

HSTS устраняет это окно. После первого HTTPS-визита браузер больше никогда не пробует HTTP.

Как включить HSTS

Nginx

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

Добавьте это внутри блока server для HTTPS (порт 443), не в блок HTTP-перенаправления.

Apache

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

Требуется mod_headers (sudo a2enmod headers).

Cloudflare

Dashboard → SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → Enable.

Параметры HSTS

ПараметрПримерЗначение
max-age63072000 (2 года)Как долго (в секундах) браузер помнит о необходимости использовать HTTPS
includeSubDomainsРаспространяет HSTS на все поддомены
preloadСигнализирует о намерении войти в список HSTS preload

Выбор max-age

Фазаmax-ageЦель
Тестирование300 (5 минут)Убедиться, что HTTPS работает, перед полным переключением
Уверенность604800 (1 неделя)Низкий риск при необходимости отката
Продакшен31536000 (1 год)Стандартная рекомендация
Долгосрочно63072000 (2 года)Требуется для списка preload

Начинайте с малого, увеличивайте постепенно. Если HTTPS перестанет работать, пока закэшировано большое значение max-age, посетители вообще не смогут попасть на ваш сайт — браузер откажется подключаться по HTTP.

HSTS preload

Список HSTS preload — это список доменов, жёстко закодированный в браузерах, для которых всегда используется HTTPS, даже при самом первом визите (до получения какого-либо заголовка HSTS).

Требования для preload

  1. Предоставлять действующий HTTPS-сертификат
  2. Перенаправлять HTTP на HTTPS на том же хосте
  3. Заголовок HSTS с max-age >= 63072000 (2 года)
  4. Включить директиву includeSubDomains
  5. Включить директиву preload
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

Подача заявки на preload

Перейдите на hstspreload.org, введите ваш домен и отправьте заявку. После проверки (недели-месяцы) ваш домен добавляется во встроенные списки браузеров.

Предупреждения о preload

  • Отменить сложно. Удаление из списка preload занимает месяцы и требует выхода нового релиза браузера. В это время ваш домен доступен только по HTTPS.
  • includeSubDomains обязателен — каждый поддомен должен поддерживать HTTPS. Если staging.example.com не имеет сертификата, он станет недоступен.
  • Добавляйте в preload только если уверены, что все текущие и будущие поддомены будут поддерживать HTTPS.

Распространённые ошибки

Установка HSTS в HTTP-ответе

HSTS должен отправляться только через HTTPS. Если ваше HTTP-перенаправление тоже отправляет заголовок HSTS, браузеры его игнорируют (спецификация требует HTTPS). Устанавливайте заголовок только в блоке порта 443.

Забыли о поддоменах

includeSubDomains применяет HSTS ко всем поддоменам. Если internal.example.com не имеет HTTPS, он станет недоступен. Проведите аудит всех поддоменов перед включением.

Слишком большой max-age с самого начала

Если HTTPS сломается (просроченный сертификат, ошибка конфигурации), посетители не смогут откатиться на HTTP. Их браузер откажется подключаться. Начните с 5 минут, убедитесь, что всё работает, затем увеличьте до 1 года.

Как проверить, активен ли HSTS

curl -sI https://yourdomain.com | grep -i strict-transport
# Expected: strict-transport-security: max-age=63072000; includeSubDomains

В Chrome DevTools: вкладка Network → нажмите на запрос → Headers → ищите Strict-Transport-Security.

Часто задаваемые вопросы

HSTS заменяет перенаправления HTTP→HTTPS?

Нет. HSTS и перенаправления служат разным целям. Перенаправление перехватывает первый HTTP-запрос. HSTS указывает браузеру больше никогда не делать HTTP-запросы (после первого HTTPS-визита). Вам нужно и то, и другое.

Может ли HSTS вызвать проблемы?

Да, если HTTPS сломается. При большом max-age браузеры откажутся подключаться по HTTP в качестве запасного варианта. Вот почему следует начинать с маленького max-age и увеличивать только когда HTTPS стабильно работает.

Нужен ли мне HSTS, если я на Cloudflare?

Cloudflare обрабатывает соединение посетитель→Cloudflare, но HSTS на вашем origin-сервере защищает всю цепочку. Включите HSTS через панель Cloudflare для пограничного сервера и на вашем origin, если используете режим Full (Strict).

В чём разница между HSTS и директивой CSP upgrade-insecure-requests?

upgrade-insecure-requests указывает браузеру загружать подресурсы (изображения, скрипты) по HTTPS вместо HTTP — исправляя смешанный контент. HSTS указывает браузеру всегда использовать HTTPS для всего домена. Они решают разные проблемы и могут использоваться вместе.

Похожие статьи

Развёртывание 2026-05-07
Как перенаправить HTTP на HTTPS
Принудительное перенаправление всего трафика на HTTPS с помощью серверных редиректов. Примеры конфигурации для Nginx, Apache и .htaccess с постоянными перенаправлениями 301.
SSL и сертификаты 2026-05-08
Что такое HTTPS? Полное руководство
HTTPS шифрует соединение между вашим браузером и сайтом. Узнайте, как работает HTTPS, TLS-рукопожатие, различия HTTP и HTTPS, влияние на производительность и как включить его бесплатно.
Развёртывание 2026-05-08
Как установить SSL-сертификат на Nginx
Пошаговое руководство по установке SSL-сертификата на Nginx. Охватывает загрузку файлов, полную конфигурацию серверного блока, лучшие практики TLS, HTTP/2, HSTS, настройку редиректов, тестирование и устранение 6 распространённых ошибок.
Развёртывание 2026-05-08
Как установить SSL-сертификат на Apache
Пошаговое руководство по установке SSL-сертификата на Apache с mod_ssl. Загрузка файлов, настройка VirtualHost, лучшие практики TLS, HSTS, редирект HTTP и устранение 5 распространённых ошибок.
Получите бесплатный SSL-сертификат в браузере
Без установки, без аккаунта. Ваш приватный ключ никогда не покидает устройство.
Получить сертификат