La propriété ClientCertificate ne déclenche plus la renégociation pour HttpSys
La propriété HttpContext.Connection.ClientCertificate
ne déclenche plus de renégociations TLS pour HttpSys.
Version introduite
ASP.NET Core 6.0
Ancien comportement
Le paramètre HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
permettait le déclenchement de la renégociation par HttpContext.Connection.ClientCertificate
et HttpContext.Connection.GetClientCertificateAsync
.
Nouveau comportement
Le paramètre HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
permet le déclenchement de la renégociation uniquement par HttpContext.Connection.GetClientCertificateAsync
. HttpContext.Connection.ClientCertificate
retourne le certificat actuel s’il est disponible, mais ne renégocie pas avec le client pour demander le certificat.
Raison du changement
Lors de l’implémentation des mêmes fonctionnalités pour Kestrel, il est devenu évident que les applications doivent être en mesure de vérifier l’état du certificat client avant de déclencher une renégociation. Pour les problèmes tels que le corps de la demande en conflit avec la renégociation, la vérification de l’état permet au modèle d’utilisation suivant de traiter le problème :
if (connection.ClientCertificate == null)
{
await BufferRequestBodyAsync();
await connection.GetClientCertificateAsync();
}
Action recommandée
Les applications qui utilisent la négociation différée du certificat client doivent appeler GetClientCertificateAsync(CancellationToken) pour déclencher la renégociation.
API affectées
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)