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 ...
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.
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.
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’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.
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.
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, avec 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 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)
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
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.