Протокол HSTS (HTTP Strict Transport Security) позволяет администратору сайта указать на необходимость обращения только по HTTPS и автоматизировать проброс на HTTPS при изначальном обращении по ссылке на HTTP. Управление производится при помощи HTTP-заголовка Strict-Transport-Security, который выдаётся при обращении по HTTPS (при выдаче по HTTP заголовок игнорируется) и указывает браузеру на необходимость оставаться в зоне HTTPS даже при переходе по ссылкам "http://". Замена http:// на https:// будет автоматически выполняться при обращении к защищаемому ресурсу с внешних сайтов, а не только для внутренних ссылок.Использование в Apache:
При помощи mod_headers устанавливаем для HTTPS-блока виртуального хоста заголовок Strict-Transport-Security (max-age - срок действия (1 год), includeSubdomains - распространять замену http:// на https:// для всех поддоменов; preload - занести в поддерживаемый браузером статический список).
Дополнительно устанавливаем заголовок "X-Frame-Options: DENY" для запрета встраивания контента сайта в блоки iframe.LoadModule headers_module modules/mod_headers.so
<VirtualHost 192.168.1.1:443>
Header always set Strict-Transport-Security "max-age= 31536000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
</VirtualHost>Для HTTP-блока хоста настраиваем редирект:
<VirtualHost *:80>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI...
</IfModule>
</VirtualHost>Настройка в nginx:
Добавляем в блок server:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options "DENY";Настройка в Lighttpd:
server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload", "X-Frame-Options" => "DENY")
}
URL: https://raymii.org/s/tutorials/HTTP_Strict_Transport_Securit...
Обсуждается: http://www.opennet.dev/tips/info/2918.shtml
не лишним будет обратить внимание на includeSubdomains и то что эти субдомены(если есть) должны быть готовы перейти, точней перейдут автоматом, даже если заголовок не отдается на субдоменах.
А на виртуальном хосте:80 не проще редирект повесить на 443 порт, надо извращаться?
>А на виртуальном хосте:80 не проще редирект повесить на 443 порт, надо извращаться?Редирект тоже вешают, это разные меры.
После включения HSTS браузер уже никогда не будет делать httP запросы к указанному домену, только httpS. Таким образом нельзя будет встать посередине, перехватить (заблокировать) редирект 80 -> 443 и дальше контролировать весь открытый трафик.
Для этого надо, чтобы браузер хотя бы раз зашел на настоящий httpS домена и получил HSTS-заголовок.
> это разные меры.То есть контент можно получить по http? но пытаемся средствами сервера запретить клиенту это делать?
> перехватить (заблокировать) редирект 80 -> 443
С тем же успехом можно перехватить любой заголовок, то есть если допустить, что пользователь туп как пробка и всегда входит по ссыке domain.com, не проверяя хттпэСность, то спасти его от слива инфы никак нельзя.
>> это разные меры.
> То есть контент можно получить по http? но пытаемся средствами сервера запретить
> клиенту это делать?Отдать /модифицированный/ контент по httP мог MtM-прокси. При этом он мог получить его вполне себе по httpS.
>> перехватить (заблокировать) редирект 80 -> 443
> С тем же успехом можно перехватить любой заголовок, то есть если допустить,
> что пользователь туп как пробка и всегда входит по ссыке domain.com,
> не проверяя хттпэСность, то спасти его от слива инфы никак нельзя.Нельзя спасти его от слива инфы только при первом входе пользователя на сайт.
После получения заголовка HSTS и сохранения его в хранилище браузер больше не будет обращаться к серверу по httP, соответственно вмешаться в трафик будет нельзя.
Костылизм впечатлил
Ага, особенно с учетом того, что на проксе это выбивается в одно действие. Достаточно просто заголовки подменить.
> RewriteCond %{HTTPS} off
> RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI...а чем не устроило ?
Redirect 301 / https://www.example.com/
Может пора уже на 80 порту выдавать HTTPS
>При помощи mod_headers устанавливаем для HTTPS-блока виртуального хоста
>заголовок Strict-Transport-Security (max-age - срок действия (1 год),А в конфигах
>Header always set Strict-Transport-Security "max-age= 31536000; includeSubdomains; preload"
>add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
>setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload"У apache, в отличие от nginx и Lighttpd, какой-то свой год?
Это вот отсюда - https://raymii.org/s/tutorials/HTTP_Strict_Transport_Securit...Дело хорошее, но только после этого - https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache...
Не работает. Проверил на двух сборках nginx.
у меня не хотело работать без [R=301,L]<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI... [R=301,L]
</IfModule>
max-age=63072000 - не слишком ли много на два года?
Что за бездумный копипаст
Сделайте на месяц 2592000 секунд
Я использовал отличную статью по покупке и настройке https на nginx
https://onlinebd.ru/blog/instrukciya-po-nastroike-https-dlya...
Полная инструкция по настройке HTTPS с оценкой А+