HttpSys active l’exposition des jetons de liaison de canal TLS par défaut

Dans ASP.NET Core 11, Microsoft.AspNetCore.Server.HttpSys configure inconditionnellement le groupe d’URL au HttpServerChannelBindProperty démarrage. Cela expose le jeton de liaison de canal TLS (CBT) du point de terminaison RFC 5929 à l’application via la nouvelle ITlsConnectionFeature.TryGetChannelBindingBytes API, ce qui active les scénarios de protection étendue pour l’authentification (EPA).

Version introduite

.NET 11

Comportement antérieur

Les serveurs httpSys-backed n’ont pas été configurés HttpServerChannelBindProperty sur le groupe d’URL au démarrage, et le jeton de liaison de canal TLS 5929 RFC 5929 n’a pas été exposé à l’application.

Les applications peuvent choisir en activant le Microsoft.AspNetCore.Server.HttpSys.EnableCBTHardeningAppContext commutateur. Ce commutateur a défini le niveau Mediumde renforcement sur , mais il n’a pas défini l’indicateur HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN . Par conséquent, http.sys n’a pas livré de cbT par requête.

ITlsConnectionFeature n’avait aucun moyen de récupérer le jeton. La seule API associée était la fonctionnalité désormais obsolète ITlsTokenBindingFeature, qui est une fonctionnalité différente et non liée.

Nouveau comportement

HttpSysOptions a une nouvelle propriété HttpAuthenticationHardeningLevel de type HttpAuthenticationHardeningLevel (Legacy, Medium, Strict) qui a la Mediumvaleur par défaut .

Au démarrage, HttpSys appelle HttpSetUrlGroupProperty sans condition avec HttpServerChannelBindProperty, appliquant le niveau de renforcement configuré. Pour Medium et Strict, il définit également l’indicateur HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN de sorte que http.sys remet une demande par requête HTTP_REQUEST_CHANNEL_BIND_STATUS.

La nouvelle ITlsConnectionFeature.TryGetChannelBindingBytes(ChannelBindingKind kind, out ReadOnlyMemory<byte> channelBindingToken) retourne le CBT de point de terminaison (RFC 5929 tls-server-end-point) sur les requêtes HTTPS authentifiées.

Si l’appel HttpSetUrlGroupProperty échoue (par exemple, sur un ancien noyau ou bloqué), l’échec est enregistré et le démarrage se poursuit. L’application s’exécute comme si Legacy elle était configurée.

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Cette modification expose la liaison de canal de point de terminaison RFC 5929 à l’intergiciel d’authentification afin qu’elle puisse implémenter la protection étendue pour l’authentification (EPA). L’EPA lie par chiffrement Kerberos, NTLM ou Négocier l’authentification au canal TLS sous-jacent, en atténuant les attaques de relais d’authentification. Auparavant, aucun serveur ASP.NET Core n’a exposé le cbT au code managé.

Pour plus d’informations, consultez dotnet/aspnetcore#67436.

Aucune action n’est requise pour la plupart des utilisateurs. La nouvelle API est activée. Les applications qui n’appellent TryGetChannelBindingBytes pas entraînent toujours un petit coût par requête : avec Medium un renforcement (valeur par défaut), http.sys capture le jeton de liaison de canal pour chaque requête HTTPS et l’inclut dans les informations de requête transmises au mode utilisateur, ce qui ajoute une petite quantité de travail du noyau et environ 40 octets supplémentaires par requête. La surcharge est négligeable pour les charges de travail classiques, mais pas zéro. Les applications qui doivent l’éliminer entièrement peuvent être désactivées en définissant HttpAuthenticationHardeningLevel.Legacy (voir l’extrait de code ci-dessous).

Pour restaurer le comportement de pré-.NET 11, définissez le niveau de renforcement sur Legacy:

builder.WebHost.UseHttpSys(options =>
{
    options.HttpAuthenticationHardeningLevel = HttpAuthenticationHardeningLevel.Legacy;
});

Lorsqu’il Legacy est configuré, HttpSys ne définit pas l’indicateur CBT, http.sys ne remplit HTTP_REQUEST_CHANNEL_BIND_STATUSpas et TryGetChannelBindingBytes retourne false.

HttpServerChannelBindPropertya été pris en charge dans http.sys depuis Windows 7 et Windows Server 2008 R2 (publié le 22 octobre 2009), qui se trouve sous l’étage du système d’exploitation pour toute version prise en charge ASP.NET Core. Aucun système d’exploitation pris en charge par ASP.NET Core n’est affecté.

API affectées

  • Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.HttpAuthenticationHardeningLevel (nouveau)
  • Microsoft.AspNetCore.Server.HttpSys.HttpAuthenticationHardeningLevel (nouvelle énumération)
  • Microsoft.AspNetCore.Http.Features.ITlsConnectionFeature.TryGetChannelBindingBytes (nouvelle méthode d’interface par défaut)