Kestrel: HTTP/2 har inaktiverats via TLS i inkompatibla Windows-versioner
För att aktivera HTTP/2 via TLS (Transport Layer Security) i Windows måste två krav uppfyllas:
- Stöd för Application Layer Protocol Negotiation (ALPN), som är tillgängligt från och med Windows 8.1 och Windows Server 2012 R2.
- En uppsättning chiffer som är kompatibla med HTTP/2, som är tillgängliga från och med Windows 10 och Windows Server 2016.
Kestrels beteende när HTTP/2 över TLS har konfigurerats har därför ändrats till:
- Nedgradera till
Http1
och logga ett meddelande på nivånInformation
när ListenOptions.HttpProtocols är inställt påHttp1AndHttp2
.Http1AndHttp2
är standardvärdet förListenOptions.HttpProtocols
. - Kasta en
NotSupportedException
närListenOptions.HttpProtocols
är inställd påHttp2
.
Mer information finns i problem med dotnet/aspnetcore#23068.
Version introducerad
ASP.NET Core 5.0
Gammalt beteende
I följande tabell beskrivs hur HTTP/2 över TLS har konfigurerats.
Protokoll | Windows 7, Windows Server 2008 R2, eller tidigare |
Windows 8, Windows Server 2012 |
Windows 8.1 Windows Server 2012 R2 |
Windows 10, Windows Server 2016, eller senare |
---|---|---|---|---|
Http2 |
Kasta NotSupportedException |
Fel vid TLS-handskakning | Fel under TLS-handskakning * | Inget fel |
Http1AndHttp2 |
Nedgradera till Http1 |
Nedgradera till Http1 |
Fel under TLS-handskakning * | Inget fel |
* Konfigurera kompatibla chiffersviter för att aktivera dessa scenarier.
Nytt beteende
I följande tabell beskrivs hur HTTP/2 över TLS har konfigurerats.
Protokoll | Windows 7, Windows Server 2008 R2, eller tidigare |
Windows 8, Windows Server 2012 |
Windows 8.1 Windows Server 2012 R2 |
Windows 10, Windows Server 2016, eller senare |
---|---|---|---|---|
Http2 |
Kasta NotSupportedException |
Kasta NotSupportedException |
Kasta NotSupportedException ** |
Inget fel |
Http1AndHttp2 |
Nedgradera till Http1 |
Nedgradera till Http1 |
Nedgradera till Http1 ** |
Inget fel |
** Konfigurera kompatibla chiffersviter och ställ in appkontextväxeln Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
till true
för att aktivera dessa scenarier.
Orsak till ändringen
Den här ändringen säkerställer att kompatibilitetsfel för HTTP/2 över TLS på äldre Windows-versioner visas så tidigt och så tydligt som möjligt.
Rekommenderad åtgärd
Kontrollera att HTTP/2 via TLS är inaktiverat i inkompatibla Windows-versioner. Windows 8.1 och Windows Server 2012 R2 är inkompatibla eftersom de saknar nödvändiga chiffer som standard. Det går dock att uppdatera datorkonfigurationsinställningarna så att de använder HTTP/2-kompatibla chiffer. Mer information finns i TLS-chiffersviter i Windows 8.1. När det har konfigurerats måste HTTP/2 via TLS på Kestrel aktiveras genom att ange appkontextväxeln Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
. Till exempel:
AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);
Inget underliggande stöd har ändrats. Till exempel har HTTP/2 via TLS aldrig fungerat på Windows 8 eller Windows Server 2012. Den här ändringen ändrar hur fel i dessa scenarier som inte stöds visas.
Berörda API:er
Ingen