Всем доброго времени суток. Так уж получилось, на работе необходимо было настроить сервер с IIS, да не просто настроить, но повесить авторизацию на разные сервисы с использованием только определенного сервису сертификата. Данная проблема может быть решена использованием нескольких центров генерации, но не будем все усложнять и приступим к настройке «ОдинКОдному» нашего IIS.
Генерация необходимых ключей очень подробно описана в интернете(статья на хабре) и не должна вызвать особых проблем, поэтому эту часть я опущу.
Переходим к делу:
1) Устанавливаем IIS и необходимые компоненты. Обязательно отмечаем «Проверка подлинности с сопоставлением сертификата клиента IIS».
2) Для привязки нам понадобится клиентский сертификат в кодировке base64, его очень просто экспортировать из остнастки (certmgr.msc) «Сертификаты» или из «Свойства обозревателя».
3) Полученный сертификат открываем в текстовом редакторе и выстаиваем в одну линию, предварительно удалив строчки «BEGIN CERTIFICATE» и «END CERTIFICATE».
С подготовкой закончили переходим к серверу.
4) Запускаем остнастку (inetmgr) «Диспетчер служб IIS», и устанавливаем сертификат сервера. В моём случае CN сертификата Localhost.
5) После этого мы можем привязать этот сертификат к сервисам. Идем в привязки и выбрав Https указываем необходимый порт и сертификат.
6) В параметрах SSL отмечаем «Требовать SSL» и сертификат клиента «требовать».
7) Теперь любой сертификат выпущенный нашим УЦ подойдет для авторизации, но цель данной статьи как раз показать следующий шаг когда клиентов с сертификатами необходимо разделить. Идем в «Редактор конфигураций» по адресу: «system.webServer/security/authentication/iisClientCertificateMappingAuthentication».
8) Здесь предстоит сделать выбор или мы пускаем по конкретным сертификатам или по определенному полю в сертификате (например уникальный OID).
9) Рассмотрим параметр «oneToOneCertificateMappingsEnabled». Установив его значении в «True» мы сможем привязать конкретный сертификат к пользователю.
10) Полученный на втором пункте сертификат вставляем в поле «certificate». Поля «userName» и «password» заполняем учетной записью, которую предварительно создали.
11) Теперь при предъявлении занесенного клиентского сертификата мы получим доступ с правами указанной учетной записи. Однако все остальные сертификаты продолжат преспокойно работать и получать анонимный доступ, что бы этого избежать необходимо в iis, отключить анонимную проверку подлинности.
На этом этапе авторизация должна проходить только по заданному сертификату.
Код для appcmd:
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /enabled:"True" /oneToOneCertificateMappingsEnabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"oneToOneMappings.[userName='22',password='22',certificate='текст сертификата в кодировке base64']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert, SslRequireCert" /commit:apphost
Автор: EvilLord
Скажите, про какую учетную запись идёт речь в пункте 10 и где ее создать? Что означает эта учетная запись?