Как вы тестируете публичную / приватную пару ключей DSA?
-
07-07-2019 - |
Вопрос
Есть ли простой способ проверить, соответствует ли данный закрытый ключ указанному открытому ключу? У меня есть несколько * .pub и несколько файлов * .key, и мне нужно проверить, какие из них идут.
Опять же, это файлы pub / key, DSA.
Я бы действительно предпочел однострочник какой-то ...
Решение
Я нашел способ, который, кажется, работает лучше для меня:
ssh-keygen -y -f <private key file>
эта команда выведет открытый ключ для данного закрытого ключа, поэтому просто сравните вывод с каждым файлом * .pub.
Другие советы
Я всегда сравниваю хеш 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
Если хэши совпадают, то эти два файла объединяются.
Для ключей DSA используйте
openssl dsa -pubin -in dsa.pub -modulus -noout
чтобы распечатать открытые ключи, затем
openssl dsa -in dsa.key -modulus -noout
чтобы отобразить открытые ключи, соответствующие закрытому ключу, а затем сравнить их.
Если у вас есть открытые ключи внутри сертификатов x.509 и что они являются ключами RSA, то для каждого открытого ключа выполните
openssl x509 -in certfile -modulus -noout
Для каждого закрытого ключа выполните
openssl rsa -in keyfile -modulus -noout
Затем сопоставьте ключи по модулю.
Проверка может быть упрощена с помощью diff:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
Единственная странность в том, что diff ничего не говорит, если файлы одинаковые, поэтому вам сообщат только, если общие и частные не не совпадают.
Удалите открытые ключи и сгенерируйте новые из закрытых ключей. Храните их в отдельных каталогах или используйте соглашение об именах, чтобы они были прямыми.
Если вы находитесь в Windows и хотите использовать графический интерфейс, с puttygen вы можете импортировать в него свой закрытый ключ:
После импорта вы можете сохранить его открытый ключ и сравнить его с вашим.
Введите следующую команду, чтобы проверить, являются ли закрытый ключ и открытый ключ совпадающим набором (идентичным) или не совпадающим набором (отличаются) в каталоге $ 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/ дерево / ведущий / SSH р>
Примечание. Мой предыдущий ответ (в марте 2018 года) больше не работает с последними выпусками openssh. Предыдущий ответ: diff -qs & Lt; (ssh-keygen -yf ~ / .ssh / id_rsa) & Lt; (cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub) р>
Зашифруйте что-нибудь с помощью открытого ключа и посмотрите, какой закрытый ключ расшифровывает это.
Эта статья проекта кода не кем иным, как Джеффом Этвудом, реализует упрощенную обертка вокруг криптографических классов .NET. Предполагая, что эти ключи были созданы для использования с RSA, используйте асимметричный класс с вашим открытым ключом для шифрования и то же самое с вашим закрытым ключом для дешифрования.
Если он ничего не возвращает, они совпадают:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
Просто используйте puttygen и загрузите свой закрытый ключ в Это. Предлагает различные варианты, например, экспорт отвечающего ядру открытого ключа.