Что такое HSTS, зачем он нужен и как включить его на своём сайте
HSTS — как максимально защитить свой сайт
Сибирикс
HSTS — как максимально защитить свой сайт
Что такое HSTS, зачем он нужен и как включить его на своём сайте
Вы радостно выкатили свежий сайт в сеть, а Гуглу он не нравится: вместо загрузки всех ваших красивых анимированных прелоадов, крутых параллаксов и прочих wow-эффектов, он говорит пользователям, что соединение небезопасно и вот это вот всё. Первое впечатление, как известно, имеет значение, поэтому самое время позаботиться о включении HSTS — чтобы пользователи видели красоту, а не подозрительные предостережения.
Что такое HSTS
HSTS расшифровывается как HTTP Strict Transport Security — это механизм, после включения которого пользователи видят только защищенные страницы вашего сайта.

Что он умеет:
  • автоматически преобразовывает небезопасные HTTP-ссылки в безопасные HTTPS-ссылки;
  • не позволяет пользователю проигнорировать сообщение о проблемах с сертификатом;
  • позволяет добавить сайт в список предварительной загрузки HSTS, чтобы защитить его даже при первой загрузке браузером.

Включается HSTS с помощью специального заголовка ответа «Strict-Transport-Security».
Когда HSTS настроен правильно, то есть без ошибок в конфигурации, он блокирует для просмотра все незащищенные версии страниц вашего сайта.

При любой попытке посетителей перейти на небезопасную версию страницы сайта (http://), они будут автоматически перенаправлены на ее защищенную версию (https://).

Это как 301 редирект, только на уровне браузера, а не на уровне веб-страницы. Такое перенаправление круче — оно всегда использует только https://, даже при первой загрузке браузером, в отличие от 301 редиректа.


Как максимально защитить свой сайт с помощью HSTS

Для этого надо сделать два шага:

  1. Включить HSTS на сайте.
  2. Добавить сайт в список предварительной загрузки HSTS.
Чтобы включить HSTS на сайте
  1. Выберите вариант настроек для заголовка Strict-Transport-Security.
  2. Добавьте настройки для заголовка Strict-Transport-Security в конфигурацию веб-сервера.
Как выбрать вариант настроек для заголовка Strict-Transport-Security
Заголовок Strict-Transport-Security может содержать разный набор переменных. От того, какие переменные содержит заголовок, зависит степень защиты сайта. Возможны три варианта.


Базовая настройка (наименее безопасная)
Приведенный выше пример — самая простая версия заголовка.

  • Не влияет на поддомены.
  • Сайт не может быть включен в список предварительной загрузки.
Список предварительной загрузки HSTS — список сайтов, которые утверждает Google, чтобы Chrome и другие браузеры еще до загрузки этих сайтов понимали, что все их страницы нужно открывать только через https.
Такая настройка наименее безопасна, потому что не защищает поддомены и не позволяет сайту попасть в список предварительной загрузки HSTS. То есть, пользователи, которые впервые загружают ваш сайт в браузере, могут использовать для этого незащищенную ссылку http://.


Более безопасная настройка
Приведенный выше пример — более надежная версия заголовка:

  • Относительно безопасная настройка.
  • Включает HSTS на поддоменах.
  • Сайт не может быть включен в список предварительной загрузки.

Такая настройка включает HSTS не только для домена, но и для всех его поддоменов, но этого все еще недостаточно, чтобы сайт попал в список предварительной загрузки HSTS.


Наиболее безопасная и рекомендуемая настройка

Приведенный выше пример является наиболее безопасной версией заголовка. Рекомендуем именно такую настройку, поскольку:

  • это самая безопасная настройка,
  • она включает HSTS на поддоменах,
  • сайт может быть включен в список предварительной загрузки.


Переменные


  • Strict-Transport-Security: — имя заголовка.
  • max-age= — количество времени в секундах, в течение которого все http:// перенаправляются на https://.
  • includeSubDomains — включает HSTS на всех поддоменах.
  • preload — дает разрешение на внесение сайта в список предварительной загрузки.

Как только вы определили настройки для заголовка, можно добавлять их в конфигурацию веб-сервера.
Как добавить настройки для заголовка Strict-Transport-Security в конфигурацию веб-сервера
Настройки для заголовка Strict-Transport-Security добавляются в конфигурацию веб-сервера так же, как любые другие заголовки. Вот самые распространенные сценарии.


Файл .htaccess

Если вы используете файл .htaccess для своих конфигураций, HSTS можно добавить с помощью следующего кода:
Важно! Приведенный выше код является наиболее безопасным и содержит все параметры, которые необходимы, чтобы включить сайт в список предварительной загрузки HSTS. Эта рекомендуемая настройка будет использоваться во всех дальнейших примерах.


Apache

Добавляются в виртуалхост, который слушает ssl-подключения (<VirtualHost xx.xx.xxx.xx: 443>)
NGINX

Добавляются в блок настроек сервера, который слушает ssl-подключения (server {listen 443 …})
IIS

HSTS уже реализован по спецификации в виде опенсорсного модуля для IIS.


Litespeed

HSTS можно реализовать с помощью конфигураций. htaccess или Apache, описанных выше, или его родной конфигурации Litespeed.

Настройки для заголовка добавлены в конфигурацию веб-сервера. Теперь нужно внести сайт в список предварительной загрузки HSTS. Пока сайт не в списке предварительной загрузки, он все еще не полностью защищен от атак типа MITM.
Как попасть в список предварительной загрузки HSTS
1. Убедитесь, что сайт соответствует требованиям

Если у вас есть действующий и корректно настроенный на вашем веб-сервере сертификат и вы выполнили все действия, описанные в этой статье, то, скорее всего, ваш сайт соответствует требованиям. Заявленные требования:

  • Действующий сертификат.
  • Только HTTPS-трафик (весь HTTP-трафик должен быть перенаправлен на HTTPS).
  • HSTS включен на базовом домене.
  • HSTS включен на всех поддоменах, в том числе, на www, если для него существует запись DNS.
  • Срок действия — не менее восемнадцати недель (10 886 400 секунд).
  • Указан токен includeSubdomains.
  • Указан токен предварительной загрузки.
  • У любой страницы, на которую ваш сайт перенаправляет пользователя, должен быть заголовок HSTS.
2. Введите свой домен в в список предварительной загрузки HSTS

Перейдите в список предварительной загрузки и введите домен сайта. Дальше есть два сценария: либо вам сообщат, что сайт не соответствует требованиям для попадания в список, либо — что все ок. Статус домена можно отслеживать.


3. Ждите

Это долгий процесс. Может уйти несколько недель, пока сайт утвердят в список, и несколько месяцев, пока список окажется в свежих версиях Chrome и Firefox.
И напоследок — планируйте заранее
Если вы планируете запустить сайт или сменить домен в ближайшие несколько месяцев, стоит уже сейчас внести новый домен в список предварительной загрузки.
Интересная фигня. Будем пробовать :)
Владимир
Руководитель студии