Как настроить IIS Express для запроса сертификата клиента
Кто-нибудь знает, как настроить IIS Express для запроса сертификата клиента для доступа? Я пытаюсь отладить проблемное приложение ASP.NET, которое использует клиентские сертификаты для аутентификации.
3 ответа
Используйте средство диспетчера IIS и следуйте документации Microsoft. Проверка подлинности сопоставления сертификатов клиента IIS
Пример конфигурации:
<location path="Default Web Site">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true"
manyToOneCertificateMappingsEnabled="true">
<manyToOneMappings>
<add name="Contoso Employees"
enabled="true"
permissionMode="Allow"
userName="Username"
password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]">
<rules>
<add certificateField="Subject"
certificateSubField="O"
matchCriteria="Contoso"
compareCaseSensitive="true" />
</rules>
</add>
</manyToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
<access sslFlags="Ssl, SslNegotiateCert" />
</security>
</system.webServer>
</location>
Я нашел блог, в котором подробно рассказывалось о том, как настроить запросы сертификатов клиентов для IIS Express (я использовал Visual Studio 2017, IISExpress 10.0). Видимо расположение applicationhost.config
файлы изменены в Visual Studio 2015 и выше.
Вот краткое изложение того, что он говорит:
- Установите сертификат (обратите внимание, что закрытый ключ необходим только со стороны клиента) на компьютере разработчика (он должен быть виден в списках сертификатов браузера в их настройках)
- Используя Visual Studio, создайте новое веб-приложение
- Включить SSL для вашего проекта: Просмотр свойств проекта (F4) ->
SSL Enabled
вTrue
(обратите внимание наSSL URL
собственность заселяется) - Настройте проект на запуск в режиме SSL: перейдите в "Свойства проекта" (Alt+Enter), выберите вкладку " Интернет " и измените URL-адрес проекта, указанный на шаге 3. Например,
https://localhost:44300
- Найдите файл конфигурации IIS Express
applicationhost.config
: В 2015 или 2017 году файл находится в[solution directory]\.vs\config\
- в более ранних версиях он был найден в%UserProfile%\Documents\IISExpress\config\
- Изменить файл applicationhost.config: Установить
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
а также<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
- Сертификат теперь доступен из кода в
Request.ClientCertificate
свойство, и должно запрашиваться при открытии страницы в браузере.
Это были инструкции, переданные Джейсоном Шейверсом в его блоге. (Но эта страница больше не существует.) Скотт Хансельман также говорит о включении SSL на http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx. Но он ни в коем случае не ссылается на то, что сайт требует клиентских сертификатов.
Вот инструкции, которым я следовал:
Изменить applicationhost.config (Два из них один в MyDocuments\IISExpress\config и другой в программных файлах \IIS Express\AppServer по умолчанию тот, который находится под вашим профилем, используется при запуске проекта в IISExpress в VS 2012. Другой может запускаться с использованием командной строки, что я и сделал на локальном тестовом компьютере.)
- Изменить элемент
to
И элемент
iisClientCertificateMappingAuthentication >
в
iisClientCertificateMappingAuthentication >
Следующие два шага должны быть выполнены в Visual Studio. По умолчанию, когда в VS 2012 создается новый проект, он создается как проект IIS Express. Более старый проект, перенесенный в VS2012, может фактически изменить это значение.
На странице свойств проекта на вкладке Интернет измените параметр Использовать Visual Studio Developer Server на Использование локального веб-сервера IIS. (Должен быть отмечен серым флажок "Использовать IIS Express", если у вас нет обычной установки IIS на вашем компьютере (что невозможно сделать на этих машинах NMCI). Должен быть URL-адрес проекта, говорящий что-то вроде http://localhost:62714/ (это должен быть тот же порт, который установлен как "определенный порт" в настройках сервера разработки Visual Studio (если он установлен)
Затем выберите Project в обозревателе решений и перейдите на вкладку свойств. (Иногда это нужно сделать пару раз, прежде чем появятся свойства.) У него будет три свойства: SSL Enable (по умолчанию false), SSL URL - пусто с новым проектом и URL настроено на URL в " URL проекта "на вкладке свойств.
Измените свойство SSL enabled на true, и будет создан новый URL-адрес SSL.
- Скопируйте этот URL-адрес SSL и вернитесь на страницу свойств проекта и вставьте его в качестве нового URL-адреса проекта. В этот момент я нажал "Создать виртуальный каталог", хотя в некоторых блогах говорится, что нет необходимости в том, что вам нужно только сохранить проект и запустить его в режиме отладки.
В файле applicationhost.config под элементом "" новая запись создается при первом запуске проекта перед включением SSL. Это будет выглядеть так:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
</bindings>
</site>
Когда вы включаете SSL в вашем проекте, он должен выглядеть так:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
<binding protocol="https" bindingInformation="*:44313:localhost" />
</bindings>
</site>
(все порты 443xx зарезервированы для проектов SSL).