Правильная настройка HSTS через файл .htaccess

Разбираем нюансы и «подводные камни»

Сначала надо настроить главное зеркало сайта, установить SSL-сертификата и включить переадресацию с http на https. Если это все сделано, то идём активировать HSTS.

Прописываем правило в .htaccess

Открываем файл .htaccess и в самом верху прописываем строку:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

Менять это правило нет необходимости, но для полной ясности почитайте что означают эти параметры.

  • max-age=[значение] — задает время в секундах, которое указывает на период, в течение которого сайт будет доступен только по протоколу HTTPS (в нашем случае на 1 год);
  • includeSubDomains — указывает на то, что все поддомены также используют SSL сертификат и безопасное HTTPS соединение.
  • preload директива показывает, что сайт поддерживает предварительную загрузку HSTS и добавлен в листинг Preload List.

Добавляем сайт в Preload List

Картинка

Теперь нужно добавить наш сайт в листинг Preload List. Это список сайтов, которые жестко указывают всем основным браузерам (Chrome, Firefox, Opera, Safari, IE 11 и Edge), чтобы их использовали только как безопасную HTTPS версию.

Открываем сайт https://hstspreload.org/ и вводим там домен и жмём кнопку «Check HSTS preload status and eligibility». Если у нас всё правильно сделано, то появится возможность добавить сайт в HSTS Preload List.
Сперва получим уведомление, что наш запрос обрабатывается, а если проверить через какое-то время, то будет сообщение «Status: DOMEN is currently preloaded.»

Готово! В результате все страницы сайта будут запрашиваться браузером через HTTPS.

Возможные проблемы

Картинка

Инструкция простая, но часто возникают сложности.

Двойной заголовок

Как вы знаете из статьи про htaccess, это файл помогающий сделать настройки сервера самостоятельно. Всё что мы там делаем, можно настроить и прямо на сервере. Вот и с заголовком HSTS может получиться так, что он уже настроен на сервере.

Вот пример настройки на сервере Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

Если он там настроен правильно, то всё супер, а если нет, то мы не сможем добавить наш сайт в Preload List. Нужно попросить техподдержку хостинга, отключить тот неправильный заголовок, а потом настроить правильно через .htaccess.

В сертификате не указан WWW поддомен

Поддомен WWW используется автоматически по умолчанию. Даже если у вашего сайта вообще не используются поддомены, то по факту всё равно есть один )))
Поэтому SSL сертификат тоже должен автоматически выпускаться и для домена, и для его www поддомена. Иногда про это забывают. Тогда миссия по настройке HSTS тоже будет провалена.

Основное зеркало сайта с WWW поддоменом

Встречаются ситуации, когда владелец сайта в качестве основного зеркала сайта выбирает вариант с www. Для склейки зеркал настраивается переадресация с nash-site.com на www.nash-site.com — да, так можно делать и если изначально вы так сделали, то переделывать уже не рекомендую. Однако для HSTS правил основным является сам домен, а не версия сайта с указанием поддомена. Так как сам домен выдаёт 301 редирект, то добавить его в Preload List не получится, но сам заголовок всё равно надо настроить.

Напишите в комментариях, у вас получилось настроить HTTP заголовок Strict-Transport-Security и добавить домен в Preload List?