Как вы тестируете открытую/приватную пару ключей DSA?

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

Опять же, это файлы pub/key, DSA.

Я бы предпочел какой-то один лайнер...

Ответ 1

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

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

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

Ответ 2

Я всегда сравниваю хэш 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

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

Ответ 3

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

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

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

 openssl dsa -in dsa.key -modulus -noout

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

Ответ 4

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

    openssl x509 -in certfile -modulus -noout

Для каждого закрытого ключа выполните

    openssl rsa -in keyfile -modulus -noout

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

Ответ 5

Проверка может быть проще с помощью diff:

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

Единственное, что отличает то, что diff ничего не говорит, если файлы одинаковы, поэтому вам будет сообщено, не совпадают ли публичные и частные.

Ответ 6

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

Ответ 7

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

введите описание изображения здесь

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

Ответ 8

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

ssh-keygen -y -f PRIVATEKEY

и

openssl (rsa или dsa) - в PRIVATEKEY -modulus -noout

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

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

Ответ 9

Введите следующую команду, чтобы проверить, являются ли закрытый ключ и открытый ключ совпадающим набором (идентичным) или не совпадающим набором (отличаются) в каталоге $ USER/.ssh. Команда cut предотвращает сравнение комментария в конце строки в открытом ключе, позволяя сравнивать только ключ.

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

Вывод будет выглядеть как одна из этих строк.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Я написал сценарий оболочки, который пользователи используют для проверки прав доступа к файлам своих файлов ~/.ssh/и соответствующих ключей. Это решает мои проблемы с пользовательскими инцидентами при настройке ssh. Это может помочь вам. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Примечание. Мой предыдущий ответ (в марте 2018 года) больше не работает с последними выпусками openssh. Предыдущий ответ: diff -qs <(ssh-keygen -yf ~/.ssh/id_rsa) <(вырезать -d '' -f 1,2 ~/.ssh/id_rsa.pub)

Ответ 10

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

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

Ответ 11

Если он ничего не возвращает, то они совпадают:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

Ответ 12

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