Тема: Створення та тестування клієнтських сертифікатів на IIS (WIP) [Стаття]
Це мала бути стаття, але в цьому розділі немає підрозділу для статей
Ця стаття базується на англійській статті, яка уже частково втратила актуальність: https://blogs.msdn.microsoft.com/asiate … tificates/
Що треба
По-перше треба визначитися з доменом. localhost підійде якщо ви будете заходити на свій тестовий сайт лише з свого компа. Якщо хочете підключатися з якихось пристроїв по локальній мережі, то можна використати мережеве ім'я комп'ютера.
По-друге потрібен IIS. Пошукайте в інтернеті, як його ставити на вашу версію вінди. Обов'язково встановіть фічі "Client Certificate Mapping Authentication" та "IIS Client Certificate Mapping Authentication".
По-третє потрібен буде OpenSSL для вінди, має вистачити навіть портативного варіанту.
Крок 1. Генеруємо кореневий сертифікат
1. Створіть десь папку для сертифікатів
2. Затисніть Shift на клавіатурі та клацніть правою кнопкою по папці
3. Там буде пункт "Відкрити вікно Powershell тут", або аналогічний про командний рядок
4. У повершелі пропишіть шлях до OpenSSL:
$env:Path = "D:\Programs\OpenSSL-Win64\bin;" + $env:Path
Як це зробити в командному рядку, спитайте у Гугла.
5. Введіть по черзі дві команди:
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
В процесі вас попросять ввести якусь інформацію про новий сертифікат. Великого значення, що ви введете, не матиме, але постарайтеся ввести щось більш-менш правдоподібне.
6. Клікніть правою кнопкою по файлу "rootCA.crt" і виберіть "Інсталювати сертифікат"
7. Далі виберіть "Локальний комп'ютер", а потім "Розташувати всі сертифікати в такому сховищі"
8. Клікніть по кнопці Огляд і виберіть "Сторонні кореневі центри сертифікації"
Мушу попередити, що якщо хтось отримає доступ до файлів "rootCA.crt" та "rootCA.key", то зможе дуже сильно познущатися над вашою віндою. Тому в організаціях адміни часто вичищають встановлені сторонні сертифікати. Майте це на увазі, якщо завтра усе перестане працювати.
9. Якщо хочете заходити на свій сервак з Firefox, то спочатку зайдіть в Настройки
10. Далі Приватність і Безпека, Сертифікати, клікніть Перегляд сертифікатів
11. На закладці "Центри сертифікації" клікніть кнопку Імпорт і знову виберіть "rootCA.crt"
12. Якщо вам раптом захотілося заходити з Андроїда, то ви уже мабуть здогадалися, що робити
13. Тільки шлях буде приблизно такий: Налаштування > Безпека > Сховище облікових даних > Установити з носія
14. Перевірити результат можна в розділі "Надійні облікові дані"
Крок 2. Генеруємо сертифікат для сервера
1. Створіть Блокнотом у папці з ключами текстовий файл з таким вмістом:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = torbins.home.local
DNS.2 = torbins
2. Замість "torbins.home.local" та "torbins" впишіть свій домен. Можете додати іще кілька альтернативних імен.
3. Збережіть файл, а потім перейменуйте на "Server-v3.ext". Переконайтеся, що у вас не вийшло "Server-v3.ext.txt".
4. Якщо ви уже закрили вікно Powershell, то знову відкрийте його і пропишіть шлях до OpenSSL
5. Далі введіть по черзі команди, замінивши "torbins.home.local" на свій домен (тут чотири рядка, зважайте на переноси):
openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout Server.key -subj "/C=CA/ST=None/L=NB/O=None/CN=torbins.home.local" -out Server.csr
openssl x509 -req -in Server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out Server.crt -days 4096 -sha256 -extfile Server-v3.ext
cat Server.crt, Server.key | sc Server-hold.pem
openssl pkcs12 -export -out Server.pfx -in Server-hold.pem -name "IIS Test Server"
"IIS Test Server" також можете замінити на щось своє. Добре запам'ятайте пароль, який вводите на останньому кроці.
6. Клікніть правою кнопкою по файлу "Server.pfx" і виберіть "Інсталяція PFX"
7. Далі виберіть "Поточний користувач"
8. Екран з шляхом до файлу можна пропустити, а на наступному достатньо лише ввести пароль від серверного ключа
9. Далі виберіть "Розташувати всі сертифікати в такому сховищі", і вкажіть сховище "Особисті"
Крок 3. Генеруємо сертифікат для клієнта
1. Тут усе майже так само як і з сервером. Спочатку треба створити файл "Client-v3.ext" із таким вмістом:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = clientAuth
2. У вікні Powershell по черзі виконайте команди (тут їх також чотири, вважайте на переноси):
openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout Client.key -subj "/C=CA/ST=None/L=NB/O=None/CN=IISTestClient" -out Client.csr
openssl x509 -req -in Client.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out Client.crt -days 4096 -sha256 -extfile Client-v3.ext
cat Client.crt, Client.key | sc Client-hold.pem
openssl pkcs12 -export -out Client.pfx -in Client-hold.pem -name "IIS Test Client"
"IISTestClient" і "IIS Test Client" можете замінити на щось своє.
3. Скопіюйте файл Сlient.pfx на усі пристрої, з яких будете заходити на свій сайт
4. Якщо на потрібному комп'ютері стоїть вінда, то клікніть по файлу правою кнопкою миші та виберіть "Інсталяція PFX"
5. В майстрі імпорту виберіть "Поточний користувач", введіть пароль і вкажіть сховище "Особисті"
6. Якщо хочете заходити на свій сайт з Firefox, то в налаштуваннях імпортуйте цей сертифікат на закладку "Ваші сертифікати"
7. На Андроїді, як і з кореневим сертифікатом, виберіть "Установити з носія", знайдіть файл Сlient.pfx, введіть пароль, а потім назву сертифікату й призначення: "Мережа VPN і додатки"
Крок 4. Налаштовуємо сайт в IIS
1. Якщо при установці IIS ви не забули про консоль керування, то у вас на комп'ютері має знайтись inetmgr.exe, запустіть його.
2. Клікніть на потрібний сайт (зазвичай "Default Web Site") правою кнопкою миші і виберіть "Edit Bindings..."
3. Додайте прив'язку до 443-го порту по протоколу https (кнопка "Add"), можете також вибрати ip-шник, на якому буде слухати сервер
4. І найголовніше: з випадайки внизу виберіть сертифікат сервера
5. В принципі, на цьому етапі у вас уже буде працювати сайт з тестовим сертифікатом. Якщо вам не потрібна перевірка клієнтського сертифіката, то далі можете не читати.
6. В розділі свого сайту панелі керування IIS зайдіть в "SSL Settings"
7. Поставте галочку "Require SSL", і виберіть "Require" нижче, потім клікніть "Apply" справа
8. Тепер наш сайт вимагатиме у клієнта сертифікат, залишилось налаштувати перевірку цих сертифікатів
9. В розділі сайту зайдіть в "Configuration Editor"
10. У випадайці "Section" виберіть "system.webServer/security/authentication/iisClientCertificateMappingAuthentication"
11. Опцію "manyToOneCertificateMappingsEnabled" встановіть у значення "True"
12. Клікніть рядок manyToOneMappings в кінці з'явиться кнопка "...". Як ви думаєте, що треба з нею зробити?
13. У новому вікні справа натисніть "Add"
14. Розділ "Properties" заповнюйте наступним чином:
Description - пишіть що завгодно
Enable - "True"
Name - будь-яке ім'я
Password - пароль користувача вінди, який буде використовуватись для перевірки сертифікатів
PermissionMode - "Allow"
UserName - ім'я коистувача
15. Натисніть кнопку "..." в кінці рядка "Rules". Ага, точнісінько таке ж вікно, як і попереднє. А ви думали девопси за красиві очі зарплату отримують?
16. Натисніть "Add" і заповніть "Properties":
CertificateField - "Subject"
CertificateSubField - "CN"
CompareCaseSensitive - "True"
MatchCriteria - те що ви вписали замість "IISTestClient" на кроці 3.2
Докладніше про налаштування перевірки отут: Many-To-One Mappings.
17. Закрийте усі вікна, якщо справа бачите "Apply", то натисніть
На цьому все, якщо ви тепер спробуєте зайти на свій сайт, то побачите діалог вибору сертифікату.
P.S. Щось я так стомився, що на скріни уже сил нема. Може потім...