Каков наилучший способ включить HTTP Strict Transport Security на веб-сервере IIS 7?
Могу ли я просто через графический интерфейс и добавить правильный заголовок ответа HTTP или я должен использовать appcmd, и если да, то что переключается?
Каков наилучший способ включить HTTP Strict Transport Security на веб-сервере IIS 7?
Могу ли я просто через графический интерфейс и добавить правильный заголовок ответа HTTP или я должен использовать appcmd, и если да, то что переключается?
Ответы:
IIS имеет возможность добавлять пользовательские заголовки к ответам . Казалось бы, это самый простой способ сделать это.
Согласно документации на IIS.net вы можете добавить эти заголовки через IIS Manager:
источник
Это позволяет нам обрабатывать как перенаправление HTTP, так и добавлять заголовок Strict-Transport-Security к ответам HTTPS с одним сайтом IIS (необходимо установить модуль перезаписи URL):
источник
<action type="Rewrite" value="max-age=31536000 ;includeSubDomains; preload" />
чтобы получить пропуск на hstspreload.orghttps://somedomain.com/https://somedomain.com/relatedpath
и в результате путь отбрасывается.Чтобы дополнить ответ voretaq7 , вы также можете сделать это с помощью файла Web.config (примечание: будет использоваться только для сайтов SSL, поскольку он добавит заголовок для ответов HTTP и HTTPS, что противоречит спецификации RFC 6797, пожалуйста, смотрите объяснение ниже) - добавьте блок следующим образом:
Очевидно, у вас уже может быть
system.webServer
блок в вашем Web.config, так что добавьте это к этому, если так. Мы предпочитаем обрабатывать вещи в Web.config, а не в графическом интерфейсе, потому что это означает, что изменения конфигурации могут быть зафиксированы в нашем Git-репозитории.Если вы хотите обработать перенаправление HTTP-SSL, как упомянул Грег Аскью , вам может быть проще сделать это с отдельным веб-сайтом в IIS. Вот как мы обрабатываем требование SSL для некоторых клиентских сайтов. Этот сайт содержит только перенаправление HTTP и некоторые исправления раскрытия информации , все в Web.config:
Это наше предпочтительное решение по нескольким причинам - мы можем легко регистрировать перенаправленный трафик отдельно (так как он находится в другом журнале IIS), он не включает больше кода в Global.asax.cs (у нас нет никакого кода там, что немного более удобно для сайта Umbraco), и, что важно, это означает, что весь конфиг все еще хранится в нашем репозитории GIT.
Отредактировано для добавления: Для ясности, чтобы соответствовать RFC 6797 ,
Strict-Transport-Security
пользовательский заголовок НЕ ДОЛЖЕН добавляться к запросам, сделанным по незашифрованному HTTP. Чтобы быть RFC6797-совместимым, вы ДОЛЖНЫ иметь два сайта в IIS, как я описал после первого блока кода. Как указывает Крис , RFC 6797 включает в себя:поэтому отправка
Strict-Transport-Security
заголовка клиента в ответ на запрос без SSL не будет соответствовать спецификации.источник
Я бы использовал пример из ссылки на Википедию, на которую вы ссылались, и выполнил действие в global.asax для сайта. Это позволяет перенаправить запрос на URL-адрес https, а затем вставить заголовок в ответ.
Это связано с тем, что заголовок HSTS должен игнорироваться, если его нет в ответе https.
источник
Кажется, это довольно надежный способ сделать это. Добавьте этот код в Global.asax - событие Application_BeginRequest запускается первым в жизненном цикле запроса Asp.net: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest(v=vs. 110) .aspx
Согласно спецификации, http-запросы не должны отвечать заголовком, поэтому этот код добавляет его только для https-запросов. Максимальное время указывается в секундах, и, как правило, рекомендуется указывать здесь большое значение (IE - 31536000 указывает, что сайт будет использовать SSL только в течение следующих 365 дней).
источник
Используя пример, предоставленный Дугом Уилсоном, я создал следующие две функции PowerShell для добавления правил перезаписи URL для перенаправления в HTTPS и для добавления заголовков HSTS.
Они были протестированы в Windows 2012 и Windows 2012 R2.
Все, что вам нужно сделать, это указать название сайта. Вы можете по желанию дать правилам другое имя, если вам не нравятся значения по умолчанию.
Следует отметить, что в результате моего тестирования переменные сервера необходимо было добавить в список разрешений, прежде чем они будут включены в заголовки ответа. Функции делают это для вас.
РЕДАКТИРОВАТЬ: См. Ссылку на URL переписать для заголовков HTTP здесь: http://www.iis.net/learn/extensions/url-rewrite-module/setting-http-request-headers-and-iis-server-variables
источник
По словам создателей модуля IIS HTTP Strict Transport Security, простое добавление пользовательского заголовка не соответствует проекту спецификации (RFC 6797).
На самом деле вам нужно установить этот модуль IIS, чтобы включить HSTS на IIS 7.
Обновление 26 октября 2014 года : благодаря приведенному ниже комментарию я снова прочитал страницу модуля, в частности ту часть, которая оправдывает использование модуля вместо добавления пользовательских заголовков.
Хост HSTS НЕ ДОЛЖЕН включать поле заголовка STS в ответы HTTP, передаваемые по незащищенному транспорту.
Если вы уверены, что добавляете заголовки только в HTTPS, а НЕ в HTTP, вам не нужен этот модуль, и вы можете использовать ответ Дуга Уилсона. Не используйте ответ Оуэна Блэкера, потому что у него нет условия https.
источник
Это можно сделать, добавив следующий блок в Web.Config:
Мы должны настроить IIS, который может настраивать заголовки для ответа:
источник
Просто чтобы добавить, я вижу в комментариях 2 человека, говорящих о 500 ошибках, когда вы делаете это. У меня было это.
Если в IIS появляется ошибка 500, это может быть связано с тем, что вы добавили правило как на верхнем уровне, для наследуемого, так и на уровне сайта.
например
IIS / Браузер, кажется, не дает вам никакой информации, что вы сделали это, независимо от ваших настроек обработки ошибок
источник