Архив метки: HSTS

Отключение HSTS

Есть замечательная технология — HSTS Вкратце — это механизм, который реализует принудительное использование защищенного HTTP. Чаще всего это делается установкой соответствующего заголовка Strict-Transport-Security в ответе веб-сервера. Многие CMS, в том числе и WordPress устанавливают этот заголовок самостоятельно. Такое поведение вроде бы продиктовано лучшими намерениями, но на практике — сильно мешает например в том случае, если у вас только некоторые части сайта должны работать по HTTPS (например раздел авторизации), а все остальное — по HTTP однако браузер, поддерживающий HSTS согласно заголовку, упрямо продолжает перенаправлять вас на HTTPS версию сайта, хотя вам это совершенно не надо. Как это поменять? Простого способа сказать например Firefox игнорировать HSTS нету, в Chrome это решается изменением в конфиге about:net-internals опции config.force_ssl = true так же никак не решается. Единственный универсальный обходной путь, который мне удалось найти — принудительно устанавливать параметр заголовка max-age в 0.

Как выглядит в конфиге nginx

server {
#...
add_header  Strict-Transport-Security "max-age=0;";
#...
}

Или в конфиге apache или .htaccess (должен быть включен модуль mod_headers)

<ifModule mod_headers>
    Header set Strict-Transport-Security max-age=0
</ifModule>

Можно так же устанавливать этот заголовок с помощью того же php, но это уже детали. Конечно имеет смысл вместо создания таких костылей правильно настроить шифрование для всего сервера, но иногда это просто не нужно.

Обновление.

По результатам заданных вопросов, по этой статье есть дополнение. У Goole Chrome есть неприятная особенность — он добавляет посещенные сайты в специальный HSTS-кэш из которого потом берет информацию, игнорируя передаваемый заголовок. Сайты из этого кэша убрать можно, кроме тех, что идут в поставке с Chrome. Как это сделать: перейти по URI: chrome://net-internals/#hsts Далее на скриншоте ниже показано где можно домен удалить.

HSTS кэш