Назад в блог

Основы OpenSSL: работа с закрытыми ключами, запросами на подпись сертификатов и SSL-сертификатами

Основы OpenSSL: работа с закрытыми ключами, запросами на подпись сертификатов и SSL-сертификатами

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 на скриншоте ниже:

Вы можете предоставить информацию в виде однострочной команды, чтобы избежать запросов, добавив флаг -subj, как показано ниже, и указав информацию для полей:

Приведенная выше команда принимает ту же информацию, которая отображается в примере блока кода для запросов информации 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) с нуля:

Ответьте на запросы, указав конкретную информацию для CSR. При желании вы можете добавить к команде флаг -subj, чтобы избежать появления запросов:

Флаг -newkey rsa:2048 указывает, что ключ должен быть сгенерирован с использованием 2048-битного алгоритма RSA. Флаг -nodes указывает на отсутствие шифрования парольной фразой для закрытого ключа. Также подразумевается, но не включена опция -new, указывающая на генерацию нового CSR.

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

Если у вас уже есть закрытый ключ, вы можете использовать этот метод для генерации CSR. Затем вы будете использовать его для запроса SSL-сертификата в CA. Введите следующую команду, чтобы сгенерировать новый CSR (domain.csr) с использованием существующего закрытого ключа (domain.key):

Ответьте на запросы, указав конкретную информацию для CSR. При желании вы можете добавить флаг -subj к команде, чтобы избежать появления запросов:

Флаг -key указывает существующий закрытый ключ (domain.key), который будет использоваться для генерации нового CSR. Флаг -new указывает на то, что генерируется новый CSR.

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

Если у вас уже есть существующий сертификат, который вы хотите использовать для генерации CSR, вы можете воспользоваться этим методом. Этот метод может быть полезен, если вы или ваш CA потеряли исходный CSR, и вам нужно сгенерировать его, используя ранее введенную информацию CSR, без необходимости вводить ее заново. Команда извлекает информацию из существующего сертификата. Введите следующую команду в терминале, чтобы создать новый CSR (domain.csr) с использованием существующего сертификата (domain.crt) и существующего закрытого ключа (domain.key):

Опция -x509toreq указывает на то, что вы используете сертификат X509 для генерации CSR.

Раздел 3: Генерация SSL-сертификатов

В некоторых ситуациях вам может потребоваться использовать SSL-сертификат без лишних хлопот, связанных с получением сертификата, подписанного CA. В этом разделе объясняется, как вы можете подписать свои собственные сертификаты. Это легитимно и бесплатно. Такие сертификаты называются самоподписанными сертификатами, и они довольно распространены.

Самоподписанный сертификат подписывается собственным закрытым ключом. Как самоподписанные, так и подписанные CA сертификаты одинаково хорошо работают для шифрования данных и трафика веб-сайта. Однако при использовании самоподписанных сертификатов пользователи обычно получают предупреждение в своих браузерах о том, что сертификат не является доверенным. Таким образом, вы можете использовать самоподписанные сертификаты для веб-сайтов, которые не обмениваются конфиденциальной информацией с пользователями, или на серверах, не предназначенных для промышленной эксплуатации. Ниже приведены команды OpenSSL, которые можно использовать для генерации самоподписанных сертификатов.

  • Генерация самоподписанного сертификата

Вы можете использовать этот метод для генерации SSL-сертификата для защиты вашего сервера Apache или Nginx. Это обеспечит передачу трафика по протоколу HTTPS или HTTP через TLS без обращения к центру сертификации (CA) для подписи сертификата:

Ответьте на запросы, указав конкретную информацию о вашем CSR. При желании вы можете добавить флаг -subj к команде, чтобы избежать появления запросов:

Флаг -x509 указывает на создание самоподписанного сертификата. Параметр -days 365 определяет количество дней, в течение которых сертификат будет действителен. В данном случае это 365 дней. Вы также можете выбрать другое количество дней. Команда генерирует временный CSR для хранения информации, которую вы должны связать с сертификатом.

  • Генерация самоподписанного сертификата из существующего закрытого ключа

Этот метод поможет вам сгенерировать самоподписанный сертификат из уже существующего закрытого ключа. Введите следующую команду для генерации самоподписанного сертификата (domain.crt) с использованием существующего закрытого ключа (domain.key):

Ответьте на запросы, указав конкретную информацию о вашем CSR. При желании вы можете добавить флаг -subj к команде, чтобы избежать появления запросов:

Флаг -x509 указывает на создание самоподписанного сертификата. Параметр -days 365 определяет количество дней, в течение которых сертификат будет действителен. В данном случае это 365 дней. Вы также можете выбрать другое количество дней. Параметр -new инициирует запрос информации для CSR.

Раздел 4: Просмотр сертификатов

Сертификаты и файлы CSR кодируются и сохраняются с расширением .pem. Оно расшифровывается как Privacy-Enhanced Mail. Это формат файлов для хранения и отправки криптографических ключей, сертификатов и других важных данных. Файлы PEM не предназначены для удобного чтения человеком. В этом разделе вы найдете команды, которые можно использовать для просмотра записей из закодированных файлов PEM.

  • Просмотр файлов CSR

