Свойство 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
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)