Поделиться через


Kestrel: HTTP/2 отключен по протоколу TLS в несовместимых версиях Windows

Чтобы включить HTTP/2 через защищённый транспортный уровень (TLS) в Windows, необходимо выполнить два условия:

  • поддержка Application-Layer переговоров по протоколу (ALPN), которая доступна начиная с Windows 8.1 и Windows Server 2012 R2.
  • Набор шифров, совместимых с HTTP/2, который доступен начиная с Windows 10 и Windows Server 2016.

Таким образом, поведение Kestrel при настройке HTTP/2 по протоколу TLS изменилось на:

  • Понизьте до Http1 и зафиксируйте на уровне Information сообщение, когда ListenOptions.HttpProtocols установлено в Http1AndHttp2. Http1AndHttp2 — значение по умолчанию для ListenOptions.HttpProtocols.
  • Создает исключение NotSupportedException , если ListenOptions.HttpProtocols задано значение Http2.

Обсуждение можно найти в разделе dotnet/aspnetcore#23068.

Представленная версия

ASP.NET Core 5.0

Старое поведение

В следующей таблице описано поведение при настройке ПРОТОКОЛА HTTP/2 по протоколу TLS.

Протоколы Windows 7,
Windows Server 2008 R2,
или раньше
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
или новее
Http2 Бросать NotSupportedException Ошибка во время подтверждения TLS Ошибка во время рукопожатия TLS * Нет ошибки
Http1AndHttp2 Понижение до Http1 Понижение до Http1 Ошибка во время рукопожатия TLS * Нет ошибки

* Настройте совместимые наборы шифров для включения этих сценариев.

Новое поведение

В следующей таблице описано поведение при настройке ПРОТОКОЛА HTTP/2 по протоколу TLS.

Протоколы Windows 7,
Windows Server 2008 R2,
или раньше
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
или новее
Http2 Бросать NotSupportedException Бросать NotSupportedException Брось NotSupportedException ** Нет ошибки
Http1AndHttp2 Понижение до Http1 Понижение до Http1 Понижение до Http1 ** Нет ошибки

Настройте совместимые наборы шифров и установите переключатель контекста приложения Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2, чтобы включить эти сценарии true.

Причина изменения

Это изменение гарантирует, что ошибки совместимости для HTTP/2 по протоколу TLS в более ранних версиях Windows отображаются как можно раньше и четко.

Убедитесь, что протокол HTTP/2 по протоколу TLS отключен в несовместимых версиях Windows. Windows 8.1 и Windows Server 2012 R2 несовместимы, так как по умолчанию отсутствуют необходимые шифры. Однако можно обновить параметры конфигурации компьютера для использования совместимых шифров HTTP/2. Дополнительные сведения см. в наборах алгоритмов шифрования TLS в Windows 8.1. После настройки HTTP/2 по протоколу TLS в Kestrel необходимо включить, задав переключатель Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 контекста приложения. Рассмотрим пример.

AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);

Базовая поддержка не изменилась. Например, протокол HTTP/2 по протоколу TLS никогда не работал в Windows 8 или Windows Server 2012. Это изменение изменяет способ отображения ошибок в этих неподдерживаемых сценариях.

Затронутые API

Отсутствует