Введите следующую команду для просмотра и проверки содержимого CSR (domain.csr) в вашем терминале:

Например, приведенная выше команда может вывести что-то вроде этого:

Viewing CSR files

  • Просмотр записей сертификата

Введите следующую команду для просмотра содержимого сертификата (domain.crt):

Приведенная выше команда может вывести что-то вроде этого:

OpenSSL

  • Проверка того, что сертификат был подписан центром сертификации

Чтобы проверить, был ли сертификат (domain.crt) подписан определенным сертификатом CA (ca.crt), введите следующую команду:

 

Раздел 5: Закрытые ключи

Если вы ищете команды OpenSSL, необходимые для создания и проверки закрытых ключей, этот раздел для вас.

  • Создание закрытого ключа

Чтобы создать защищенный паролем 2048-битный закрытый ключ (domain.key), введите следующую команду в вашем терминале:

Команда запросит пароль для завершения процесса. См. скриншот ниже:

Creating a Private Key

  • Проверка закрытого ключа

Чтобы проверить действительность закрытого ключа (domain.key), введите следующую команду в вашем терминале:

Затем вам потребуется ввести пароль. Если закрытый ключ зашифрован и вы введете правильную парольную фразу, незашифрованный ключ отобразится в терминале. См. скриншот ниже:

Verifying a Private Key

  • Проверка соответствия закрытого ключа сертификату и CSR

Если вы хотите проверить, соответствует ли закрытый ключ (domain.key) сертификату (domain.crt) и CSR (domain.csr), введите следующие команды в терминале:

Если вы заметили, что вывод вышеуказанных команд идентичен, то, возможно, закрытый ключ, сертификат и CSR связаны между собой.

  • Шифрование закрытого ключа

Если у вас есть незашифрованный закрытый ключ (unencrypted.key) и вы хотите получить зашифрованную версию ключа (encrypted.key), введите следующую команду в терминале:

Команда запросит парольную фразу для шифрования закрытого ключа.

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

Если у вас есть зашифрованный закрытый ключ (encrypted.key) и вы хотите получить его расшифрованную версию (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), введите следующую команду:

Большинство вариантов использования формата кодирования DER вы найдете в языке программирования Java.  Следуйте этому руководству для быстрой настройки Java на вашем сервере Ubuntu.

  • Конвертирование DER в PEM

To convert a DER-encoded certificate (domain.der) to a PEM certificate (domain.crt), enter the following command:

 

  • Конвертирование PEM в PKCS7

Возможно, вы захотите добавить сертификаты PEM, например, domain.crt и ca-chain.crt в файл PKCS7 (domain.p7b). Вот команда для этого:

Вы можете использовать параметр -certfile несколько раз, чтобы указать сертификаты для добавления в файл PKCS7. Файлы PKCS7 в основном актуальны для хранилищ ключей Java (Java Key stores) и Microsoft IIS. Также известные как файлы P7B, они представляют собой файлы ASCII, которые могут содержать сертификаты и сертификаты, подписанные CA.

  • Конвертирование PKCS7 в PEM

Чтобы конвертировать файл PKCS7 (domain.p7b) в файл в кодировке PEM (domain.crt), введите следующую команду в терминале:

 

  • Конвертирование PEM в PKCS12

Чтобы объединить закрытый ключ (domain.key) и сертификат (domain.crt) в PKCS12 файл (domain.pfx), введите следующую команду:

Команда предложит вам ввести пароли для экспорта, которые при желании можно оставить пустыми. Вы можете объединить несколько сертификатов в файл PKCS12, объединив их в один файл PEM (domain.crt). PKCS12 также известен как PFX и в основном используется в Microsoft IIS.

  • Преобразование PKCS12 в PEM

Чтобы преобразовать файл PKCS12 (domain.pfx) в формат с кодировкой PEM (domain.combined.crt), введите следующую команду:

Файл PEM, созданный указанной выше командой, содержит все элементы, которые находились в PKCS12.

Раздел 7: Проверка версии OpenSSL

Версия любого используемого вами программного обеспечения может влиять на возможности запускаемых вами приложений. Следовательно, необходимо установить версию. То же самое относится и к OpenSSL. Некоторые параметры командной строки могут отсутствовать в одной версии и присутствовать в другой. Чтобы просмотреть версию OpenSSL, которую вы используете, введите следующую команду:

Ниже приведен вывод, который мы получили при запуске вышеуказанной команды во время создания этого руководства:

Ниже вы можете найти фактический скриншот:

OpenSSL

Заключение

В этом руководстве мы объяснили, что такое OpenSSL, рассмотрели запросы на подпись сертификатов (CSR) и некоторые важные команды OpenSSL, которые вы можете использовать в своей серверной среде.

Мы упустили какую-то важную команду или у вас возникли проблемы с какой-либо из команд при настройке сервера на CloudSigma? Не стесняйтесь обращаться в нашу круглосуточную службу поддержки клиентов в чате в реальном времени, чтобы обсудить это.

Приятной работы!

author

Manpreet Singh

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.