Kestrel: protokół HTTP/2 wyłączony za pośrednictwem protokołu TLS w niezgodnych wersjach systemu Windows
Aby włączyć protokół HTTP/2 za pośrednictwem protokołu Transport Layer Security (TLS) w systemie Windows, należy spełnić dwa wymagania:
- Obsługa negocjacji protokołu warstwy aplikacji (ALPN), która jest dostępna od systemów Windows 8.1 i Windows Server 2012 R2.
- Zestaw szyfrów zgodnych z protokołem HTTP/2, który jest dostępny od systemu Windows 10 i Windows Server 2016.
W związku z tym zachowanie Kestrel po skonfigurowaniu protokołu HTTP/2 za pośrednictwem protokołu TLS zostało zmienione na:
- Obniż poziom do
Http1
i zarejestruj komunikat naInformation
poziomie, gdy parametr ListenOptions.HttpProtocols jest ustawiony naHttp1AndHttp2
wartość .Http1AndHttp2
jest wartością domyślną dla .ListenOptions.HttpProtocols
- Wyrzuć wartość
NotSupportedException
, gdyListenOptions.HttpProtocols
jest ustawiona naHttp2
.
Aby zapoznać się z dyskusją, zobacz problem dotnet/aspnetcore#23068.
Wprowadzona wersja
ASP.NET Core 5.0
Stare zachowanie
W poniższej tabeli opisano zachowanie podczas konfigurowania protokołu HTTP/2 za pośrednictwem protokołu TLS.
Protokoły | Windows 7, Windows Server 2008 R2, lub starsze |
Windows 8, Windows Server 2012 |
Windows 8.1 Windows Server 2012 R2 |
Windows 10, Windows Server 2016, lub nowsze |
---|---|---|---|---|
Http2 |
Rzucać NotSupportedException |
Błąd podczas uzgadniania protokołu TLS | Błąd podczas uzgadniania protokołu TLS * | Brak błędów |
Http1AndHttp2 |
Obniżanie do Http1 |
Obniżanie do Http1 |
Błąd podczas uzgadniania protokołu TLS * | Brak błędów |
* Skonfiguruj zgodne zestawy szyfrowania, aby włączyć te scenariusze.
Nowe zachowanie
W poniższej tabeli opisano zachowanie podczas konfigurowania protokołu HTTP/2 za pośrednictwem protokołu TLS.
Protokoły | Windows 7, Windows Server 2008 R2, lub starsze |
Windows 8, Windows Server 2012 |
Windows 8.1 Windows Server 2012 R2 |
Windows 10, Windows Server 2016, lub nowsze |
---|---|---|---|---|
Http2 |
Rzucać NotSupportedException |
Rzucać NotSupportedException |
Rzucać NotSupportedException ** |
Brak błędów |
Http1AndHttp2 |
Obniżanie do Http1 |
Obniżanie do Http1 |
Obniżanie do Http1 ** |
Brak błędów |
** Skonfiguruj zgodne zestawy szyfrowania i ustaw przełącznik Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
kontekstu aplikacji, aby true
włączyć te scenariusze.
Przyczyna wprowadzenia zmiany
Ta zmiana zapewnia, że błędy zgodności protokołu HTTP/2 za pośrednictwem protokołu TLS w starszych wersjach systemu Windows są widoczne tak szybko, jak to możliwe.
Zalecana akcja
Upewnij się, że protokół HTTP/2 za pośrednictwem protokołu TLS jest wyłączony w niezgodnych wersjach systemu Windows. Systemy Windows 8.1 i Windows Server 2012 R2 są niezgodne, ponieważ domyślnie nie mają niezbędnych szyfrów. Można jednak zaktualizować ustawienia konfiguracji komputera w celu używania szyfrowania HTTP/2. Aby uzyskać więcej informacji, zobacz Zestawy szyfrowania TLS w systemie Windows 8.1. Po skonfigurowaniu protokół HTTP/2 za pośrednictwem protokołu TLS w usłudze Kestrel musi być włączony przez ustawienie przełącznika Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
kontekstu aplikacji. Na przykład:
AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);
Żadna podstawowa obsługa nie uległa zmianie. Na przykład protokół HTTP/2 za pośrednictwem protokołu TLS nigdy nie działał w systemie Windows 8 lub Windows Server 2012. Ta zmiana modyfikuje sposób prezentowania błędów w tych nieobsługiwanych scenariuszach.
Dotyczy interfejsów API
Brak