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


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

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

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

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

  • Переход на использование более ранней версии Http1 и регистрация сообщения в журнале на уровне Information, если ListenOptions.HttpProtocols имеет значение Http1AndHttp2. Значение ListenOptions.HttpProtocols по умолчанию — Http1AndHttp2.
  • Выводится 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

Нет