Можно ли настроить параметры сертификата клиента в файле web.config
Я работаю с приложением SSL и хочу контролировать, какие папки игнорируют, требуют или принимают сертификаты клиентов.
Конечная цель состоит в том, чтобы подпапка webApp игнорировала сертификацию клиента. Я не хочу делать это через IIS, потому что он должен быть реплицирован по всей веб-ферме.
Есть идеи?
1 ответ
Вы можете использовать комбинацию раздела доступа и locations
в web.config (или web.configs в соответствующих подкаталогах), чтобы настроить это.
Например, чтобы запросить сертификат SSL в интерфейсе каталога, вы можете добавить следующий блок в раздел конфигурации вашего web.config:
<location path="Interface">
<system.webServer>
<security>
<access sslFlags="Ssl,SslRequireCert" />
</security>
</system.webServer>
</location>
ПРИМЕЧАНИЕ: как сказал @Jonathan DeMarks в своем комментарии, мне также нужно было включить SslNegotiateCert
чтобы заставить его работать (с IIS 8.5 и Chrome). Итак, рабочий конфиг для меня: sslFlags="Ssl,SslRequireCert,SslNegotiateCert"
На самом деле я получил сообщение о том, что я указал SslRequireCert
но я мог бы использовать SslNegotiateCert
,
Обратите внимание, что если вы хотите требовать Ssl, вы должны добавить его и соответствующий флаг сертификата.
Значения флагов из технической документации:
Никто. Этот параметр по умолчанию отключает SSL для сайта или приложения.
Ssl. Сайт или приложение требует SSL.
SslNegotiateCert. Сайт или приложение принимает клиентские сертификаты для аутентификации.
SslRequireCert. Сайт или приложение требуют клиентских сертификатов для аутентификации. Ssl128. Для сайта или приложения требуется 128-битное шифрование SSL-сертификата.
ТЕМ НЕ МЕНИЕ
access
раздел не может быть переопределен по умолчанию.
Для поддержки этого вы должны изменить applicationHost.config в C:\Windows\System32\inetsrv\config (или в соответствующем каталоге для вашей установки) и изменить следующую строку:
<section name="access" overrideModeDefault="Deny" />
чтобы:
<section name="access" overrideModeDefault="Allow" />
Я заставил это работать так же, как в IIS (отобразить диалоговое окно сертификата в браузере и, если не выбрано, вернуть 403.7), используя эту последовательность в следующем порядке в web.config: Ssl, SslNegotiateCert, SslRequireCert.
Итак, раздел выглядит так:
<location path="Interface">
<system.webServer>
<security>
<access sslFlags="Ssl,SslNegotiateCert,SslRequireCert" />
</security>
</system.webServer>