La propiedad ClientCertificate ya no desencadena la renegociación de HttpSys
La propiedad HttpContext.Connection.ClientCertificate
ya no desencadena renegociaciones TLS de HttpSys.
Versión introducida
ASP.NET Core 6.0
Comportamiento anterior
El establecimiento de HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
permitía que HttpContext.Connection.ClientCertificate
y HttpContext.Connection.GetClientCertificateAsync
desencadenaran la renegociación.
Comportamiento nuevo
El establecimiento de HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
permite que la renegociación solo la desencadene HttpContext.Connection.GetClientCertificateAsync
. HttpContext.Connection.ClientCertificate
devuelve el certificado actual, si está disponible, pero no renegocia con el cliente para solicitarlo.
Motivo del cambio
Al implementar las mismas características para Kestrel, quedó claro que las aplicaciones tienen que poder comprobar el estado del certificado de cliente para desencadenar una renegociación. En caso de problemas, como el cuerpo de la solicitud en conflicto con la renegociación, la comprobación del estado permite que el siguiente patrón de uso se ocupe del problema:
if (connection.ClientCertificate == null)
{
await BufferRequestBodyAsync();
await connection.GetClientCertificateAsync();
}
Acción recomendada
Las aplicaciones que usan la negociación retrasada de certificados de cliente deben llamar a GetClientCertificateAsync(CancellationToken) para desencadenar la renegociación.
API afectadas
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)