HttpSys habilita la exposición de tokens de enlace de canal TLS de forma predeterminada

En ASP.NET Core 11, Microsoft.AspNetCore.Server.HttpSys configura incondicionalmente el grupo de direcciones URL con HttpServerChannelBindProperty en el inicio. Esto expone el token de enlace de canal TLS (CBT) del punto de conexión RFC 5929 a la aplicación a través de la nueva ITlsConnectionFeature.TryGetChannelBindingBytes API, lo que habilita la protección ampliada para escenarios de autenticación (EPA).

Versión introducida

.NET 11

Comportamiento anterior

Los servidores respaldados por HttpSys no se configuraron HttpServerChannelBindProperty en el grupo de direcciones URL al iniciarse y el token de enlace de canal TLS RFC 5929 no se ha expuesto a la aplicación.

Las aplicaciones pueden optar por habilitar el Microsoft.AspNetCore.Server.HttpSys.EnableCBTHardeningAppContext modificador. Ese modificador establece el nivel Mediumde protección en , pero no estableció la HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN marca, por lo que http.sys no entregaron un CBT por solicitud.

ITlsConnectionFeature no tenía ninguna manera de recuperar el token. La única API relacionada era la obsoleta, ITlsTokenBindingFeatureque es una característica diferente y no relacionada.

Nuevo comportamiento

HttpSysOptions tiene una nueva propiedad HttpAuthenticationHardeningLevel de tipo HttpAuthenticationHardeningLevel (Legacy, Medium, Strict) que tiene Mediumcomo valor predeterminado .

En el inicio, HttpSys llama HttpSetUrlGroupProperty incondicionalmente a con HttpServerChannelBindProperty, aplicando el nivel de protección configurado. Para Medium y Strict, también establece la HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN marca para que http.sys entregue una solicitud por solicitud HTTP_REQUEST_CHANNEL_BIND_STATUS.

El nuevo ITlsConnectionFeature.TryGetChannelBindingBytes(ChannelBindingKind kind, out ReadOnlyMemory<byte> channelBindingToken) devuelve el punto de conexión CBT (RFC 5929 tls-server-end-point) en las solicitudes HTTPS autenticadas.

Si se produce un error en la HttpSetUrlGroupProperty llamada (por ejemplo, en un kernel antiguo o bloqueado), el error se registra y continúa el inicio. La aplicación se ejecuta como si Legacy estuviera configurada.

Tipo de cambio disruptivo

Este es un cambio de comportamiento.

Motivo del cambio

Este cambio expone el enlace de canal de punto de conexión RFC 5929 al middleware de autenticación para que pueda implementar la protección ampliada para la autenticación (EPA). EPA enlaza criptográficamente la autenticación Kerberos, NTLM o Negotiate al canal TLS subyacente, mitigando los ataques de retransmisión de autenticación. Anteriormente, ningún servidor ASP.NET Core expone el CBT al código administrado.

Para obtener más información, vea dotnet/aspnetcore#67436.

No se requiere ninguna acción para la mayoría de los usuarios. La nueva API es opcional. Las aplicaciones que no llaman TryGetChannelBindingBytes siguen incurriendo en un pequeño costo por solicitud: con Medium la protección (valor predeterminado), http.sys captura el token de enlace de canal para cada solicitud HTTPS e lo incluye en la información de solicitud entregada al modo de usuario, lo que agrega una pequeña cantidad de trabajo del kernel y aproximadamente 40 bytes adicionales por solicitud. La sobrecarga es insignificante para las cargas de trabajo típicas, pero no para cero. Las aplicaciones que necesitan eliminarla pueden optar por no participar estableciendo HttpAuthenticationHardeningLevel.Legacy (consulte el fragmento de código siguiente).

Para restaurar el comportamiento anterior a la .NET 11, establezca el nivel Legacyde protección en :

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

Cuando Legacy se configura, HttpSys no establece la marca CBT, http.sys no rellena HTTP_REQUEST_CHANNEL_BIND_STATUSy TryGetChannelBindingBytes devuelve false.

HttpServerChannelBindPropertyse ha admitido en http.sys desde Windows 7 y Windows Server 2008 R2 (publicado el 22 de octubre de 2009), que está por debajo del piso del sistema operativo para cualquier versión de ASP.NET Core compatible. No se ve afectado ningún sistema operativo compatible con ASP.NET Core.

Las APIs afectadas

  • Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.HttpAuthenticationHardeningLevel (nuevo)
  • Microsoft.AspNetCore.Server.HttpSys.HttpAuthenticationHardeningLevel (nueva enumeración)
  • Microsoft.AspNetCore.Http.Features.ITlsConnectionFeature.TryGetChannelBindingBytes (nuevo método de interfaz predeterminado)