web-dev-qa-db-fra.com

Comment tester une paire de clés DSA publique / privée?

Existe-t-il un moyen simple de vérifier qu’une clé privée donnée correspond à une clé publique donnée? J'ai quelques fichiers * .pub et quelques fichiers * .key, et je dois vérifier lequel va avec.

Encore une fois, ce sont des fichiers pub/key, DSA.

Je préférerais vraiment un one-liner de quelque sorte ...

158
Loki

J'ai trouvé un moyen qui semble mieux fonctionner pour moi:

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

cette commande affichera la clé publique pour la clé privée donnée. Comparez donc simplement la sortie à chaque fichier * .pub.

248
Loki

Je compare toujours un hachage MD5 du module à l'aide de ces commandes:

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

Si les hachages correspondent, alors ces deux fichiers vont ensemble.

53
Robert

Pour les clés DSA, utilisez

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

pour imprimer les clés publiques, puis

 openssl dsa -in dsa.key -modulus -noout

pour afficher les clés publiques correspondant à une clé privée, puis comparez-les.

47
Martin v. Löwis

En supposant que vous disposiez des clés publiques dans des certificats x.509, et en supposant qu’elles soient des clés RSA, puis, pour chaque clé publique,

    openssl x509 -in certfile -modulus -noout

Pour chaque clé privée, faites

    openssl rsa -in keyfile -modulus -noout

Ensuite, faites correspondre les clés par module.

18
Martin v. Löwis

Le contrôle peut être facilité avec diff:

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

La seule chose étrange est que diff ne dit rien si les fichiers sont les mêmes, donc on ne vous dira que si le public et le privé ne pas correspondent.

14
John D.

Supprimez les clés publiques et générez-en de nouvelles à partir des clés privées. Gardez-les dans des répertoires séparés ou utilisez une convention de nommage pour les garder droits.

7
Bill the Lizard

Si vous êtes sous Windows et souhaitez utiliser une interface graphique, avec puttygen , vous pouvez y importer votre clé privée:

enter image description here

Une fois importé, vous pouvez enregistrer sa clé publique et la comparer à la vôtre.

4
Zac

Entrez la commande suivante pour vérifier si une clé privée et une clé publique correspondent à un jeu correspondant (identique) ou non (différent) dans le répertoire $ USER/.ssh. La commande cut empêche la comparaison du commentaire situé à la fin de la ligne dans la clé publique, permettant uniquement à la clé d'être comparée.

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

La sortie ressemblera à l’une ou l’autre de ces lignes.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

J'ai écrit un script Shell que les utilisateurs utilisent pour vérifier l'autorisation de fichier de leurs fichiers ~/.ssh/et des clés correspondantes. Il résout mes problèmes avec les incidents utilisateur lors de la configuration de ssh. Cela peut vous aider. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Remarque: ma réponse précédente (mars 2018) ne fonctionne plus avec les dernières versions d'Opensh. Réponse précédente: diff -qs <(ssh-keygen -yf ~/.ssh/id_rsa) <(cut -d '' -f 1,2 ~/.ssh/id_rsa.pub)

1
Bradley Allen

Si cela ne retourne rien, alors ils correspondent:

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

Cryptez quelque chose avec la clé publique et voyez quelle clé privée le déchiffre.

Ceci article de projet de code de Jeff Atwood implémente un wrapper simplifié autour des classes cryptographiques .NET. En supposant que ces clés ont été créées pour être utilisées avec RSA, utilisez la classe asymétrique avec votre clé publique pour chiffrer et la même chose avec votre clé privée pour le déchiffrement.

0
Mitch Wheat