The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Перенаправление на HTTPS при помощи HSTS в Apache, NGINX и Lighttpd
Протокол 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")
   }
 
23.10.2015 , Источник: https://raymii.org/s/tutorials/HTTP...
Ключи: https, http, hsts, apache, nginx, lighttpd, redirect / Лицензия: CC-BY
Раздел:    Корень / Безопасность / Шифрование, PGP

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, hander (?), 10:21, 24/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    не лишним будет обратить внимание на includeSubdomains и то что эти субдомены(если есть) должны быть готовы перейти, точней перейдут автоматом, даже если заголовок не отдается на субдоменах.
     
  • 1.2, cmp (ok), 19:31, 24/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А на виртуальном хосте:80 не проще редирект повесить на 443 порт, надо извращаться?
     
     
  • 2.6, PavelR (??), 08:26, 25/10/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >А на виртуальном хосте:80 не проще редирект повесить на 443 порт, надо извращаться?

    Редирект тоже вешают, это разные меры.

    После включения HSTS браузер уже никогда не будет делать httP запросы к указанному домену, только httpS. Таким образом нельзя будет встать посередине, перехватить (заблокировать) редирект 80 -> 443 и дальше контролировать весь открытый трафик.

    Для этого надо, чтобы браузер хотя бы раз зашел на настоящий httpS домена и получил HSTS-заголовок.

     
     
  • 3.7, cmp (ok), 09:36, 25/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > это разные меры.

    То есть контент можно получить по http? но пытаемся средствами сервера запретить клиенту это делать?

    > перехватить (заблокировать) редирект 80 -> 443

    С тем же успехом можно перехватить любой заголовок, то есть если допустить, что пользователь туп как пробка и всегда входит по ссыке domain.com, не проверяя хттпэСность, то спасти его от слива инфы никак нельзя.

     
     
  • 4.8, PavelR (??), 17:06, 28/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> это разные меры.
    > То есть контент можно получить по http? но пытаемся средствами сервера запретить
    > клиенту это делать?

    Отдать /модифицированный/ контент по httP мог MtM-прокси. При этом он мог получить его вполне себе по httpS.

    >> перехватить (заблокировать) редирект 80 -> 443
    > С тем же успехом можно перехватить любой заголовок, то есть если допустить,
    > что пользователь туп как пробка и всегда входит по ссыке domain.com,
    > не проверяя хттпэСность, то спасти его от слива инфы никак нельзя.

    Нельзя спасти его от слива инфы только при первом входе пользователя на сайт.
    После получения заголовка HSTS и сохранения его в хранилище браузер больше не будет обращаться к серверу по httP, соответственно вмешаться в трафик будет нельзя.

     
     
  • 5.9, cmp (ok), 12:54, 29/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Костылизм впечатлил
     
     
  • 6.13, Аноним (-), 17:27, 13/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, особенно с учетом того, что на проксе это выбивается в одно действие. Достаточно просто заголовки подменить.
     

  • 1.3, ALex_hha (ok), 19:37, 24/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > RewriteCond %{HTTPS} off
    > RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    а чем не устроило ?

    Redirect 301 / https://www.example.com/

     
  • 1.4, pavlinux (ok), 03:05, 25/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Может пора уже на 80 порту выдавать HTTPS
     
  • 1.5, PavelR (??), 08:23, 25/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >При помощи 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, какой-то свой год?

     
  • 1.10, keir (ok), 14:20, 06/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это вот отсюда - https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX

    Дело хорошее, но только после этого - https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html

     
  • 1.11, Аноним (11), 14:20, 19/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не работает. Проверил на двух сборках nginx.
     
  • 1.12, hander (?), 22:41, 08/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    у меня не хотело работать без [R=301,L]

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </IfModule>

     
  • 1.14, Иван (??), 23:16, 02/04/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    max-age=63072000 - не слишком ли много на два года?
    Что за бездумный копипаст
    Сделайте на месяц 2592000 секунд
     
  • 1.16, Александр Лыженков (?), 17:58, 23/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я использовал отличную статью по покупке и настройке https на nginx
    https://onlinebd.ru/blog/instrukciya-po-nastroike-https-dlya-php-fpm-s-ocenkoi
    Полная инструкция по настройке HTTPS с оценкой А+
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру