Недействительный сертификат клиента iis Express

Я разрабатываю приложение dotnetcore 2.0 mvc, которое требует включения клиентского сертификата.

Я создал доверенный сертификат Root CA И сертификат отзыва, которые установлены в доверенных корневых центрах сертификации LocalMachine.

makecert -n "CN=RootCaTest" -r -sv RootCaTest.pvk RootCaTest.cer makecert -crl -n "CN=RootCaTest" -r -sv RootCaTest.pvk RootCaTest.crl

Затем я использовал этот сертификат RootCaTest для создания сертификата клиента:

В IIS-Express applicationHost.config я установил (как и в других статьях)

<system.webServer>
  <security>
    <access sslFlags="Ssl, SslNegotiateCert" />
    ....
  </security>
  <authentication>
    <iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
    ....
  </authentication>
</system.webServer>

Когда я пытаюсь отладить приложение, я получаю сообщение об ошибке «Невозможно запустить dotnet.exe. Сервер вернул ошибку 403» — и что полный ответ был записан в HttpFailure_xx.html. файл HttpFailure показывает, что «сертификат вашего клиента либо не является доверенным, либо недействительным».

Ошибка возникает ДО открытия веб-браузера для отладки — Visual Studio 2017 показывает системное сообщение с ошибкой.

Я следовал инструкциям на этой странице, что приводит к проверке того, что «в хранилище сертификатов доверенных корневых центров сертификации есть один или несколько несамоподписанных сертификатов. Несамоподписанный сертификат — это любой сертификат, для которого» " и значения "Кем выдано" не совпадают." - после проверки их нет.

Без вышеуказанных изменений в конфигурации iis-express Context.Connection.ClientCertificate всегда имеет значение null.

Я провел последние два дня, читая пост за постом об этом, но не могу найти решения, которое работает в моем случае.

Обратите внимание, что я проверил, что ClientCertificate правильно отправляется через HttpClient.


person Adam Abraham    schedule 31.05.2018    source источник


Ответы (1)


Я пришел к выводу, что проблема заключается в том, как настроена отладка. Kestrel ListenOptions настроен для HTTPS и включает указанный сертификат сервера И требует сертификат клиента для аутентификации.

Если я изменю свойства отладки приложения и переключу «Запуск:» IIS-Express на проект, отладка теперь открывает сервер Kestrel в окне консоли (а не в браузере).

Теперь, если я звоню в Kestrel-Urls, Client-Certificate больше не является нулевым, и я могу проверить запрос и т. д.

При отладке в IIS-Express я вижу, что сертификат сервера (в браузере) — это «localhost», а НЕ тот, который я указал в параметрах прослушивания Kestrel.

Я хотел бы знать: можно ли как-то настроить IIS-Express для использования того же сертификата сервера, что и для Kestrel? Или это единственный способ отладить это приложение локально, чтобы запустить проект?

Спасибо

person Adam Abraham    schedule 01.06.2018
comment
Вы нашли решение проблемы с IIS Express? - person user3079834; 24.06.2020