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();
}

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

Voir aussi