Основи openssl ssl-сертифікати, закриті ключі і запити на підпис

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

OpenSSL - це багатофункціональний інструмент командного рядка, призначений для управління інфраструктурою відкритих ключів (PKI) і HTTPS.

Даний посібник пропонує вам короткий огляд команд OpenSSL, а також приклади використання і генерування закритих ключів, запитів на підпис сертифікатів і зміни формату сертифіката.

Запити на підпис сертифікатів (CSR)

Щоб отримати SSL-сертифікат від центру сертифікації (ЦС), потрібно спочатку створити запит на підпис сертифіката (CSR). CSR включає в себе відкритий ключ і деякі додаткові дані. При підписи ці дані додаються в сертифікат.

Щоб згенерувати запит на підпис сертифіката, потрібно надати дані про сертифікат. Зокрема важливо правильно заповнити поле Common Name (CN) в розділі Distinguised Name, в якому потрібно вказати FQDN хоста, для якого призначається сертифікат. Щоб обійти інтерактивні підказки, можна передати всі запитувані дані через командний рядок.

Інші поля в розділі Distinguised Name запитують дані про організацію або компанії. Якщо ви замовляєте сертифікат в ЦС, ці поля, як правило, потрібно обов'язково заповнити.

Запит на підпис сертифіката має такий вигляд:

---
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: New York
Locality Name (eg, city) []: Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Brooklyn Company
Organizational Unit Name (eg, section) []: Technology Division
Common Name (e.g. server FQDN or YOUR name) []: examplebrooklyn.com
Email Address []:

Щоб відповісти на запити CSR в неінтерактивному режимі, додайте в команду опцію -subj, наприклад:

-subj "/ C = US / ST = New York / L = Brooklyn / O = Example Brooklyn Company / CN = examplebrooklyn.com"

Ознайомившись із запитами на підпис сертифіката, ви можете перейти до будь-якого іншого розділу керівництва.

Генерування запиту на підпис сертифіката

Генерування закритого ключа і запиту

Цей метод дозволяє вам підписати сертифікат в ЦС і захистити веб-сервер Apache або Nginx за допомогою HTTPS. Згенерований запит на підпис можна відправити в ЦС, щоб отримати підписаний сертифікат. Якщо ЦС підтримує SHA-2, додайте опцію -sha256.

Наступна команда створить 2048-бітний закритий ключ (domain.key) і CSR (domain.csr):

openssl req \
-newkey rsa: 2048 -nodes -keyout domain.key \
-out domain.csr

Заповніть поля в запиті на підпис.

Опція -newkey rsa: 2048 створить 2048-бітний RSA-ключ. Опція -nodes відключає пароль для закритого ключа.

Генерування запиту для існуючого закритого ключа

Якщо у вас вже є закритий ключ, але немає сертифіката, ви можете згенерувати запит для цього ключа.

Наступна команда створить запит сертифіката (domain.csr) для існуючого ключа (domain.key):

openssl req \
-key domain.key \
-new -out domain.csr

Дайте відповідь на запити програми, щоб продовжити. Опція -new вказує, що запит потрібно згенерувати.

Генерування запиту для існуючого сертифіката і ключа

Цей метод дозволяє оновити існуючий сертифікат, якщо оригінальний запит на підпис сертифіката був загублений.

Наступна команда створить запит (domain.csr) на основі існуючого сертифіката (domain.crt) і закритого ключа (domain.key):

openssl x509 \
-in domain.crt \
-signkey domain.key \
-x509toreq -out domain.csr

Опція -x509toreq створить сертифікат X509.

Генерування SSL-сертифіката

Якщо ви хочете захистити свій сервіс, але не хочете підписувати його в ЦС, ви можете створити і підписати сертифікат самостійно.

Такі сертифікати називаються самоподпісанного.

По суті, самоподпісанний сертифікат - це сертифікат, підписаний своїм власним закритим ключем. Такі сертифікати теж шифрують з'єднання, однак вони не підтверджують автентичності сайту, тому користувачі, які відкривають сайт, побачать попередження.

Якщо вам не потрібно підтверджувати справжність сайту, ви можете спокійно використовувати самоподпісанного сертифікати.

Генерування самоподпісанного сертифіката

Цей метод дозволяє захистити веб-сервер Apache або Nginx за допомогою HTTPS.

Наступна команда створить 2048-бітний закритий ключ (domain.key) і CSR (domain.csr):

openssl req \
-newkey rsa: 2048 -nodes -keyout domain.key \
-x509 -days 365 -out domain.crt

Заповніть запит на підпис.

Опція -x509 створює самоподпісанний сертифікат. Опція -days 365 задає термін дії сертифіката в днях.

Створення сертифіката для існуючого закритого ключа

Якщо у вас вже є закритий ключ, але немає сертифіката, ви можете згенерувати сертифікат для цього ключа.

Наступна команда створить сертифікат (domain.csr) для існуючого ключа (domain.key):

