Handcode створюємо сертифікати openssl

Створюємо сертифікати: OpenSSL

Практична користь даної статті, навчитися швидко почати роботу з SSL сертифікатами за допомогою програми OpenSSL. Зрозуміло, випуском сертифікатів займаються спеціальні центри сертифікації, і Вам не варто замислюватися про тонкощі створення сертифікатів, тим більше в production версії Ви все одно зробите запит на сертифікат в один з таких центрів, але в режимі debug / test, ви можете використовувати сертифікати зроблені власноруч (що мені одного разу і було потрібно). Я не буду розповідати що таке SSL сертифікат і для чого він потрібен, але для розуміння статті, це необхідно знати. Для кращого розуміння даної статті, виділимо кілька основних етапів:
  1. Завантажити та встановити OpenSSL.
  2. Налаштуємо робоче місце.
  3. Випустимо CA сертифікат і для нього список відкликаних сертифікатів CRL.
  4. Зробимо запит на сертифікат нашому центру сертифікації.
  5. Випустимо сертифікат за запитом.
  6. Додамо наші сертифікати в сховища сертифікатів.

1. Беремо з сайту останню версію OpenSSL, і встановлюємо її на жорсткий диск.

2. Для зручності, додайте в змінну PATH повний шлях до bin директорії OpenSSL. Далі, для того щоб створені ключі, запити на сертифікат, сертифікати та інше не були перемішані в загальній купі, я рекомендую створити для себе робочий каталог mySSL, з наступними підкаталогами:

Handcode створюємо сертифікати openssl

У нашому випадку, C: \ mySSL \ є робочим каталогом, що містить наступні підкаталоги і файли:
  • key - каталог з private-ключами
  • csr - каталог запитів на сертифікат (Certificate Signing Request)
  • cer - каталог сертифікатів, для публічного користування (Certificate)
  • crl - каталог списків відкликаних сертифікатів (Certificate Revocation List)
  • p12 - каталог сертифікатів p12, з private-ключем (Personal Information Exchange File)
  • database.txt - база даних випущених сертифікатів
  • serial.txt - файл з поточним серійним номером сертифіката
Структура каталогів створена, і як мені здається, вона досить зручна для вирішення даного завдання. Залишилося налаштувати OpenSSL. Для цього, в робочому каталозі (C: \ mySSL \) треба розмістити конфігураційний файл openssl.conf. після чого можна приступати до створення сертифікатів.

3. Випустимо власний CA сертифікат, для цього, отримаємо private-ключ для нашого CA сертифікату. Це можна зробити за допомогою команди:

#openssl genrsa -des3 -out key / ca.key 1024

Після чого, створимо CA сертифікат, виконавши команду:

#openssl req -config openssl.conf -new -x509 -days 365 -key key / ca.key -out cer / ca.cer -subj "/ C = RU / ST = Russia / L = Moscow / O = MyCompany / OU = CA / CN = localhost "

Тут же створимо список відкликаних сертифікатів для CA сертифікату:

#openssl ca -config openssl.conf -gencrl -out crl / ca.crl

Зробимо експорт в PKCS12. упакувавши приватний ключ і сам CA сертифікат:

#openssl pkcs12 -export -in cer / ca.cer -inkey key / ca.key -out p12 / ca.p12

4. Наш CA сертифікат готовий, тепер ми можемо приступити до випуску дочірнього SSL сертифікату, для цього зробимо запит на SSL сертифікат:

# Openssl.exe req -config openssl.conf -new -newkey rsa 1024 -keyout key / test.key -nodes -out csr / test.csr -subj "/ C = RU / ST = Russia / L = Moscow / O = MyCompany / OU = IT Departament / CN = localhost "

5. Підтвердимо запит на сертифікат нашим CA сертифікатом (підпишемо серіфікат нашим CA сертифікатом):

#openssl ca -policy policy_any -config openssl.conf -in csr / test.csr -days 360 -out cer / test.cer

Зробимо експорт в PKCS12 отриманого SSL сертифікату:

#openssl pkcs12 -export -out p12 / test.p12 -in cer / test.cer -inkey key / test.key

6. Для того щоб додати наші сертифікати (PKCS12) в сховище сертифікатів треба в консолі управління оснащеннями (команда mmc) додати оснастку "Сертифікати" для локальної машини, після чого, імпортувати наші сертифікати та список відкликаних сертифікатів у відповідні папки (в папку "Особисті "і" Довірені кореневі центри сертифікації ").

Handcode створюємо сертифікати openssl

Для швидкого розгортання можна скачати підсумковий bat-скрипт. Даний скрипт створює структуру каталогів, конфігураційний файл openssl.conf і запускає процес створення сертифікатів.

PS: Бережіть файли з приватними ключами (* .key) і файли PKCS12 (* .p12), по можливості зберігайте дані файли на спеціальних носіях. Доступ до даних файлів повинен бути сильно обмежений!
Файли сертифікатів (* .cer) і список відкликаних сертифікатів (* .crl) створені спеціально для публічного доступу, в тому числі і для розміщення в інтернеті.
Список відкликаних сертифікатів (* .crl) повинен оновлюватися якомога частіше.

UPD: Після того як необхідність в тестовому CA сертифікаті пройде, не забудьте видалити його зі списку довірених сертифікатів.

Привіт, Іьля. Як ваші справи?
У мене з'явилося проблема, і ось вже цілий день сиджу перед комп'ютером, шукаю відповіді:
Команда ось це:
openssl ca -passin pass: password -policy policy_anything -out "certificate.crt" -infiles "request.csr"

1 out of 1 certificate requests certified, commit? [Y / n] y
Write out database with 1 new entries
Data Base Updated

Чи є спосіб автоматично відповідати y на питання: Sign the certificate? [Y / n]: і 1 out of 1 certificate requests certified, commit?
Спасибі вам за відповідь.

У мене тут знову виникли ряд питань за вищевказаною створення сертифікатів :)
1. для чого прописаний в конфіги рандом файл хоч його і немає в директорії?
2. при створенні дочірнього сертифіката у мене в директорії cer додався файл 01.pem - для чого він і що з ним робити?
3. при створенні ключа для дочірнього сертифіката пас ні запитано, так і повинно бути?
4. виходить адже необов'язково створювати приват ключі і запит на самого клієнта, можна адже все виконати на сервері і передати клієнту файл pkcs12 і паролі)) або не так :)

1. Точно не пам'ятаю, але його можна знайти в корені або в папці з openssl. Це чисто службовий файл, зберігає seed для rand, і його іноді називають .rand, для того щоб він був прихованим в unix.

3. Можна зробити так, щоб запитував (як би додатковий захист ключа), а можна залишити як є. Просто зберігати ключ для CA у відкритому вигляді ризиковано.

4. Можна, якщо клієнт довіряє сервера і каналу передачі пароля з ключами.

@Nurlan
Це питання тут вже задавали вище, чесно кажучи я не маю на нього чіткої відповіді, ну крім тієї посилання.