Включение поддержки протокола HTTP/3 на IIS 10 в Windows Server 2022

2022-08-23 Гуреев Евгений

В Windows Server 2022 появилась встроенная поддержка протокола HTTP/3, который позволяет существенно увеличить скорость загрузки веб страниц сайтов IIS и безопасность. Основная особенности HTTP/3, он построен на базе транспортного протокола QUIC (Quick UDP Internet Connections), который работает поверх UDP. Наибольший профит от использования HTTP/3 получат пользователи с медленный и нестабильный интернет подключением. Рассмотрим, как включить поддержку HTTP/3 для веб сайта на Internet Information Service (IIS 10.0.20348+) в Windows Server 2022.

В официальной документации пока нет информации о том как включить поддержку HTTP/3 в IIS, из чего можно сделать вывод, что поддержка протокола ещё находится в разработке, о чем свидетельствуют сообщения на форумах о проблемах с утечкой памяти и зависаниях сервера.

Чтобы включить поддержку HTTP/3 на IIS нужно настроить несколько параметров в Windows Server:

  1. Включить поддержку протокола TLS 1.3 в Windows Server (является обязательным для использования QUIC и HTTP/3);
  2. Добавить комплект шифров TLS_CHACHA20_POLY1305_SHA256 (cipher suite) для TLS подключений;
  3. Добавить код ответа HTTP/3 в HTTP заголовок ответа веб сайта IIS.

Чтобы включить поддержку протокола TLS 1.3 в Windows Server, нужно изменить несколько параметров реестра (в этом примере мы включаем поддержку клиентской и серверной части TLS 1.3).

  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f
  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" /v Enabled /t REG_DWORD /d 1 /f
  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v Enabled /t REG_DWORD /d 1 /f

После этого нужно включить поддержку HTTP/3 для IIS:

  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters" /v EnableHttp3 /t REG_DWORD /d 1 /f
  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters" /v EnableAltSvc /t REG_DWORD /d 1 /f

Затем нужно разрешить использовать специальный TLS шифр с помощью команды PowerShell:

  Enable-TlsCipherSuite -Name TLS_CHACHA20_POLY1305_SHA256 -Position 0

Проверить, что поддержка данного комплекта шифров включена:

  (Get-TlsCipherSuite).Name | Select-String CHACHA

Теперь нужно добавить HTTP/3 в заголовок ответа сайта. Создать простой сайт на IIS (для теста можно использовать default web site), привязать к сайту SSL сертификат (можно использовать самоподписанный сертификат, но нужно чтобы клиент доверял этому сертификату) и привязать сайт к порту 443 (в меню Edit Bindings).

Следует обратить внимание, что в меню привязки сайта в IIS появилось несколько дополнительных опций (Disable QUIC, Disable TLS 1.3 over TCP, Disable Legacy TLS).

Затем открыть раздел HTTP Response Headers в настройках сайта IIS и добавить следующую опцию в список ответов HTTP:

  Name: alt-svc
  Value: h3=":443"; ma=86400; persist=1

Эту опцию HTTP Header можно добавить с помощью PowerShell:

  Import-Module WebAdministration
  $siteName ="Default Web Site"
  $headerName="alt-svc"
  $headerValue='h3=":443"; ma=86400; persist=1'
  Add-WebConfigurationProperty -Filter "system.webServer/httpProtocol/customHeaders" -PSPath IIS:\Sites\$siteName -Name . -AtElement @{name=$headerName}-Value @{name=$headerName;value=$headerValue}

Проверить, что трафик QUIC (порт 443/UDP) разрешен в Microsoft Defender Firewall:

  Get-NetFirewallRule | ?{ $_.DisplayName -eq "World Wide Web Services (QUIC Traffic-In)" }|select name,enabled, status

Если правило неактивно, включить правило файервола с помощью PowerShell:

  Get-NetFirewallRule IIS-WebServerRole-QUIC-In-UDP|enable-netfirewallrule

Перезагрузите Windows Server. После перезагрузки проверьте, что сайт IIS отвечает по HTTP/3.

Большинство современных браузеров по-умолчанию поддерживают протоколов HTTP/3.

  1. Открыть веб страницу сайта IIS в браузере (например в Яндекс.Базуере или Edge), перейти в режим разработчика (Inspect), затем выберать вкладку Network;
  2. Добавить колонку Protocol и обновите страницу (F5);
  3. Проверить, что в колонке протокола указано H3 - это означает что для подключения к сайту использовался HTTP/3.