openssl req \
-key domain.key \
-new \
-x509 -days 365 -out domain.crt

Дайте відповідь на запити програми, щоб продовжити.

  • Опція -x509 створює самоподпісанний сертифікат. Опція -days 365 задає термін дії сертифіката в днях.
  • Опція -new запускає запит даних для створення CSR.

Генерування запиту для існуючого сертифіката і ключа

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

Наступна команда створить сертифікат (domain.crt) на основі існуючого запиту (domain.csr) і закритого ключа (domain.key):

openssl x509 \
-signkey domain.key \
-in domain.csr \
-req -days 365 -out domain.crt

Опція -days 365 задає термін дії сертифіката в днях.

openssl req -text -noout -verify -in domain.csr

openssl x509 -text -noout -in domain.crt

Перевірка підпису сертифіката

Щоб переконатися, що сертифікат був підписаний в ЦС, введіть:

openssl verify -verbose -CAFile ca.crt domain.crt

закриті ключі

Створення закритого ключа

Щоб створити закритий 2048-бітний ключ, захищений паролем, введіть:

openssl genrsa -des3 -out domain.key 2048

За запитом введіть пароль, щоб продовжити.

Перевірка закритого ключа

Ця команда підтвердить валідність закритого ключа:

openssl rsa -check -in domain.key

Збіг ключа з сертифікатом і запитом

Ця команда дозволяє дізнатися, чи стосується закритий ключ (domain.key) до того чи іншого сертифікату (domain.crt) і запитом (domain.csr):

openssl rsa -noout -modulus -in domain.key | openssl md5
openssl x509 -noout -modulus -in domain.crt | openssl md5
openssl req -noout -modulus -in domain.csr | openssl md5

Якщо команди повернули однаковий висновок, то, швидше за все, цей ключ, запит і сертифікат пов'язані.

Шифрування закритого ключа

Наступна команда візьме незашифрований ключ (unencrypted.key) і зашифрує його (encrypted.key):

openssl rsa -des3 \
-in unencrypted.key \
-out encrypted.key

Введіть пароль, щоб зашифрувати ключ.

Дешифрування закритого ключа

Ця команда може розшифрувати зашифрований ключ:

openssl rsa \
-in encrypted.key \
-out decrypted.key
Enter the pass phrase for the encrypted

Введіть пароль, щоб розшифрувати ключ.

формати сертифікатів

До цього в керівництві розглядалися тільки сертифікати X.509 з кодуванням ASCII PEM. Однак існує безліч інших форматів. Деякі формати дозволяють об'єднати компоненти - ключ, запит, сертифікат - в один файл.

Конвертація PEM в DER

Щоб конвертувати PEM в DER, використовуйте таку команду:

openssl x509 \
-in domain.crt \
-outform der -out domain.der

Формат DER зазвичай використовує Java.

Конвертація DER в PEM

Для цього введіть:

openssl x509 \
-inform der -in domain.der \
-out domain.crt

Конвертація PEM в PKCS7

Щоб додати сертифікати PEM (domain.crt і ca-chain.crt) в файл PKCS7 (domain.p7b), введіть:

openssl crl2pkcs7 -nocrl \
-certfile domain.crt \
-certfile ca-chain.crt \
-out domain.p7b

Файли PKCS7 (також відомі як P7B) часто використовуються в Java Keystores і Microsoft IIS (Windows).

Конвертація to PKCS7 в PEM

Щоб конвертувати PKCS7 в PEM, введіть:

openssl pkcs7 \
-in domain.p7b \
-print_certs -out domain.crt

Зверніть увагу: файл PKCS7 містить багато компонентів, а саме сертифікат і проміжний сертифікат ЦС.

Конвертація PEM в PKCS12

Наступна команда дозволяє об'єднати закритий ключ і сертифікат в файл PKCS12.

openssl pkcs12 \
-inkey domain.key \
-in domain.crt \
-export -out domain.pfx

Програма запросить пароль. Файл PKCS12 дозволяє об'єднати кілька сертифікатів в один PEM-файл (domain.crt).

Файли PKCS12 (або PFX) зазвичай використовуються для переміщення наборів сертифікатів в Micrsoft IIS (Windows).

Конвертація PKCS12 в PEM

Щоб конвертувати файл PKCS12 в формат PEM, введіть:

openssl pkcs12 \
-in domain.pfx \
-nodes -out domain.combined.crt

Якщо у файлі PKCS12 було кілька об'єктів (наприклад, ключ і сертифікат), всі вони перемістяться в файл PEM.

версії OpenSSL

Щоб перевірити версію OpenSSL, використовуйте команду openssl version.

Наступна команда виведе версію OpenSSL і всі параметри, з якими вона була скомпільована.

openssl version -a

У цьому посібнику використовується бінарний файл OpenSSL з наступними подробицями:

Тепер ви знайомі з основними методами і командами OpenSSL.