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

168

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 lesquels vont avec lesquels.

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

Je préférerais vraiment une sorte de monoplace ...

Loki
la source

Réponses:

260

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, alors comparez simplement la sortie à chaque fichier * .pub.

Loki
la source
2
qu'est-ce que cela fait exactement? Pourquoi ssh?
sammiwei
2
probablement parce qu'il utilise des paires de clés pour l'authentification ssh
etarion
2
Dans mon cas, un serveur de travail central a quelques dizaines de id_rsa.pub.blahhostfichiers et je ne savais pas lequel correspondait à la id_rsaclé privée unique et je configure un scp sans mot de passe afin de pouvoir migrer hors d'anciens sites Web. Créer une nouvelle paire de clés n'est pas une option; J'ai bien configuré mes clés et je ne vais pas gâcher ça.
Chris K
1
Cette solution semble fonctionner pour tous les types de clés SSH. J'ai même réussi à récupérer une clé publique mal placée avec cette approche.
Jari Turkia
53

Je compare toujours un hachage MD5 du module en utilisant 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, ces deux fichiers vont ensemble.

Robert
la source
48

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.

Martin c.Löwis
la source
18

En supposant que vous avez les clés publiques à l'intérieur des certificats x.509, et en supposant qu'il s'agit de clés RSA, alors pour chaque clé publique, faites

    openssl x509 -in certfile -modulus -noout

Pour chaque clé privée, faites

    openssl rsa -in keyfile -modulus -noout

Faites ensuite correspondre les clés par module.

Martin c.Löwis
la source
17

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 identiques, donc on ne vous dira que si le public et le privé ne correspondent pas .

John D.
la source
3
Pour obtenir une sortie lorsque les fichiers correspondent:diff -s
Roland
3
C'est une excellente réponse. (1) diff -qsrenvoie une réponse simple "identique / pas identique. (2) vous devez supprimer le commentaire dans le fichier de clé publique avant d'exécuter la différence.
emory
7

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

Bill le lézard
la source
3
La question est de savoir comment vérifier et l'appareil sur lequel nous allons le vérifier pourrait ne pas avoir les installations nécessaires pour en générer un nouveau.
ArmenB du
5

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

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

La sortie ressemblera à l'une 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 le jeu de clés correspondant. Cela résout mes défis avec les incidents d'utilisateurs 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 (en mars 2018) ne fonctionne plus avec les dernières versions d'openssh. Réponse précédente: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)

Bradley Allen
la source
Je suppose que vous devriez élaborer, votre message est vraiment proche de stackoverflow.com/a/22595408/3102264
mpromonet
Cross posté sur Server Fault: Comment vérifier si une paire de clés publique / privée RSA correspond
Peter Mortensen
4

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

entrez la description de l'image ici

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

Zac
la source
1

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

Cet article de projet de code par nul autre que Jeff Atwood implémente un wrapper simplifié autour des classes de chiffrement .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 déchiffrer.

Blé Mitch
la source
Je cherche quelque chose d'un peu plus simple. Disons, une coque une doublure ou similaire. Je suis sous Linux et j'ai installé les éléments normaux tels que openssl.
Loki
3
C'est presque aussi utile que de dire d'ajouter une clé publique à votre fichier allowed_keys et d'utiliser ssh pour voir quelle clé privée fonctionne. La méthode fonctionne, mais c'est pénible.
Bradley Kreider
0

Si cela ne renvoie rien, alors ils correspondent:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
RoutesMaps.com
la source
-2

Utilisez simplement puttygen et chargez-y votre clé privée. Offre différentes options, par exemple l'exportation de la clé publique correspondante.

user2987067
la source
1
cela ne permet pas de tester une paire de clés privé-public
MatFiz