Kestrel : HTTP/2 a été désactivé sur TLS pour les versions de Windows incompatibles
Pour activer HTTP/2 sur TLS (Transport Layer Security) sur Windows, deux exigences doivent être remplies :
- Support ALPN (Application-Layer Protocol Negociation), disponible à compter de Windows 8.1 et Windows Server 2012 R2.
- Ensemble de chiffrements compatibles avec HTTP/2, qui est disponible à compter de Windows 10 et Windows Server 2016.
Par conséquent, le comportement de Kestrel lorsque HTTP/2 sur TLS est configuré est remplacé par :
- Rétrogradez vers
Http1
et journalisez un message au niveau deInformation
lorsque ListenOptions.HttpProtocols est défini surHttp1AndHttp2
.Http1AndHttp2
est la valeur par défaut deListenOptions.HttpProtocols
. - Lève une
NotSupportedException
quandListenOptions.HttpProtocols
est défini surHttp2
.
Pour plus d’informations, consultez le problème dotnet/aspnetcore#23068.
Version introduite
ASP.NET Core 5.0
Ancien comportement
Le tableau suivant décrit le comportement lorsque HTTP/2 sur TLS est configuré.
Protocoles | Windows 7, Windows Server 2008 R2 ou version ultérieure |
Windows 8, Windows Server 2012 |
Windows 8.1, Windows Server 2012 R2 |
Windows 10, Windows Server 2016, ou version ultérieure |
---|---|---|---|---|
Http2 |
Lèvent NotSupportedException |
Erreur lors de l’établissement d’une liaison TLS | Erreur lors de l’établissement d’une liaison TLS * | Aucune erreur |
Http1AndHttp2 |
Passer à une version antérieure vers Http1 |
Passer à une version antérieure vers Http1 |
Erreur lors de l’établissement d’une liaison TLS * | Aucune erreur |
* Configurez des suites de chiffrement compatibles pour activer ces scénarios.
Nouveau comportement
Le tableau suivant décrit le comportement lorsque HTTP/2 sur TLS est configuré.
Protocoles | Windows 7, Windows Server 2008 R2 ou version ultérieure |
Windows 8, Windows Server 2012 |
Windows 8.1, Windows Server 2012 R2 |
Windows 10, Windows Server 2016, ou version ultérieure |
---|---|---|---|---|
Http2 |
Lèvent NotSupportedException |
Lèvent NotSupportedException |
Lèvent NotSupportedException ** |
Aucune erreur |
Http1AndHttp2 |
Passer à une version antérieure vers Http1 |
Passer à une version antérieure vers Http1 |
Passer à une version antérieure vers Http1 ** |
Aucune erreur |
** Configurez des suites de chiffrement compatibles et définissez le commutateur de contexte de l’application Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
sur true
pour activer ces scénarios.
Raison du changement
Ce changement garantit que les erreurs de compatibilité pour HTTP/2 sur TLS sur les versions antérieures de Windows sont signalées aussi tôt et aussi clairement que possible.
Action recommandée
Vérifiez que HTTP/2 sur TLS est désactivé sur les versions de Windows incompatibles. Windows 8.1 et Windows Server 2012 R2 sont incompatibles, car ils ne disposent pas des chiffrements nécessaires par défaut. Toutefois, il est possible de mettre à jour les paramètres de configuration de l’ordinateur pour utiliser des chiffrements compatibles HTTP/2. Pour plus d’informations, consultez Suites de chiffrement TLS dans Windows 8.1. Une fois configuré, HTTP/2 sur TLS sur Kestrel doit être activé en définissant le commutateur de contexte de l’application Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
. Par exemple :
AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);
Aucun support sous-jacent n’a changé. Par exemple, HTTP/2 sur TLS n’a jamais fonctionné sur Windows 8 ou Windows Server 2012. Ce changement modifie la façon dont les erreurs dans ces scénarios non pris en charge sont présentées.
API affectées
None