Створення самоподпісанного сертифіката засобами PowerShell
З усіх методів нам по суті доступний тільки InitializeFromPrivateKey (). оскільки інші методи ініціалізації вимагають наявність доступу до Certification Authority. Подивимося що потрібно для цього методу:
Тепер ми можемо перетворювати наш шаблон сертифікату в реальні сертифікат.
Ліричний відступ: а що таке запит в технічному сенсі? Насправді запит нічим не відрізняється від сертифіката. Коли ви запитуєте сертифікат у CA, клієнт використовує ці ж інтерфейси для генерації запиту. При цьому виходить справжнісінький самоподпісанний сертифікат, де Subject і Issuer однакові і рівні імені поточного користувача або комп'ютера, а так само містить всі необхідні розширення. Сам запит підписується закритим ключем, який ми згенерували. За великим рахунком, його вже можна використовувати як справжній самоподпісанний сертифікат. Якщо його відправити на сервер CA, то останній просто підміняє значення необхідних полів (як Issuer, в якому він ставить себе) і розширень, видаляє стару підпис і підписує сертифікат нової підписом. Ви можете переконатися в цьому дуже просто. Згенеруйте запит для сертифіката, відкрийте оснащення Certificates і розгорніть секцію Certificate Enrollment Requests. Там буде цей самий запит у вигляді вже готового сертифіката. Просто там він чекає, поки який-небудь CA не підпише його.
Давайте повернемося в самий початок поточного поста і згадаємо про «вихідний предмет» - IX509Enrollment. Ось цей інтерфейс нам конвертує шаблон сертифікату в справжній сертифікат з використанням методу CreateRequest (). Але перш ніж використовувати метод, нам треба ініціалізувати об'єкт:
І генеруємо файл запиту, який нічим не відрізняється від самоподпісанного сертифіката:
В аргументах методу вказуємо кодування згідно цій сторінці: EncodingType Enumeration. Ми вибираємо Base64 з заголовками. $ EndCert буде містити сам сертифікат (відкриту його частина). Фактично запит зберігається в контейнері Certificate Enrollment Requests. Оскільки цей інтерфейс не був задуманий спеціально для самоподпісанного сертифікатів ми проходимо стандартну процедуру установки сертифіката. Ми просто беремо відкриту частину нашого ж сертифіката і встановлюємо її. Ось, до речі, як він виглядає:
Все, тепер ми побачимо цей сертифікат в нашому сховищі і який готовий до використання. Я трохи переробив код і обернув його в красиву функцію, яка буде робити наступне:
- Генерувати тестовий самоподпісанний сертифікат для підпису скриптів PowerShell
- Встановлювати сертифікат з закритим ключем в контейнер Personal
- Встановлювати відкриту частину сертифіката в Trusted Root CAs для забезпечення довіри до сертифіката
- Встановлювати відкриту частину сертифіката в Trusted Publishers для завдання явного довіри цифрових підписів, зроблені цим сертифікатом.