Partager via


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 de Information lorsque ListenOptions.HttpProtocols est défini sur Http1AndHttp2. Http1AndHttp2 est la valeur par défaut de ListenOptions.HttpProtocols.
  • Lève une NotSupportedException quand ListenOptions.HttpProtocols est défini sur Http2.

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.

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