Comment tester une paire de clés DSA publique / privée?
-
07-07-2019 - |
Question
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 en quelque sorte ...
La solution
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.
Autres conseils
Je compare toujours un hachage MD5 du module à l'aide des commandes suivantes:
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 concordent, ces deux fichiers vont ensemble.
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.
En supposant que vous disposiez des clés publiques dans des certificats x.509, et en supposant qu'il s'agisse de clés RSA, puis 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.
La vérification peut être facilitée 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, vous ne le saurez donc que si les public et privé ne correspondent pas .
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.
Si vous êtes sous Windows et souhaitez utiliser une interface graphique, utilisez puttygen , vous pouvez y importer votre clé privée:
Une fois importé, vous pouvez enregistrer sa clé publique et la comparer à la vôtre.
Entrez la commande suivante pour vérifier si une clé privée et une clé publique correspondent à un ensemble mis en correspondance (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 de la clé publique, ce qui permet de ne comparer que 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 les droits d'accès aux fichiers de leurs fichiers ~ / .ssh / et à la clé correspondante. 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/ arbre / maître / 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 & Lt; (ssh-keygen -yf ~ / .ssh / id_rsa) & Lt; (couper -d '' -f 1,2 ~ / .ssh / id_rsa.pub)
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 autour des classes de cryptage .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.
S'il ne renvoie rien, ils correspondent:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
Utilisez simplement puttygen et chargez votre clé privée dans il. Offre différentes options, par exemple exportation de la clé publique correspondante.