OpenSSL — это криптографическая библиотека с открытым исходным кодом, которая включает в себя множество команд, используемых в протоколе TLS и инфраструктуре открытых ключей. OpenSSL была выпущена в 1998 году и доступна для систем Windows, Linux, macOS и BSD. Команда OpenSSL поможет вам выполнять различные задачи, включая запрос на подпись сертификата (CSR), генерацию закрытых ключей и сертификацию SSL.
OpenSSL важна, поскольку она обеспечивает правильное внедрение SSL. Получение SSL правильным способом имеет решающее значение для безопасности вашего сайта. Более того, Google, являющийся ведущей поисковой системой, отдает приоритет сайтам с внедренными SSL-сертификатами. Некоторые браузеры, такие как Chrome и Firefox, могут пометить ваш сайт как небезопасный, если у вас нет надлежащего SSL-сертификата. Таким образом, крайне важно передавать трафик вашего сайта по зашифрованному HTTPS протоколу.
Прежде всего
Это руководство представляет собой шпаргалку, содержащую некоторые, но, возможно, не все команды OpenSSL, которые вы можете использовать в повседневных сценариях.
В первой части объясняется все, что вам нужно знать о запросах на подпись сертификатов (CSR). Однако, если вы уже знакомы с этим, вы можете перейти к любому другому разделу, соответствующему вашим целям. Каждый раздел содержит фрагмент командной строки для выполнения того, что указано в подзаголовке.
Давайте начнем!
Раздел 1: Понимание запросов на подпись сертификатов (CSR)
Запрос на подпись сертификата является обязательным условием при получении SSL-сертификата от центра сертификации (CA). CSR включает в себя открытый ключ пары ключей и некоторую дополнительную информацию. Вам необходимо вставить их в сертификат в процессе подписи.
Во время генерации CSR вам предлагается предоставить идентификационную информацию, известную как Distinguished Name (DN). DN содержит поля, необходимые для сертификата, такие как Common Name (CN), которое представляет собой точное полное доменное имя (FQDN) хоста, который будет использовать сертификат. Другие поля DN предназначены для дополнительной информации, такой как страна, штат, название местности, а также название организации или компании, если вы генерируете сертификаты специально для своего бизнеса. Вы можете пропустить запросы, предоставив информацию из файла или через командную строку.
Посмотрите на пример запроса информации CSR на скриншоте ниже:
|
1 2 3 4 5 6 7 |
Страна Название (2 буквенный код) [AU]:CH Штат или Провинция Название (полное название) [Some-State]:Zürich Местность Название (например, город) []:Old Town Организация Название (например, компания) [Internet Widgits Pty Ltd]:Example Cloudsigma Компания Подразделение организации Название (например, отдел) []:Cloud Technology Общее имя (e.g. сервер FQDN или ВАШЕ имя) []:cloudsigma.com Электронная почта []:info@cloudsigma.com |
Вы можете предоставить информацию в виде однострочной команды, чтобы избежать запросов, добавив флаг -subj, как показано ниже, и указав информацию для полей:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Приведенная выше команда принимает ту же информацию, которая отображается в примере блока кода для запросов информации CSR.
Раздел 2: Генерация запросов на подпись сертификатов
В этом разделе мы рассмотрим команды OpenSSL, которые можно использовать для генерации CSR и закрытых ключей. CSR необходимы для запроса SSL-сертификатов у центра сертификации (CA).
Генерация закрытого ключа и запроса на подпись сертификата
Вы можете использовать этот метод, если хотите, чтобы центр сертификации выдал SSL-сертификат для защиты вашего Apache или Nginx сервер для обслуживания трафика по протоколу HTTPS, т. е. HTTP с TLS. CSR, созданный с помощью этой команды, можно отправить в CA (центр сертификации) для запроса SSL-сертификата, подписанного CA. Вы можете воспользоваться нашими подробными руководствами по настройке ваших серверов Apache или Nginx на Ubuntu.
Введите следующую команду в терминале, чтобы сгенерировать 2048-битный закрытый ключ (domain.key) и CSR (domain.csr) с нуля:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
Ответьте на запросы, указав конкретную информацию для CSR. При желании вы можете добавить к команде флаг -subj, чтобы избежать появления запросов:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Флаг -newkey rsa:2048 указывает, что ключ должен быть сгенерирован с использованием 2048-битного алгоритма RSA. Флаг -nodes указывает на отсутствие шифрования парольной фразой для закрытого ключа. Также подразумевается, но не включена опция -new, указывающая на генерацию нового CSR.
Генерация запроса на подпись сертификата из существующего закрытого ключа
Если у вас уже есть закрытый ключ, вы можете использовать этот метод для генерации CSR. Затем вы будете использовать его для запроса SSL-сертификата в CA. Введите следующую команду, чтобы сгенерировать новый CSR (domain.csr) с использованием существующего закрытого ключа (domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
Ответьте на запросы, указав конкретную информацию для CSR. При желании вы можете добавить флаг -subj к команде, чтобы избежать появления запросов:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Флаг -key указывает существующий закрытый ключ (domain.key), который будет использоваться для генерации нового CSR. Флаг -new указывает на то, что генерируется новый CSR.
Генерация запроса на подпись сертификата из существующего сертификата и закрытого ключа
Если у вас уже есть существующий сертификат, который вы хотите использовать для генерации CSR, вы можете воспользоваться этим методом. Этот метод может быть полезен, если вы или ваш CA потеряли исходный CSR, и вам нужно сгенерировать его, используя ранее введенную информацию CSR, без необходимости вводить ее заново. Команда извлекает информацию из существующего сертификата. Введите следующую команду в терминале, чтобы создать новый CSR (domain.csr) с использованием существующего сертификата (domain.crt) и существующего закрытого ключа (domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
Опция -x509toreq указывает на то, что вы используете сертификат X509 для генерации CSR.
Раздел 3: Генерация SSL-сертификатов
В некоторых ситуациях вам может потребоваться использовать SSL-сертификат без лишних хлопот, связанных с получением сертификата, подписанного CA. В этом разделе объясняется, как вы можете подписать свои собственные сертификаты. Это легитимно и бесплатно. Такие сертификаты называются самоподписанными сертификатами, и они довольно распространены.
Самоподписанный сертификат подписывается собственным закрытым ключом. Как самоподписанные, так и подписанные CA сертификаты одинаково хорошо работают для шифрования данных и трафика веб-сайта. Однако при использовании самоподписанных сертификатов пользователи обычно получают предупреждение в своих браузерах о том, что сертификат не является доверенным. Таким образом, вы можете использовать самоподписанные сертификаты для веб-сайтов, которые не обмениваются конфиденциальной информацией с пользователями, или на серверах, не предназначенных для промышленной эксплуатации. Ниже приведены команды OpenSSL, которые можно использовать для генерации самоподписанных сертификатов.
- Генерация самоподписанного сертификата
Вы можете использовать этот метод для генерации SSL-сертификата для защиты вашего сервера Apache или Nginx. Это обеспечит передачу трафика по протоколу HTTPS или HTTP через TLS без обращения к центру сертификации (CA) для подписи сертификата:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
Ответьте на запросы, указав конкретную информацию о вашем CSR. При желании вы можете добавить флаг -subj к команде, чтобы избежать появления запросов:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Флаг -x509 указывает на создание самоподписанного сертификата. Параметр -days 365 определяет количество дней, в течение которых сертификат будет действителен. В данном случае это 365 дней. Вы также можете выбрать другое количество дней. Команда генерирует временный CSR для хранения информации, которую вы должны связать с сертификатом.
- Генерация самоподписанного сертификата из существующего закрытого ключа
Этот метод поможет вам сгенерировать самоподписанный сертификат из уже существующего закрытого ключа. Введите следующую команду для генерации самоподписанного сертификата (domain.crt) с использованием существующего закрытого ключа (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
Ответьте на запросы, указав конкретную информацию о вашем CSR. При желании вы можете добавить флаг -subj к команде, чтобы избежать появления запросов:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Флаг -x509 указывает на создание самоподписанного сертификата. Параметр -days 365 определяет количество дней, в течение которых сертификат будет действителен. В данном случае это 365 дней. Вы также можете выбрать другое количество дней. Параметр -new инициирует запрос информации для CSR.
Раздел 4: Просмотр сертификатов
Сертификаты и файлы CSR кодируются и сохраняются с расширением .pem. Оно расшифровывается как Privacy-Enhanced Mail. Это формат файлов для хранения и отправки криптографических ключей, сертификатов и других важных данных. Файлы PEM не предназначены для удобного чтения человеком. В этом разделе вы найдете команды, которые можно использовать для просмотра записей из закодированных файлов PEM.
- Просмотр файлов CSR
Введите следующую команду для просмотра и проверки содержимого CSR (domain.csr) в вашем терминале:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Например, приведенная выше команда может вывести что-то вроде этого:

- Просмотр записей сертификата
Введите следующую команду для просмотра содержимого сертификата (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
Приведенная выше команда может вывести что-то вроде этого:

- Проверка того, что сертификат был подписан центром сертификации
Чтобы проверить, был ли сертификат (domain.crt) подписан определенным сертификатом CA (ca.crt), введите следующую команду:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
Раздел 5: Закрытые ключи
Если вы ищете команды OpenSSL, необходимые для создания и проверки закрытых ключей, этот раздел для вас.
- Создание закрытого ключа
Чтобы создать защищенный паролем 2048-битный закрытый ключ (domain.key), введите следующую команду в вашем терминале:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
Команда запросит пароль для завершения процесса. См. скриншот ниже:

- Проверка закрытого ключа
Чтобы проверить действительность закрытого ключа (domain.key), введите следующую команду в вашем терминале:
|
1 |
openssl rsa -check -in domain.key |
Затем вам потребуется ввести пароль. Если закрытый ключ зашифрован и вы введете правильную парольную фразу, незашифрованный ключ отобразится в терминале. См. скриншот ниже:

- Проверка соответствия закрытого ключа сертификату и CSR
Если вы хотите проверить, соответствует ли закрытый ключ (domain.key) сертификату (domain.crt) и CSR (domain.csr), введите следующие команды в терминале:
|
1 2 3 |
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 |
Если вы заметили, что вывод вышеуказанных команд идентичен, то, возможно, закрытый ключ, сертификат и CSR связаны между собой.
- Шифрование закрытого ключа
Если у вас есть незашифрованный закрытый ключ (unencrypted.key) и вы хотите получить зашифрованную версию ключа (encrypted.key), введите следующую команду в терминале:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
Команда запросит парольную фразу для шифрования закрытого ключа.
- Дешифрование закрытого ключа
Если у вас есть зашифрованный закрытый ключ (encrypted.key) и вы хотите получить его расшифрованную версию (decrypted.key), введите следующую команду в терминале:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
Команда запросит парольную фразу для зашифрованного ключа. Если вы введете правильную парольную фразу, он будет расшифрован. Вывод будет сохранен в decrypted.key.
Раздел 6: Конвертирование форматов сертификатов
Вы могли заметить, что до сих пор мы работали с сертификатами X.509, закодированными в формате ASCII PEM. Хотя в этом нет ничего плохого, существует множество других типов кодирования и контейнеров сертификатов, которые вы можете использовать. В некоторых приложениях вы можете предпочесть одни форматы другим. Более того, некоторые форматы могут содержать несколько элементов, таких как закрытый ключ, CSR и подписанный центром сертификации (CA) сертификат, в одном файле. Вы также можете использовать OpenSSL для конвертирования между различными форматами сертификатов. Читайте далее, чтобы узнать о некоторых командах OpenSSL для конвертирования форматов сертификатов.
- Конвертирование PEM в DER
DER (Distinguished Encoding Rules) — это двоичное кодирование для сертификатов X.509 и закрытых ключей. Чтобы конвертировать сертификат в кодировке PEM (domain.crt) в сертификат в кодировке DER (domain.der), введите следующую команду:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
Большинство вариантов использования формата кодирования DER вы найдете в языке программирования Java. Следуйте этому руководству для быстрой настройки Java на вашем сервере Ubuntu.
- Конвертирование DER в PEM
To convert a DER-encoded certificate (domain.der) to a PEM certificate (domain.crt), enter the following command:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- Конвертирование PEM в PKCS7
Возможно, вы захотите добавить сертификаты PEM, например, domain.crt и ca-chain.crt в файл PKCS7 (domain.p7b). Вот команда для этого:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
Вы можете использовать параметр -certfile несколько раз, чтобы указать сертификаты для добавления в файл PKCS7. Файлы PKCS7 в основном актуальны для хранилищ ключей Java (Java Key stores) и Microsoft IIS. Также известные как файлы P7B, они представляют собой файлы ASCII, которые могут содержать сертификаты и сертификаты, подписанные CA.
- Конвертирование PKCS7 в PEM
Чтобы конвертировать файл PKCS7 (domain.p7b) в файл в кодировке PEM (domain.crt), введите следующую команду в терминале:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- Конвертирование PEM в PKCS12
Чтобы объединить закрытый ключ (domain.key) и сертификат (domain.crt) в PKCS12 файл (domain.pfx), введите следующую команду:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
Команда предложит вам ввести пароли для экспорта, которые при желании можно оставить пустыми. Вы можете объединить несколько сертификатов в файл PKCS12, объединив их в один файл PEM (domain.crt). PKCS12 также известен как PFX и в основном используется в Microsoft IIS.
- Преобразование PKCS12 в PEM
Чтобы преобразовать файл PKCS12 (domain.pfx) в формат с кодировкой PEM (domain.combined.crt), введите следующую команду:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
Файл PEM, созданный указанной выше командой, содержит все элементы, которые находились в PKCS12.
Раздел 7: Проверка версии OpenSSL
Версия любого используемого вами программного обеспечения может влиять на возможности запускаемых вами приложений. Следовательно, необходимо установить версию. То же самое относится и к OpenSSL. Некоторые параметры командной строки могут отсутствовать в одной версии и присутствовать в другой. Чтобы просмотреть версию OpenSSL, которую вы используете, введите следующую команду:
|
1 |
openssl version -a |
Ниже приведен вывод, который мы получили при запуске вышеуказанной команды во время создания этого руководства:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Дек 2020 собрано в: Суб Дек 19 15:39:47 2020 UTC платформа: linux-x86_64 опции: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) компилятор: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Инициализация источник: ОС-специфичный |
Ниже вы можете найти фактический скриншот:

Заключение
В этом руководстве мы объяснили, что такое OpenSSL, рассмотрели запросы на подпись сертификатов (CSR) и некоторые важные команды OpenSSL, которые вы можете использовать в своей серверной среде.
Мы упустили какую-то важную команду или у вас возникли проблемы с какой-либо из команд при настройке сервера на CloudSigma? Не стесняйтесь обращаться в нашу круглосуточную службу поддержки клиентов в чате в реальном времени, чтобы обсудить это.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.