5

Кто-то дал мне сертификат и пару закрытых / открытых ключей и сказал: «Скажите, какой закрытый ключ соответствует сертификату». Как я могу это сделать?

Сертификат имеет формат PKCS # 7 и начинается с:

-----BEGIN CERTIFICATE-----

Все ключи выглядят по-разному. Некоторые из них на самом деле являются открытыми ключами - некоторые я не уверен. Они имеют разные расширения и начинаются с разных строк, например, таких:

-----BEGIN PRIVATE KEY-----
-----BEGIN EC PARAMETERS-----
-----BEGIN RSA PRIVATE KEY-----

Любая помощь? Я думаю, что я могу использовать инструмент командной строки openssl.

3 ответа3

6

На основании команд , приведенных в Верификация , что закрытый ключ Спички сертификата (первоначально из The Apache SSL FAQ) , что можно построить небольшой Баш скрипт , который перебирает все *.key файлов в папке и сравнивающий модуль часть сертификата с каждым ключ сразу.

Мой findkey.sh принимает имя файла сертификата в качестве аргумента командной строки и печатает совпадения.

#!/bin/bash
cert=$1
crthash=$(openssl x509 -noout -modulus -in "$cert" | openssl md5)
echo $cert $crthash

for file in *.key; do
    [ -e "$file" ] || continue
    keyhash=$(openssl rsa -noout -modulus -in "$file" | openssl md5)
    if [ "$keyhash" = "$crthash" ]
    then
        keytest==$(openssl rsa -in "$file" -check -noout)
        echo $file $keyhash $keytest
    fi
done

Я создал несколько пар ключей testN.key / testN.crt и протестировал свой скрипт, который, похоже, выполняет свою работу:

./findkey.sh test4.crt
test4.crt (stdin)= 8e30eac60ff8d3c5b1c9bee7e79774bb
test4.key (stdin)= 8e30eac60ff8d3c5b1c9bee7e79774bb =RSA key ok

Неважно, есть ли среди ключей какие-либо сертификаты (или запросы сертификатов), потому что даже если неправильно *.key openssl rsa -modulus не unable to load Private Key ошибку закрытого ключа вместо модуля для сертификата. Кроме того, в конце строки указывается, является ли ключ непротиворечивым, чтобы предотвратить использование поддельных закрытых ключей. Вам нужен только этот скрипт и OpenSSL установлен.

0

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

https://www.sslshopper.com/certificate-key-matcher.html

Более того, если вы хотите использовать инструмент командной строки openssl, для чтения рекомендуется следующее:

0

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

Если какое-либо из этих действий выполнено успешно, то вы знаете, что у вас есть совпадение; эти операции по определению могут быть успешными только с правильным ключом, независимо от используемого алгоритма. Обратите внимание, что вы должны убедиться, что вы не подписываете и не шифруете что-либо конфиденциальное Лучше выкинь результат в итоге.

Вы должны быть уверены, что используете правильную операцию для схемы, используемой во время дешифрования / проверки (но я полагаю, что это дано). Кстати, ECDSA можно использовать только для генерации / подписи подписи.

Единственный случай, который описан выше, не является хорошей идеей, когда у вас есть юридически обязательные подписи или счетчик для использования закрытого ключа (например, на аппаратном устройстве).


Обратите внимание, что для правильного шифрования / проверки вам необходимо доверять открытому ключу. Это означает, что вам необходимо проверить сертификат и подпись на сертификате.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .