Вопрос или проблема
Я следую этому уроку от PKI -> https://pki-tutorial.readthedocs.io/en/latest/simple/index.html
У меня есть вопрос: Как команда создания сертификата определяет, какой закрытый ключ (вместе с его местоположением) будет использоваться для подписи сертификата?
В первой команде создается CSR (в который помещается открытый ключ), а закрытый ключ хранится по адресу -> ca/root-ca/private/root-ca.key
openssl req -new \
-config etc/root-ca.conf \
-out ca/root-ca.csr \
-keyout ca/root-ca/private/root-ca.key
Во второй команде сертификат создается на основе вышеуказанного CSR.
Здесь имя и путь закрытого ключа, который подписывает сертификат, нигде не упоминаются.
openssl ca -selfsign \
-config etc/root-ca.conf \
-in ca/root-ca.csr \
-out ca/root-ca.crt \
-extensions root_ca_ext
Поэтому я не уверен, как эта команда создания сертификата определяет правильный закрытый ключ вместе с его местоположением.
Примечание: Местоположение закрытого ключа не указано не только для команды создания самоподписанного сертификата Root; оно также не указано при создании других сертификатов (сертификат подписи, почтовый сертификат и сертификат TLS).
Ответ или решение
Конечно! Давайте рассмотрим, как OpenSSL обрабатывает процесс создания сертификата и использует закрытый ключ.
При создании сертификата с помощью OpenSSL с использованием команды openssl ca
или openssl req
, действительно, вы не указываете непосредственно закрытый ключ в команде. Однако закрытый ключ определяется конфигурацией, установленной в вашем файле конфигурации OpenSSL, который в вашем случае указан как etc/root-ca.conf
.
Как работает ссылка на закрытый ключ
-
Файл конфигурации: В файле конфигурации
etc/root-ca.conf
содержатся параметры, которые OpenSSL использует для выполнения различных операций. В этом файле обычно есть раздел, который указывает, где расположен закрытый ключ Центра Сертификации (ЦС) и другие связанные параметры.Пример секции файла конфигурации может выглядеть следующим образом:
[ CA_default ] dir = /path/to/your/ca database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/certs/ca.crt private_key = $dir/private/ca.key
Здесь секция
private_key
указывает на путь к закрытому ключу, который будет использоваться для подписания сертификатов. -
Использование команды
openssl ca
: Когда вы используете командуopenssl ca
, OpenSSL автоматически ищет закрытый ключ на основании этой конфигурации. Поэтому в команде на создание сертификата вы не указываете закрытый ключ напрямую, так как программа сама обращается к настройкам в конфигурационном файле.
Пример
В вашем примере команды:
openssl ca -selfsign \
-config etc/root-ca.conf \
-in ca/root-ca.csr \
-out ca/root-ca.crt \
-extensions root_ca_ext
OpenSSL считывает файл конфигурации etc/root-ca.conf
, находит секцию для настроек ЦС (например, [ CA_default ]
), и извлекает путь к закрытому ключу из параметра private_key
.
Вывод
Таким образом, чтобы самостоятельно убедиться, что OpenSSL использует правильный закрытый ключ, вам нужно проверить ваш файл конфигурации. Убедитесь, что путь к закрытому ключу корректен и указывает на файл, соответствующий вашему Центру Сертификации. Это позволяет OpenSSL автоматически находить и использовать закрытый ключ по умолчанию, что упрощает ввод команд для создания и подписания сертификатов.
Если у вас возникнут дополнительные вопросы или потребуется более детальная информация, не стесняйтесь обращаться!