У меня есть ASP Web Api (. Net Framework 4.6.1), который принимает сертификаты клиентов. Требуется отправить настраиваемое сообщение проверки в ответ на запрос с недействительным сертификатом. Например, если сертификат отсутствует, я должен отправить обратно «Сертификат клиента отсутствует», если проверка OCSP не удалась, я должен отправить обратно «Сертификат был отозван» и т. Д. c. Это код:
public class CertificateMessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
var certificate = request.GetClientCertificate();
}
}
У меня есть клиентское приложение, в котором я выбираю, какой сертификат хочу использовать, и оно выполняет запрос к веб-приложению api (которое размещено на другом компьютере). Если сертификат действителен, то request.GetClientCertificates()
возвращает сертификат, в противном случае, если срок действия сертификата истек или он самоподписан, request.GetClientCertificates()
возвращает null.
Я отключил автоматическую c проверку CLR с помощью IIS:
netsh http show sslcert
netsh http delete sslcert ipport=0.0.0.0:443
netsh http add sslcert ipport=0.0.0.0:443 e104e... appid={4dc3e181-...} certstorename=My verifyclientcertrevocation=disable
Я установил:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslBindingInfo\0.0.0.0:443\DefaultSslCertCheckMode=1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\SendTrustedIssuerList=0
Ни одна из вышеперечисленных настроек не работает.
Примечание : сторонняя сторона, которая использует веб-приложение может отправить самозаверяющий сертификат, а бизнес-логи c должен отклонить запрос таких сертификатов, поэтому включение ЦС, который использовался для подписи сертификата, в хранилище доверенных Root, не Это невозможно.
Приветствуется любая помощь о том, как получить сертификат клиента из запроса.
EDIT : похоже, что модуль «IIS Web Core» проверяет сертификат из хранилища сертификатов до того, как IIS «перенаправит» запрос моему приложению:
введите описание изображения здесь