- Кореневий сертифікат (Certificate Authority або CA). Їм будемо підписувати всі інші.
- Сертифікат домену (сервера). Їм IIS перевірятиме клієнтів. І навпаки, клієнти зможуть перевірити справжність сервера.
- Сертифікат (и) клієнта (ів)
Для роботи нам знадобиться окрема папка, наприклад c: \ iis. У ній необхідно створити файл без розширення serial і записати туди 01. так само там потрібно створити порожній файл index.txt. Залежно від конфігурації OpenSSL може попросити створити всередині цієї папки ще які небудь. У моєму випадку це була папка newcerts. Так само в OpenSSL.cfg потрібно буде поміняти в [CA_default] dir на c: / iis
1) Створимо кореневої self-signed сертифікат:
openssl req -new -x509 -newkey rsa: 2048 -days 1000 -out c: \ iis \ ca.crt -keyout c: \ iis \ ca.key
- -new означає що ми хочемо створити новий запит
- -x509 що відразу хочемо самоподпісанний сертифікат
- -newkey rsa: 2048 Нехай тут же і ключик нам згенерує довжиною 2048 біт. замість rsa:<кол-во бит>, до речі, можна вказувати dsa:<файл с параметрами> або ec:<файл с параметрами>
- -days 1000 - сертифікат закінчиться через 1000 днів
- -out і -keyout вказують куди зберегти сертифікат і закритий ключ від нього
Після серії нескладних питань в папці iis з'являться сертифікат ca.crt і закритий ключ від нього ca.key
Тепер, щоб IIS дізнавався все сертифікати, підписані кореневим, потрібно встановити кореневий сертифікат в сховищі довірених центрів сертифікатів комп'ютера:
- запускаємо mmc
- Додаємо оснащення сертифікати і вказуємо, що вона буде керувати сертифікатами дляучетной записи комп'ютера. інакше нічого не заведеться.
- Відкриваємо «Довірені кореневі центри сертифікації» і імпортуємо туди наш CA:
Готово! Можна приступати до роботи з сервером.
2) В консолі управління IIS потрібно зайти в «Сертифікати сервера», викликати меню по правій кнопці і натиснути створити новий запит сертифіката. Збережіть його в c: \ iis як server.csr
Тепер підпишемо запит сертифіката сервера кореневих сертифікатом:
openssl ca -days 1000 -policy policy_anything -keyfile c: \ iis \ ca.key -cert c: \ iis \ ca.crt -in c: \ iis \ server.csr -out c: \ iis \ server.cer
-policy policy_anything означає, що сертифікату будуть надані всі можливі політики застосування. Найпростіший варіант. Інші параметри, вважаю, в поясненні не потребують. Головне, не заплутатися де який файл вказувати.
Після цього у нас в c: \ iis з'явиться сертифікат сервера server.cer. котори потрібно встановити в IIS.
Для цього ми знову йдемо в «сертифікати сервера», вибираємо «Запит установки сертифіката» і там вказуємо c: \ iis \ server.cer.
Все, сертифікат у сервера є.
Тепер потрібно в привязках для вузла створити нову https прив'язку і вибрати зі списку наш серверний сертифікат:
Після цього потрібно в настройках SSL для вузла виставити опції наступним чином:
3) Генеруємо запит для клієнтського сертифіката
openssl req -new -newkey rsa: 2048 -days 1000 -keyout c: \ iis \ client.key -out c: \ iis \ client.csr
Тут ми не вказували -x509, тому отримали звичайний запит на сертифікат і закритий ключ клієнта.
Підписуємо запит:
openssl ca -days 1000 -policy policy_anything -keyfile c: \ iis \ ca.key -cert c: \ iis \ ca.crt -in c: \ iis \ client.csr -out c: \ iis \ client.crt
Тут теж все зрозуміло, в результаті ми отримаємо сертифікат сліента client.crt
Тепер щоб імпортувати сертифікат клієнта в сховище сертифікатів Windows разом з ключем, нам необхідно конвертнуть crt + key в контейнер .pfx:
openssl pkcs12 -export -inkey c: \ iis \ client.key -in c: \ iis \ client.crt -out c: \ iis \ client.pfx
Ура! Отримали client.pfx. двічі клікнувши на якому можна викликати діалог імпорту сертифікатів і, власне встановити то що вийшло в особисте сховище.
Можна згенерувати ще один сертифікат з іншими даними і теж його імпортувати. Тоді при заході на сервер вам запропонують вибрати будь-який з них:
От і все )
На останок код aspx сторінки (збережіть його як Default.aspx), який дозволить вам все перевірити: Він виводить інформацію про клієнтському сертифікаті:
<%@ Page Language="C#"%>
<%@ Import Namespace="System.Security.Cryptography" %>