Kestrel: HTTP/2 disabilitato su TLS in versioni di Windows incompatibili

Per abilitare HTTP/2 su TLS (Transport Layer Security) in Windows, è necessario soddisfare due requisiti:

  • Supporto per ALPN (Application-Layer Protocol Negotiation), disponibile a partire da Windows 8.1 e Windows Server 2012 R2.
  • Set di crittografie compatibili con HTTP/2, disponibile a partire da Windows 10 e Windows Server 2016.

Di conseguenza, il comportamento di Kestrel quando è configurato HTTP/2 su TLS è cambiato in:

  • Downgrade a Http1 e registrare un messaggio a livello di Information quando ListenOptions.HttpProtocols è impostato su Http1AndHttp2. Http1AndHttp2 è il valore predefinito di ListenOptions.HttpProtocols.
  • Generazione di una NotSupportedException quando ListenOptions.HttpProtocols è impostato su Http2.

Per informazioni, vedere il problema dotnet/aspnetcore#23068.

Versione introdotta

ASP.NET Core 5.0

Comportamento precedente

La tabella seguente illustra il comportamento quando è configurato HTTP/2 su TLS.

Protocolli Windows 7,
Windows Server 2008 R2,
o versioni precedenti
Windows 8,
Windows Server 2012
Windows 8.1,
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
o versione successiva
Http2 Generazione di NotSupportedException Errore durante l'handshake TLS Errore durante l'handshake TLS * Nessun errore
Http1AndHttp2 Downgrade a Http1 Downgrade a Http1 Errore durante l'handshake TLS * Nessun errore

* Configurare pacchetti di crittografia compatibili per abilitare questi scenari.

Nuovo comportamento

La tabella seguente illustra il comportamento quando è configurato HTTP/2 su TLS.

Protocolli Windows 7,
Windows Server 2008 R2,
o versioni precedenti
Windows 8,
Windows Server 2012
Windows 8.1,
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
o versione successiva
Http2 Generazione di NotSupportedException Generazione di NotSupportedException Generazione di NotSupportedException ** Nessun errore
Http1AndHttp2 Downgrade a Http1 Downgrade a Http1 Downgrade a Http1 ** Nessun errore

** Configurare pacchetti di crittografia compatibili e impostare l'opzione di contesto dell'app Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 su true per abilitare questi scenari.

Motivo della modifica

Questa modifica garantisce che gli errori di compatibilità per HTTP/2 su TLS nelle versioni precedenti di Windows vengano visualizzati il prima possibile e il più chiaramente possibile.

Verificare che HTTP/2 su TLS sia disabilitato nelle versioni di Windows incompatibili. Windows 8.1 e Windows Server 2012 R2 sono incompatibili perché non hanno le crittografie necessarie per impostazione predefinita. È tuttavia possibile aggiornare le impostazioni di Configurazione computer per usare crittografie compatibili con HTTP/2. Per altre informazioni, vedere Pacchetti di crittografia TLS in Windows 8.1. Dopo la configurazione, HTTP/2 su TLS in Kestrel deve essere abilitato impostando l'opzione di contesto dell'app Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2. Ad esempio:

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

Non è stato modificato alcun supporto sottostante. Ad esempio, HTTP/2 su TLS non ha mai funzionato in Windows 8 o Windows Server 2012. Questa modifica cambia il modo in cui vengono presentati gli errori in questi scenari non supportati.

API interessate

Nessuno