Kestrel: Deaktivierung von HTTP/2 bei inkompatiblen Windows-Versionen über TLS
Es müssen zwei Anforderungen erfüllt sein, um HTTP/2 über TLS (Transport Layer Security) unter Windows zu aktivieren:
- ALPN-Unterstützung (Application-Layer Protocol Negotiation), die ab Windows 8.1 und Windows Server 2012 R2 verfügbar ist
- Eine Reihe von Verschlüsselungen, die mit HTTP/2 kompatibel und ab Windows 10 und Windows Server 2016 verfügbar sind
Daher hat sich das Verhalten von Kestrel bei der Konfiguration von HTTP/2 über TLS wie folgt geändert:
- Downgrade auf
Http1
und Protokollieren einer Meldung aufInformation
-Ebene, wenn ListenOptions.HttpProtocols aufHttp1AndHttp2
festgelegt ist. Der Standardwert fürListenOptions.HttpProtocols
lautetHttp1AndHttp2
. - Ausgabe von
NotSupportedException
, wennListenOptions.HttpProtocols
aufHttp2
festgelegt ist
Weitere Informationen finden Sie unter Issue dotnet/aspnetcore#23068.
Eingeführt in Version
ASP.NET Core 5.0
Altes Verhalten
In der folgenden Tabelle wird das Verhalten beschrieben, wenn HTTP/2 über TLS konfiguriert ist.
Protokolle | Windows 7, Windows Server 2008 R2 oder früher |
Windows 8, Windows Server 2012 |
Windows 8.1, Windows Server 2012 R2 |
Windows 10, Windows Server 2016 oder höher |
---|---|---|---|---|
Http2 |
Ausgabe von NotSupportedException |
Fehler beim TLS-Handshake | Fehler beim TLS-Handshake * | Kein Fehler |
Http1AndHttp2 |
Downgrade auf Http1 |
Downgrade auf Http1 |
Fehler beim TLS-Handshake * | Kein Fehler |
* Konfigurieren Sie kompatible Verschlüsselungssammlungen, um diese Szenarien zu ermöglichen.
Neues Verhalten
In der folgenden Tabelle wird das Verhalten beschrieben, wenn HTTP/2 über TLS konfiguriert ist.
Protokolle | Windows 7, Windows Server 2008 R2 oder früher |
Windows 8, Windows Server 2012 |
Windows 8.1, Windows Server 2012 R2 |
Windows 10, Windows Server 2016 oder höher |
---|---|---|---|---|
Http2 |
Ausgabe von NotSupportedException |
Ausgabe von NotSupportedException |
Ausgabe von NotSupportedException ** |
Kein Fehler |
Http1AndHttp2 |
Downgrade auf Http1 |
Downgrade auf Http1 |
Downgrade auf Http1 ** |
Kein Fehler |
** Konfigurieren Sie kompatible Verschlüsselungssammlungen, und legen Sie den App-Kontextwechsel Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
auf true
fest, um diese Szenarien zu ermöglichen.
Grund für die Änderung
Durch diese Änderung wird sichergestellt, dass Kompatibilitätsfehler bei HTTP/2 über TLS und älteren Windows-Versionen so früh und klar wie möglich angezeigt werden.
Empfohlene Aktion
Stellen Sie sicher, dass HTTP/2 über TLS bei inkompatiblen Windows-Versionen deaktiviert ist. Windows 8.1 und Windows Server 2012 R2 sind inkompatibel, da sie standardmäßig nicht über die erforderlichen Verschlüsselungen verfügen. Allerdings ist es möglich, die Computerkonfigurationseinstellungen so zu aktualisieren, dass mit HTTP/2 kompatible Verschlüsselungen verwendet werden. Weitere Informationen finden Sie unter TLS-Verschlüsselungssammlungen in Windows 8.1. Nach der Konfiguration muss HTTP/2 über TLS in Kestrel aktiviert werden, indem der App-Kontextwechsel Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
festgelegt wird. Zum Beispiel:
AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);
Die vorhandene Unterstützung wurde nicht geändert. HTTP/2 über TLS hat beispielsweise nie unter Windows 8 oder Windows Server 2012 funktioniert. Durch diese Änderung wird die Anzeige von Fehlern in den nicht unterstützten Szenarios angepasst.
Betroffene APIs
Keine