Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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();
}
Empfohlene Aktion
Anwendungen, die eine verzögerte Aushandlung von Clientzertifikaten verwenden, sollten GetClientCertificateAsync(CancellationToken) aufrufen, um eine Neuverhandlung auszulösen.
Betroffene APIs
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)