Как сделать HTTPS первым запросом через VPN
Режим «только HTTPS», настоящие закладки HTTPS и HSTS — это три разных исправления. Пройдитесь по ним по порядку, чтобы первый запрос был зашифрован, а не перенаправлен.
Браузер, который сначала вводит http:// и переходит на https:// после того, как перенаправление уже отправило один открытый запрос, и VPN этого не меняет. Туннель защищает участок от клиента до выходного узла; он не шифрует ничего выше транспортного уровня, поэтому наблюдатель между выходом и источником по-прежнему видит переход с открытым текстом. Сделать HTTPS первым запросом — это изменение на стороне клиента, состоящее из трех частей: реальный адрес HTTPS, режим обновления браузера и собственная политика сайта. Приведенные ниже шаги представляют собой порядок, который я использую, каждый из которых сопровождается проверкой, которая показывает, выполнен ли он.
Шаг 1. Подтвердите, каким на самом деле является первый запрос
Прежде чем что-либо менять, посмотрите, что отправляет браузер. Откройте сетевую панель с перезагрузкой страницы из холодного кеша и прочитайте первую строку: если схема http и статус 301 или 308, то все, что после этой строки — второй запрос. curl -sS -o /dev/null -w '%{http_code} %{url_effective}\n' http://example.com воспроизводит ту же последовательность за пределами браузера и печатает URL-адрес, на который вы попали.
Возможны два результата, и они требуют разных решений. Если сайт обслуживает HTTPS на том же хосте, исправление состоит в том, чтобы прекратить публикацию формы HTTP: обновите закладку, ссылку на вики, ярлык на рабочем столе и шаблон электронного письма, на который люди нажимают. Если сайт вообще не поддерживает HTTPS, никакие настройки браузера не создадут его, и честный ответ заключается в том, что проблема заключается в пункте назначения. Не сглаживайте второй случай исключением, поскольку исключение сертификата на странице учетной записи преобразует проблему транспорта в проблему с учетными данными. Прежде чем нажимать на настройку, запишите, в каком случае вы находитесь.
Шаг 2. Включите в браузере режим «только HTTPS»
Режим обновления — это вторая часть, и эти режимы не взаимозаменяемы. Прежде чем включить, проверьте, что делает ваша версия: обновляется автоматически, обновляется с предупреждением или отказывается загружаться.
В Firefox элементы управления находятся за about:config и на странице настроек конфиденциальности, где dom.security.https_only_mode является переключателем, а исключения для каждого сайта управляются из меню замка. В Chrome и Edge та же идея находится в разделе «Настройки», «Конфиденциальность и безопасность», «Безопасность» с надписью «Всегда использовать безопасные соединения». Какой бы ни была метка, проверьте поведение хоста, который отвечает только на порт 80, поскольку режим, который обновляется, а затем молча откатывается, не является той защитой, которую, как вы думаете, вы включили. Документация Firefox только для HTTPS подробно описывает поведение обновления, предупреждений и исключений для этого браузера.
Шаг 3. Исправьте ресурсы, а не только адресную строку
При сбое обновления прочитайте точную ошибку вместо адресной строки. Хост без прослушивателя HTTPS, имя хоста, не соответствующее сертификату, и цепочка с истекшим сроком действия создают разные сообщения и принадлежат разным владельцам. Только первый — это пробел на стороне сервера; вторая обычно представляет собой закладку, которая никогда не обновлялась; третий — проблема с продлением, к которой VPN-соединение не имеет отношения.
Не добавляйте исключение сертификата на сайт учетной записи, поскольку VPN включен. Исключение отключает проверку, которая бы выявила именно тот перехват, который VPN должен предотвратить.
Третья часть находится внутри страницы, и именно ее люди упускают. Страница, загружающаяся по HTTPS, по-прежнему может извлекать изображения, шрифты или скрипты из URL-адреса http, и браузер либо заблокирует их, либо понизит индикатор безопасности для всей страницы. Проверьте неудачные запросы на панели сети и исправьте ссылки на ресурсы у их владельца, а не предполагайте, что адресная строка описывает каждый запрос. На сайте, который вы запускаете, это означает исправление URL-адресов, сохраненных в CMS или шаблоне, вместо того, чтобы переписывать их в браузере. Если вы не можете изменить источник, запишите смешанный контент как известный пробел, поскольку замок на странице, которая извлекает ресурсы в виде открытого текста, является ложным сигналом.
Шаг 4: что добавляет HSTS, а что нет
HSTS — это политика сайта, а не предпочтения браузера, и это единственный механизм, который сохраняется при вводе http:// в новом профиле. Как только браузер видит заголовок Strict-Transport-Security для хоста, он перезаписывает последующие запросы на https перед их отправкой, а это именно то свойство, которое вам нужно. Он ничего не делает для хоста, который браузер никогда не посещал, и ничего для другого имени хоста, который обслуживает то же приложение.
Проверьте, что отправитель отправляет с помощью curl -sSI https://example.com | grep -i strict-transport-security. Отсутствующий заголовок — это изменение сервера, а не то, что клиент может установить. Если он присутствует, прочитайте max-age и установите ли includeSubDomains, поскольку короткий максимальный возраст истекает между посещениями, а отсутствие includeSubDomains оставляет каждый поддомен незащищенным. RFC 6797 определяет, как пользовательский агент применяет политику и что он может игнорировать. Предварительная загрузка – это отдельное обязательство, поэтому проверьте статус с помощью API hstspreload.org, прежде чем обещать кому-либо, что домен есть в списке.
Проверка и откат
Откат — это дешево для настроек клиента и дорого для HSTS. Отключение режима «только HTTPS» немедленно восстанавливает предыдущее поведение; длинный максимальный возраст не действует, и посетители, которые уже получили его, продолжают обновлять его до истечения срока его действия.
Поэтому проверьте порядок действий, прежде чем считать, что все готово. Перезагрузите из холодного кэша и убедитесь, что первый запрос на панели сети — https без предварительного перенаправления. Затем проверьте поддомен, потому что именно в includeSubDomains эти политики обычно оказываются уже, чем предполагалось. Затем проверьте одну страницу, на которой используются сторонние ресурсы, поскольку смешанный контент — это ошибка, которая сохраняется после любого другого исправления.
Если после всего этого первый запрос по-прежнему HTTP, клиент больше не является переменной: это ссылка, по которой люди переходят. Найдите в контролируемых вами местах http-форму имени хоста, обновите их и повторите тестирование с той же перезагрузкой холодного кэша. Всегда оставляйте вопрос о VPN отдельно, потому что туннель меняет тех, кто может видеть запрос, и никогда не меняет, зашифрован ли запрос. Строка, которую нужно добавить в заявку, заключается в том, что первый запрос имеет значение, а перенаправление — это только квитанция об уже отправленном запросе.