Właściwość ClientCertificate nie wyzwala już ponownego negocjowania dla protokołu HttpSys
Właściwość HttpContext.Connection.ClientCertificate
nie wyzwala już renegocjacji protokołu TLS dla protokołu HttpSys.
Wprowadzona wersja
ASP.NET Core 6.0
Stare zachowanie
Ustawienie HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
dozwolonego ponownego negocjowania może być wyzwalane zarówno przez , jak HttpContext.Connection.ClientCertificate
i HttpContext.Connection.GetClientCertificateAsync
.
Nowe zachowanie
Ustawienie HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
zezwala na wyzwalanie ponownego negocjowania tylko przez HttpContext.Connection.GetClientCertificateAsync
program . HttpContext.Connection.ClientCertificate
Zwraca bieżący certyfikat, jeśli jest dostępny, ale nie renegocjuje z klientem żądania certyfikatu.
Przyczyna wprowadzenia zmiany
Podczas implementowania tych samych funkcji dla Kestrelprogramu stało się jasne, że aplikacje muszą mieć możliwość sprawdzenia stanu certyfikatu klienta przed wyzwoleniem renegocjacji. W przypadku problemów, takich jak treść żądania powodująca konflikt z renegocjacją, sprawdź stan, aby rozwiązać ten problem:
if (connection.ClientCertificate == null)
{
await BufferRequestBodyAsync();
await connection.GetClientCertificateAsync();
}
Zalecana akcja
Aplikacje korzystające z opóźnionych negocjacji certyfikatu klienta powinny wywoływać GetClientCertificateAsync(CancellationToken) wywołanie w celu wyzwolenia renegocjacji.
Dotyczy interfejsów API
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)