Налаштовуємо авторизацію в IIS за сертифікатами використовуючи OneToOne

Всім доброго часу доби. Так вже вийшло, на роботі необхідно було налаштувати сервер 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


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.