Udostępnij za pośrednictwem


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.GetClientCertificateAsyncprogram . 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();
}

Aplikacje korzystające z opóźnionych negocjacji certyfikatu klienta powinny wywoływać GetClientCertificateAsync(CancellationToken) wywołanie w celu wyzwolenia renegocjacji.

Dotyczy interfejsów API

Zobacz też