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


168

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

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

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

Ответы:


260

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

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

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


2
что именно это делает? Почему сш?
sammiwei

2
вероятно, потому что он использует
пары ключей

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

1
Это решение, похоже, работает для всех типов SSH-ключей. При таком подходе мне даже удалось восстановить неуместный открытый ключ.
Яри ​​Туркиа

53

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

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


48

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

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

распечатать открытые ключи, затем

 openssl dsa -in dsa.key -modulus -noout

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


18

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

    openssl x509 -in certfile -modulus -noout

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

    openssl rsa -in keyfile -modulus -noout

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


17

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

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

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


3
Чтобы получить вывод, когда файлы совпадают:diff -s
Roland

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

7

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


3
Вопрос в том, как проверить, и устройство, на котором мы будем его проверять, может не иметь средств для создания нового.
АрменБ

5

Введите следующую команду, чтобы проверить, являются ли закрытый ключ и открытый ключ совпадающим набором (идентичным) или не совпадающим набором (отличаются) в каталоге $ 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) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)


Полагаю, вам стоит уточнить, ваш пост действительно близок к stackoverflow.com/a/22595408/3102264
mpromonet


4

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

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

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


1

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

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


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

3
Это почти так же полезно, как сказать: добавьте открытый ключ в ваш файл author_keys и используйте ssh, чтобы увидеть, какой закрытый ключ работает. Метод работает, но это боль.
Брэдли Крейдер

0

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

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

-2

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


1
это не позволяет протестировать частно-публичную пару ключей
MatFiz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.