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

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

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

2 ответа

Классическим справочником для этого является этот 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)

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

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

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

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

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

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

Другие вопросы по тегам