Magic cookies створення самоподпісанного сертифіката засобами powershell

Створення самоподпісанного сертифіката засобами PowerShell

З усіх методів нам по суті доступний тільки InitializeFromPrivateKey (). оскільки інші методи ініціалізації вимагають наявність доступу до Certification Authority. Подивимося що потрібно для цього методу:

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

Система приклеїть цей сертифікат до шаблону сертифіката і перекладе його вже в контейнер Personal:
Все, тепер ми побачимо цей сертифікат в нашому сховищі і який готовий до використання. Я трохи переробив код і обернув його в красиву функцію, яка буде робити наступне:
  • Генерувати тестовий самоподпісанний сертифікат для підпису скриптів PowerShell
  • Встановлювати сертифікат з закритим ключем в контейнер Personal
  • Встановлювати відкриту частину сертифіката в Trusted Root CAs для забезпечення довіри до сертифіката
  • Встановлювати відкриту частину сертифіката в Trusted Publishers для завдання явного довіри цифрових підписів, зроблені цим сертифікатом.
На вигляд здається складно, але насправді тут нічого складного немає зовсім. Просто уявіть собі сертифікат як велику матрьошку, в яку ви вкладаєте інші маленькі матрьошки, які представляють собою поля і розширення сертифікатів. Починаєте збирати найменші матрьошки, вкладаєте в більш великі і в кінцевому підсумку збираєте справжній сертифікат. Хоч документація на MSDN не надто повна, використовуючи командлет Get-Member ви можете заповнити цю прогалину.

Схожі статті