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 naInformation
úrovni, pokud je listenOptions.HttpProtocols nastavena naHttp1AndHttp2
.Http1AndHttp2
je výchozí hodnota proListenOptions.HttpProtocols
. - Vyvolání
NotSupportedException
hodnoty, kdyListenOptions.HttpProtocols
je nastavena hodnotaHttp2
.
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.
Doporučená akce
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.EnableWindows81Http2
kontextu 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é