2008-11-08 2 views
139

Есть ли простой способ проверить, что данный закрытый ключ соответствует данному открытому ключу? У меня есть несколько * .pub и несколько файлов * .key, и мне нужно проверить, с чего идти.Как вы тестируете открытую/приватную пару ключей DSA?

Опять же, это файлы паба/ключа, DSA.

Я действительно предпочитаю Однострочник какой-то ...

ответ

222

я нашел способ, который, кажется, работает лучше для меня:

ssh-keygen -y -f <private key file> 

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

+0

что это делает? Почему ssh? – sammiwei

+2

, вероятно, потому, что он использует keypairs для аутентификации ssh. – etarion

+2

В моем случае на центральном рабочем сервере имеется несколько десятков файлов id_rsa.pub.blahhost, и я не знал, какой из них соответствует одиночному 'id_rsa' частному ключу, и я настройка scree scrap, чтобы я мог переносить старые веб-сайты. Создание новой пары ключей не является опцией; У меня есть ключи, настроенные хорошо, и я не собираюсь это испортить. –

0

шифровать что-то с помощью открытого ключа, и посмотреть, что секретный ключ расшифровывает его.

Этот code project article не кто иной, как Джефф Этвуд, реализует упрощенную оболочку вокруг классов криптокоманды .NET. Предполагая, что эти ключи были созданы для использования с RSA, используйте асимметричный класс с открытым ключом для шифрования и то же самое с вашим личным ключом для дешифрования.

+0

Я что-то более простое. Скажем, оболочка - один вкладыш или тому подобное. Я нахожусь в linux и имею обычные вещи, такие как openssl. – Loki

+3

Это почти так же полезно, как добавление открытого ключа в файл authorized_keys и использование ssh для просмотра того, какой частный ключ работает. Метод работает, но это боль. –

12

Если у вас есть открытые ключи внутри сертификатов x.509, и предполагается, что они являются ключами RSA, то для каждого открытого ключа, сделать

openssl x509 -in certfile -modulus -noout 

Для каждого закрытого ключа, сделать

openssl rsa -in keyfile -modulus -noout 

Затем сопоставьте ключи по модулю.

45

Для ключей DSA используйте

openssl dsa -pubin -in dsa.pub -modulus -noout 

для печати открытых ключей, а затем

openssl dsa -in dsa.key -modulus -noout 

, чтобы отобразить открытые ключи, соответствующие закрытый ключ, а затем сравнить их.

6

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

+2

Вопрос заключается в том, как проверить, и устройство, на котором мы будем его проверять, может не иметь возможностей для создания нового. – ArmenB

48

Я всегда сравнить MD5 хеш модуля, используя следующие команды:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5 
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5 
CSR: openssl req -noout -modulus -in server.csr | openssl md5 

Если хэши совпадают, то эти два файла вместе.

+0

Не работает для ключей DSA – thomasrutter

-1

Просто используйте puttygen и загрузите в него свой секретный ключ. Предлагает различные варианты, например. экспорт открытого ключа.

+0

это не позволяет проверить частную ключевую пару – MatFiz

9

Проверка может быть проще с дифф:

diff <(ssh-keygen -y -f <private_key_file>) <public key file> 

Единственная странность в том, что разница ничего не говорит, если файлы одинаковы, так что вы будете только сказали, если в государственном и частном дону 't матч.

+2

Чтобы получить выход, если файлы совпадают: 'diff -s' – Roland

+0

Это отличный ответ. (1) 'diff -qs' возвращает простой« идентичный/не идентичный ответ ». (2) вы должны удалить комментарий в файле открытого ключа перед запуском diff. – emory

1

Все приведенные выше ответы предполагают, что данный секретный ключ - о том, что вы ничего не знаете и хотите узнать, соответствует ли он данному открытому ключу - HAS NO PASSPHRASE.Если закрытый ключ имеет парольную фразу, то оба

SSH-серийник -y -f PrivateKey

и

OpenSSL (РКА или DSA) -в PrivateKey -модуль -noout

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

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

+0

Это правда. Более того, если файл ключа поврежден, ssh-keygen запросит кодовую фразу, где не ожидалось, что она будет одной (я ищу способ проверить, что пара открытого и закрытого ключей действительна в целом). – Curt

2

Если вы в Windows, и вы хотите использовать графический интерфейс, с puttygen вы можете импортировать закрытый ключ в него:

enter image description here

После импорта, вы можете сохранить его открытый ключ и сравнить его с вашим.

0

< -s Diff (SSH-кейген -y -f ~/.ssh/id_rsa) < (вырезать -d '' -f 1,2 ~/.ssh/id_rsa.pub)

+0

Я думаю, вы должны уточнить, ваш пост действительно близок к https://stackoverflow.com/a/22595408/3102264 – mpromonet

Смежные вопросы