Sdílet prostřednictvím


Kestrel: HTTP/2 zakázáno přes protokol TLS v nekompatibilních verzích Windows

Pokud chcete ve Windows povolit protokol HTTP/2 přes protokol TLS (Transport Layer Security), je potřeba splnit dva požadavky:

  • Podpora vyjednávání protokolu ALPN (Application-Layer Protocol), která je dostupná od systémů Windows 8.1 a Windows Server 2012 R2.
  • Sada šifer kompatibilních s protokolem HTTP/2, která je dostupná od Systémů Windows 10 a Windows Server 2016.

Například chování Kestrelu při konfiguraci protokolu HTTP/2 přes PROTOKOL TLS se změnilo na:

  • Downgrade na Http1 úroveň a zaprotokolujte zprávu na Information úrovni, pokud je listenOptions.HttpProtocols nastavena na Http1AndHttp2. Http1AndHttp2 je výchozí hodnota pro ListenOptions.HttpProtocols.
  • Vyvolání NotSupportedException hodnoty, kdy ListenOptions.HttpProtocols je nastavena hodnota Http2.

Diskuzi najdete v tématu o problému dotnet/aspnetcore#23068.

Zavedená verze

ASP.NET Core 5.0

Staré chování

Následující tabulka popisuje chování při konfiguraci protokolu HTTP/2 přes protokol TLS.

Protokoly Windows 7,
Windows Server 2008 R2,
nebo starší
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
nebo novější
Http2 Hodit NotSupportedException Chyba při použití metody handshake protokolu TLS Chyba při použití metody handshake protokolu TLS * Bez chyby
Http1AndHttp2 Downgrade na Http1 Downgrade na Http1 Chyba při použití metody handshake protokolu TLS * Bez chyby

* Nakonfigurujte kompatibilní šifrovací sady pro povolení těchto scénářů.

Nové chování

Následující tabulka popisuje chování při konfiguraci protokolu HTTP/2 přes protokol TLS.

Protokoly Windows 7,
Windows Server 2008 R2,
nebo starší
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
nebo novější
Http2 Hodit NotSupportedException Hodit NotSupportedException Hodit NotSupportedException ** Bez chyby
Http1AndHttp2 Downgrade na Http1 Downgrade na Http1 Downgrade na Http1 ** Bez chyby

** Nakonfigurujte kompatibilní šifrovací sady a nastavte přepínač Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 kontextu aplikace tak, aby true umožňoval tyto scénáře.

Důvod změny

Tato změna zajišťuje, že chyby kompatibility protokolu HTTP/2 přes protokol TLS ve starších verzích Windows se zobrazí co nejdříve a co nejjasněji.

Ujistěte se, že je protokol HTTP/2 přes PROTOKOL TLS zakázaný v nekompatibilních verzích Windows. Windows 8.1 a Windows Server 2012 R2 nejsou kompatibilní, protože ve výchozím nastavení nemají potřebné šifry. Je ale možné aktualizovat nastavení konfigurace počítače tak, aby používala šifry kompatibilní s protokolem HTTP/2. Další informace najdete v tématu Šifrovací sady protokolu TLS ve Windows 8.1. Po nakonfigurování musí být protokol HTTP/2 přes PROTOKOL TLS u Kestrel povolen nastavením přepínače Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2kontextu aplikace . Příklad:

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

Žádná podkladová podpora se nezměnila. Například http/2 přes PROTOKOL TLS nikdy nefungovalo ve Windows 8 nebo Windows Serveru 2012. Tato změna změní způsob zobrazení chyb v těchto nepodporovaných scénářích.

Ovlivněná rozhraní API

Žádné