Сертификат клиента iis express недействителен - PullRequest
0 голосов
/ 31 мая 2018

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

Я создал Root CA Trusted Certificate И сертификат отзыва, которые устанавливаются в Trusted Root Certification Authorities в LocalMachine.

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

Iзатем использовал этот сертификат RootCaTest для создания сертификата клиента: makecert -sk user -iv RootCaTest.pvk -n "CN = usercert" -ic RootCaTest.cer -sr currentuser -ss my -sky signature -pe

В 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 показывает системное сообщение с ошибкой.

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

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

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

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

1 Ответ

0 голосов
/ 01 июня 2018

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

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

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

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

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

Спасибо

...