Dela via


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ån Information när ListenOptions.HttpProtocols är inställt på Http1AndHttp2. Http1AndHttp2 är standardvärdet för ListenOptions.HttpProtocols.
  • Kasta en NotSupportedException när ListenOptions.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.

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