Поделиться через


Свойство ClientCertificate больше не вызывает повторное согласование для HttpSys

Свойство HttpContext.Connection.ClientCertificate больше не вызывает повторное согласование TLS для HttpSys.

Представленные версии

ASP.NET Core 6.0

Старое поведение

При настройке HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation разрешалось повторное согласование в HttpContext.Connection.ClientCertificate и HttpContext.Connection.GetClientCertificateAsync.

Новое поведение

При настройке HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation повторное согласование разрешается только в HttpContext.Connection.GetClientCertificateAsync. HttpContext.Connection.ClientCertificate возвращает текущий сертификат, если он доступен, но не выполняет повторное согласование с клиентом для запроса сертификата.

Причина изменения

При реализации тех же функций для Kestrel стало ясно, что приложения должны иметь возможность проверять состояние сертификата клиента перед активацией повторного согласования. Для таких проблем, как конфликт текста запроса с повторным согласованием, проверка состояния позволяет использовать следующий шаблон использования для решения проблемы.

if (connection.ClientCertificate == null)
{
  await BufferRequestBodyAsync();
  await connection.GetClientCertificateAsync();
}

Приложения, использующие отложенное согласование сертификата клиента, должны вызвать GetClientCertificateAsync(CancellationToken) для активации повторного согласования.

Затронутые API

См. также