Как узнать, был ли сертификат OpenSSL создан определенным закрытым ключом?

Как узнать, был ли сертификат OpenSSL создан определенным закрытым ключом?

У меня есть сертификат OpenSSl. Мне также нужен закрытый ключ. Мне сказали, что он находится где-то на сервере, и это правда, я нашел несколько файлов ключей SSL.

Прежде чем я попробую все варианты методом перебора: есть ли способ узнать на терминале, использовался ли закрытый ключ для создания сертификата?

решение1

Классическая ссылка на это:этот FAQв онлайн-документации Apache.

В этом документе md5используется модуль, поскольку

Поскольку публичный показатель степени обычно равен 65537 и сложно визуально проверить, что длинные модули одинаковы, можно использовать следующий подход:

Это дает:

$ openssl rsa -noout -modulus -in key.pem.decrypted | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

$ openssl x509 -noout -modulus -in crt.pem | openssl md5
(stdin)= 9fxxfoobar558d9xx0045a89467d2bxx

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

$ diff \ 
    <(openssl x509 -noout -modulus -in cert.pem) \
    <(openssl rsa -noout -modulus -in key.pem.decrypted)

Если вывод пуст, закрытый ключ соответствует сертификату.

Это просто более удобный способ сравнения строк, чем тот, что приведен в ответе Эндрю Шульмана, который, конечно, тоже верен.

Еще одна ссылказдесь.

решение2

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

openssl rsa -in KEYFILE -pubout
openssl x509 -in CERTFILE -pubkey -noout

Сертификат и закрытый ключ совпадают только в том случае, если открытые ключи идентичны.

Связанный контент