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 auf Information-Ebene, wenn ListenOptions.HttpProtocols auf Http1AndHttp2 festgelegt ist. Der Standardwert für ListenOptions.HttpProtocols lautet Http1AndHttp2.
  • Ausgabe von NotSupportedException, wenn ListenOptions.HttpProtocols auf Http2 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.

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