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

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

Eingeführt in Version

ASP.NET Core 6.0

Altes Verhalten

Durch Festlegen von HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation konnte die Neuaushandlung von HttpContext.Connection.ClientCertificate und HttpContext.Connection.GetClientCertificateAsync ausgelöst werden.

Neues Verhalten

Durch Festlegen von HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation kann die Neuaushandlung nur noch von HttpContext.Connection.GetClientCertificateAsync ausgelöst werden. HttpContext.Connection.ClientCertificate gibt das aktuelle Zertifikat zurück, falls verfügbar, führt jedoch keine Neuaushandlung mit dem Client durch, um das Zertifikat anzufordern.

Grund für die Änderung

Bei der Implementierung der gleichen Features für Kestrel wurde deutlich, dass Anwendungen den Status des Clientzertifikats überprüfen müssen, bevor eine Neuaushandlung 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();
}

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

Betroffene APIs

Siehe auch