Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В IIS 10.0 версии 1709 администратор может включить перенаправление HSTS и HTTP на HTTPS на уровне сайта.
Совместимость
| Версия | Примечания |
|---|---|
| IIS 10.0 версии 1709 | Функции, описанные в этой статье, были представлены в IIS 10.0 версии 1709 |
| IIS 10.0 и более ранних версий | Функции, описанные в этой статье, не поддерживаются до IIS 10.0 версии 1709 |
Строгое обеспечение безопасности транспорта HTTP (HSTS)
Http Strict Transport Security (HSTS), указанный в RFC 6797, позволяет веб-сайту объявлять себя безопасным узлом и сообщать браузерам, что его следует связать только через подключения HTTPS. HSTS — это опциональное улучшение безопасности, которое принудительно использует HTTPS и значительно снижает способность атак типа "посередническая" перехватывать запросы и ответы между серверами и клиентами.
HSTS применяет использование HTTPS через политику, требующую поддержки как веб-серверов, так и браузеров. Веб-хостинг с поддержкой HSTS может включать специальный заголовок HTTP-ответа "Strict-Transport-Security" (STS) вместе с директивой "max-age" в ответе на запрос по протоколу HTTPS, чтобы указать браузеру использовать HTTPS для дальнейшего взаимодействия. Браузер получает заголовок и запоминает политику HSTS в течение нескольких секунд, указанных директивой max-age. В течение этого периода, если пользователь пытается посетить тот же веб-сайт, но вводит http:// или опускает схему вообще, браузер автоматически преобразует небезопасную ссылку в безопасную (https://) и установит HTTPS-соединение с сервером. После получения ответа через HTTPS браузер также запрещает пользователю "щелкнуть" любое предупреждение системы безопасности (например, предупреждение о недопустимом сертификате сервера). Чтобы воспользоваться преимуществами HSTS, браузер должен видеть заголовок HSTS по крайней мере один раз. Чтобы защитить пользователя при первом подключении к данному домену, HSTS имеет отдельный механизм для предзагрузки списка зарегистрированных доменов в браузер по умолчанию.
Проблемы с включением HSTS до IIS 10.0 версии 1709
До IIS 10.0 версии 1709 включение HSTS на сервере IIS требует сложной настройки.
Два решения для включения HSTS до IIS 10.0 версии 1709 предоставляются для примера сценария: веб-администратор хочет включить HSTS для домена contoso.com, который принимает подключения HTTP и HTTPS, а также перенаправлять весь HTTP-трафик на HTTPS. Перенаправление в этом сценарии небезопасно по своей природе, но это по-прежнему шаблон, за которым следует множество веб-сайтов, поддерживающих HTTPS. Основная причина, по которой все еще необходимо поддерживать HTTP-соединение, заключается в том, что веб-сайт не имеет контроля над тем, как посетители могут попытаться подключиться - через протокол HTTPS или просто по HTTP. Включение HSTS значительно уменьшает количество небезопасных перенаправлений с HTTP на HTTPS, если при первом успешном подключении по HTTPS браузер получает заголовок HSTS (непосредственно или через перенаправление).
Решение 1: Модуль перенаправления HTTP + настраиваемые заголовки
Перенаправление всего HTTP-трафика в HTTPS можно добиться с помощью модуля перенаправления HTTP с двумя отдельными веб-сайтами, одними для HTTPS и другими для HTTPS, чтобы избежать бесконечного цикла перенаправления.
<sites>
<site name="Contoso-http" id="1" serverAutoStart="true">
<application path="/" applicationPool="Contoso-http">
<virtualDirectory path="/" physicalPath="C:\inetpub\Contoso-http" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:contoso.com" />
</bindings>
</site>
<site name="Contoso-https" id="2" serverAutoStart="true">
<application path="/" applicationPool="Contoso-https">
<virtualDirectory path="/" physicalPath="C:\inetpub\Contoso-https" />
</application>
<bindings>
<binding protocol="https" bindingInformation="*:443:contoso.com" sslFlags="0" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
<traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
</siteDefaults>
<applicationDefaults applicationPool="DefaultAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Правило перенаправления настраивается в web.config HTTP-сайта для маршрутизации всего трафика на сайт HTTPS, а затем фактически служит содержимому.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpRedirect enabled="true" destination="https://contoso.com" httpResponseStatus="Permanent" />
</system.webServer>
</configuration>
Заголовок STS можно добавить через Пользовательские заголовки, настроив web.config сайта HTTPS.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Решение 2. Модуль переопределения URL-адресов
Альтернативное решение — установка модуля переопределения URL-адресов и настройка правил перезаписи для одного веб-сайта с привязками HTTP и HTTPS. Перенаправление HTTP на HTTPS можно задать правилом входящего трафика, а добавление заголовка STS к ответам HTTPS можно осуществить с помощью правила исходящего трафика.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect HTTP to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add the STS header in HTTPS responses">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" />
</conditions>
<action type="Rewrite" value="max-age=31536000" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
IIS 10.0 версии 1709 с нативной поддержкой HSTS
В выпуске IIS 10.0 версии 1709 HSTS теперь поддерживается изначально. Конфигурация включения HSTS значительно упрощена — HSTS можно включить на уровне сайта, настроив атрибуты <hsts> элемента под каждым <site> элементом. Дополнительные сведения можно найти в справочнике по конфигурации Параметры HSTS для веб-сайта <HSTS>.
Примерный сценарий можно легко реализовать, настроив enabled, max-age, и redirectHttpToHttps атрибуты элемента <hsts> веб-сайта с помощью командлетов PowerShell IISAdministration, следуя руководству.
Import-Module IISAdministration
Reset-IISServerManager -Confirm:$false
Start-IISCommitDelay
$sitesCollection = Get-IISConfigSection -SectionPath "system.applicationHost/sites" | Get-IISConfigCollection
$siteElement = Get-IISConfigCollectionElement -ConfigCollection $sitesCollection -ConfigAttribute @{"name"="Contoso"}
$hstsElement = Get-IISConfigElement -ConfigElement $siteElement -ChildElementName "hsts"
Set-IISConfigAttributeValue -ConfigElement $hstsElement -AttributeName "enabled" -AttributeValue $true
Set-IISConfigAttributeValue -ConfigElement $hstsElement -AttributeName "max-age" -AttributeValue 31536000
Set-IISConfigAttributeValue -ConfigElement $hstsElement -AttributeName "redirectHttpToHttps" -AttributeValue $true
Stop-IISCommitDelay
Remove-Module IISAdministration
Ниже показаны конфигурации HSTS для веб-сайта:
<site name="Contoso" id="1">
<application path="/" applicationPool="Contoso">
<virtualDirectory path="/" physicalPath="C:\Contoso\Content" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:contoso.com" />
<binding protocol="https" bindingInformation="*:443:contoso.com" sslFlags="0" />
</bindings>
<hsts enabled="true" max-age="31536000" redirectHttpToHttps="true" />
</site>
Встроенная поддержка HSTS также может использоваться вместе с модулем перенаправления HTTP для более сложных сценариев.
Например, веб-сайт contoso.com перенаправляет весь трафик на его поддомен www.contoso.com, и оба веб-сайта принимают подключения HTTP и HTTPS. Это типичный сценарий, если веб-сайт предпочтительнее иметь один канонический адрес. HSTS рекомендуется включить как для корневого домена, так и для поддомена, так как пользователи могут напрямую посетить один через HTTP или HTTPS. Включение includeSubDomains атрибута <hsts> элемента корневого домена дополнительно повышает охват политики HSTS для всех его поддоменов.
<sites>
<site name="Contoso" id="1">
<application path="/" applicationPool="Contoso">
<virtualDirectory path="/" physicalPath="C:\inetpub\Contoso" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:contoso.com" />
<binding protocol="https" bindingInformation="*:443:contoso.com" sslFlags="0" />
</bindings>
<hsts enabled="true" max-age="31536000" includeSubDomains="true" redirectHttpToHttps="true" />
</site>
<site name="Contoso-www" id="2">
<application path="/" applicationPool="Contoso-www">
<virtualDirectory path="/" physicalPath="C:\inetpub\Contoso-www" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:www.contoso.com" />
<binding protocol="https" bindingInformation="*:443:www.contoso.com" sslFlags="0" />
</bindings>
<hsts enabled="true" max-age="31536000" redirectHttpToHttps="true" />
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
<traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
</siteDefaults>
<applicationDefaults applicationPool="DefaultAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Кроме того, перенаправление из корневого домена в поддомен можно настроить с помощью <httpRedirect> элемента в web.config корневого сайта домена. При такой конфигурации HTTP-запрос на contoso.com сначала будет перенаправлен на HTTPS, а затем HTTPS-запрос на тот же сайт будет перенаправлен на www.contoso.com, причем в ответ будет добавлен заголовок STS.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpRedirect enabled="true" destination="https://www.contoso.com" httpResponseStatus="Permanent" />
</system.webServer>
</configuration>
Приведенные выше примеры конфигураций также применяются к сценарию перенаправления трафика с исходного сайта на целевой сайт, который не является поддоменом исходного сайта, с незначительным изменением конфигурации отключения includeSubDomains исходного сайта.