Поиск по сайту:

Что такое HSTS и как его настроить?


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

Наличие SSL-шифрования в первую очередь является обязательным условием для HSTS, потому что в противном случае включение HSTS просто сделает ваш сайт недоступным. Вы можете прочитать наше руководство по настройке бесплатных SSL-сертификатов с помощью LetsEncrypt, чтобы включить HTTPS на вашем веб-сайте.

Как работает HSTS?

HSTS расшифровывается как HTTP Strict Transport Security и определяет, как браузер пользователя должен подключаться к вашему веб-сайту.

Вот как обычно работает подключение к вашему сайту. Пользователь хочет подключиться к вашему сайту и отправляет на ваш сервер запрос на подключение. Ваш сервер делает ответственное дело и отправляет браузеру ответ 301 Moved Permanently, сообщая ему, что запрошенный им HTTP-адрес необходимо перенаправить на HTTPS. Пользователь продолжает работу в обычном режиме, безопасно просматривая страницы.

Однако злоумышленник, контролирующий соединение (как в случае с атаками «человек посередине»), может легко заблокировать ответ 301 и получить контроль над сеансом просмотра этого пользователя. Это серьезная проблема, поскольку она в первую очередь противоречит цели шифрования сайта.

При включенном HSTS сервер отправляет тот же ответ 301 Moved Permanently, но также отправляет заголовок, говорящий: «Эй, я не поддерживаю HTTP. Даже не пытайтесь делать больше HTTP-запросов, потому что я собираюсь перенаправить их все». Браузер получает сообщение и перед отправкой чего-либо перенаправляет себя на HTTPS. Это гарантирует, что ваш сайт по умолчанию полностью использует HTTPS.

Предварительная загрузка HSTS

Однако у стандартного HSTS есть один существенный недостаток: самое первое соединение, которое устанавливает пользователь, по-прежнему небезопасно. Если пользователь использовал ваш сайт раньше, браузер будет учитывать запрос HSTS в будущем. Но первоначальный ответ HSTS небезопасен, поэтому, если пользователь просматривает кофейню и впервые открывает ваш сайт (или впервые на мобильном устройстве), его соединение все равно может быть перехвачено.

Предварительная загрузка HSTS — это инициатива проекта Chromium, направленная на решение этой проблемы. Проект Chromium постоянно поддерживает список веб-сайтов, на которых включена поддержка HSTS. Этот список встроен в большинство основных браузеров, и браузер сверяется с ним, прежде чем отправлять запросы на новые сайты.

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

Включение HSTS и присоединение к списку предварительной загрузки

HSTS можно включить с помощью простого заголовка, который добавляется ко всем ответам, отправляемым вашим сервером:

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

Вы можете включить это в файл конфигурации вашего веб-сервера. Например, в Nginx вы можете установить заголовок, включив строку add_header в свой серверный блок:

add_header Strict-Transport-Security 'max-age=300; includeSubDomains; preload; always;'

А для Apache команда аналогична, используя строку Header always set :

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

Однако есть еще несколько шагов, чтобы убедиться, что все работает правильно и иметь право на предварительную загрузку.

Во-первых, убедитесь, что вы перенаправляете все HTTP-запросы на HTTPS. В Nginx вы можете сделать это, прослушивая все запросы порта 80 (HTTP) и отправляя запрос 301 с измененным URL-адресом на эквивалент HTTPS:

server {
  listen 80;
  return 301 https://$host$request_uri;
}

Чтобы получить право на предварительную загрузку, вы также должны убедиться, что все ваши поддомены защищены сертификатом SSL и что вы обслуживаете их по протоколу HTTPS. Вы можете сделать это с помощью подстановочного сертификата, который вы можете получить бесплатно от LetsEncrypt. Если вы не выполняете предварительную загрузку, это не обязательно, но все же желательно.

Вы можете проверить, правильно ли работает HSTS, загрузив свой сайт с включенным заголовком, затем перейдя на chrome://net-internals/#hsts и введя имя своего сайта в поле «Запрос домена HSTS/PKP». инструмент поиска. Если ваш сайт отображает такой вывод, HSTS включен.

Кроме того, вам следует проверить, включен ли заголовок strict-transport-security в заголовки ответов вашего сайта. Это можно сделать на вкладке «Сеть» в консоли разработки Chrome:

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

Проблемы с HSTS и предварительной загрузкой HSTS

С HSTS ваш сайт теперь вынужден использовать HTTPS для всего. Это включает в себя каждый поддомен, даже внутренние инструменты. Каждый имеющийся у вас субдомен должен иметь действующий сертификат SSL и защищен с помощью HTTPS, иначе он будет недоступен в течение всего срока действия заголовка HSTS (который может длиться до двух лет). Если у вас есть подстановочный сертификат, вы можете решить некоторые из этих проблем, но вам необходимо провести тестирование, прежде чем включать его на длительный период времени.

Основная проблема с предварительной загрузкой HSTS заключается в том, что она очень постоянна. Минимальный max-age – один год, и после того, как ваш сайт будет добавлен в список, вы не сможете покинуть список, не пройдя длительный процесс удаления, требующий, чтобы каждый пользователь выполнил обновление браузера, чтобы применить его. перемены.

Вы можете просмотреть этот мета-список ошибок запросов на удаление, чтобы увидеть основные проблемы на практике. У Uber были проблемы с поддоменами. Субдомены третьего и более высокого уровня могут не поддерживаться в обычных сертификатах с подстановочными знаками. Один веб-сайт из Швеции даже сообщает о значительно более низком доходе от рекламы, поскольку местные рекламодатели не загружают свои ресурсы через HTTPS, а HSTS блокирует каждый незащищенный HTTP-запрос, сделанный, когда пользователь подключен к вашему сайту.

Лучший способ избежать этих проблем — развертывать HSTS поэтапно, прежде чем постоянно переключаться на предварительную загрузку. Проект Chromium рекомендует проводить тестирование с интервалами, сначала установив значение max-age на пять минут, чтобы проверить, работает ли оно:

max-age=300; includeSubDomains

Затем на неделю для более длительного теста:

max-age=604800; includeSubDomains

Затем в течение месяца, пока вы не будете уверены, что проблем нет.:

max-age=2592000; includeSubDomains

Если что-то пойдет не так и вы установите очень длинное свойство max-age , вы можете снять локальный флаг на странице Chrome net-internals .

Если вы уверены, что ничего не случится, если вы все время используете только HTTPS, вы можете установить max-age на два года, добавить директиву preload и отправить ваш сайт для предварительной загрузки.