Freigeben über


Die Eigenschaft „ClientCertificate“ löst keine Neuaushandlung mehr für HttpSys aus

Die HttpContext.Connection.ClientCertificate Eigenschaft löst keine TLS-Neuverhandlungen für HttpSys mehr aus.

Eingeführte Version

ASP.NET Core 6.0

Altes Verhalten

Die Einstellung von HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation erlaubt es, dass die Neuverhandlung sowohl von HttpContext.Connection.ClientCertificate als auch von HttpContext.Connection.GetClientCertificateAsync ausgelöst werden kann.

Neues Verhalten

Die Einstellung HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation ermöglicht das Auslösen der Neuverhandlung nur durch HttpContext.Connection.GetClientCertificateAsync. HttpContext.Connection.ClientCertificate gibt das aktuelle Zertifikat zurück, falls verfügbar, aber es wird nicht mit dem Client neu verhandelt, um das Zertifikat anzufordern.

Grund für Änderung

Bei der Implementierung der gleichen Features für Kestrelwurde klar, dass Anwendungen den Status des Clientzertifikats überprüfen müssen, bevor eine Neuverhandlung ausgelöst wird. Bei Problemen wie einem mit der Neuaushandlung in Konflikt stehenden Anforderungstext ermöglicht die Zustandsüberprüfung das folgende Verwendungsmuster, um das Problem zu beheben:

if (connection.ClientCertificate == null)
{
  await BufferRequestBodyAsync();
  await connection.GetClientCertificateAsync();
}

Anwendungen, die eine verzögerte Aushandlung von Clientzertifikaten verwenden, sollten GetClientCertificateAsync(CancellationToken) aufrufen, um eine Neuverhandlung auszulösen.

Betroffene APIs

Siehe auch