Freigeben über


Kestrel: Deaktivierung von HTTP/2 bei inkompatiblen Windows-Versionen über TLS

Um HTTP/2 über TLS (Transport Layer Security) unter Windows zu aktivieren, müssen zwei Anforderungen erfüllt sein:

  • 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 sind, die ab Windows 10 und Windows Server 2016 verfügbar sind.

Daher hat sich das Verhalten von Kestrel geändert, wenn HTTP/2 über TLS konfiguriert ist:

  • Downgrade zu Http1 und Protokollieren einer Nachricht auf der Information Ebene, wenn ListenOptions.HttpProtocols auf Http1AndHttp2festgelegt ist. Http1AndHttp2 ist der Standardwert für ListenOptions.HttpProtocols.
  • Ausgabe von NotSupportedException, wenn ListenOptions.HttpProtocols auf Http2 festgelegt ist

Für Diskussionen siehe Thema dotnet/aspnetcore#23068.

Eingeführte 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 Herunterstufung zu Http1 Herunterstufung zu Http1 Fehler beim TLS-Handshake * Kein Fehler

* Konfigurieren Sie kompatible Verschlüsselungssammlungen, um diese Szenarien zu aktivieren.

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 Herunterstufung zu Http1 Herunterstufung zu Http1 Downgrade zu Http1 ** Kein Fehler

** Konfigurieren Sie kompatible Chiffre-Suiten, und setzen Sie den App-Kontext-Schalter Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 auf true, um diese Szenarien zu ermöglichen.

Grund für Änderung

Diese Änderung stellt sicher, dass Kompatibilitätsfehler für HTTP/2 über TLS in älteren Windows-Versionen so früh und so klar wie möglich angezeigt werden.

Stellen Sie sicher, dass HTTP/2 über TLS in inkompatiblen Windows-Versionen deaktiviert ist. Windows 8.1 und Windows Server 2012 R2 sind nicht kompatibel, da ihnen standardmäßig die erforderlichen Verschlüsselungen fehlen. Es ist jedoch möglich, die Computerkonfigurationseinstellungen so zu aktualisieren, dass 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 auf Kestrel aktiviert werden, indem der App-Kontextschalter Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2festgelegt wird. Beispiel:

AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);

Es wurde keine zugrunde liegende Unterstützung geändert. Beispielsweise hat HTTP/2 über TLS noch nie unter Windows 8 oder Windows Server 2012 gearbeitet. Diese Änderung ändert, wie Fehler in diesen nicht unterstützten Szenarien dargestellt werden.

Betroffene APIs

Nichts