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();
}
Empfohlene Maßnahme
Apps, die die verzögerte Aushandlung von Clientzertifikaten verwenden, sollten GetClientCertificateAsync(CancellationToken) aufrufen, um eine Neuaushandlung auszulösen.
Betroffene APIs
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)