111 votes

Pourquoi l'empreinte de ma clé OpenSSH ne correspond-elle pas à l'empreinte de la paire de clés de la console AWS EC2 ?

Lorsque j'importe ma clé publique OpenSSH dans le trousseau de clés d'AWS EC2, l'empreinte digitale affichée par AWS ne correspond pas à celle que je vois dans le trousseau :

ssh-keygen -l -f my_key

Il est d'une longueur différente et comporte des octets différents.

Pourquoi ? Je suis sûr d'avoir téléchargé la bonne clé.

170voto

Bunny Joel Points 43

AWS EC2 affiche l'empreinte digitale SSH2, et non l'empreinte digitale OpenSSH à laquelle tout le monde s'attend. Cela n'est pas indiqué dans l'interface utilisateur.

Il montre également deux types d'empreintes digitales complètement différentes selon que la clé a été générée sur AWS et téléchargée, ou que vous avez téléchargé votre propre clé publique.

Empreintes digitales générées avec

ssh-keygen -l -f id_rsa

sera ノット correspondent à ce que montre EC2. Vous pouvez soit utiliser les outils de l'API AWS pour générer une empreinte digitale avec la fonction ec2-fingerprint-key ou utiliser OpenSSL pour le faire.

Notez que si vous avez initialement généré une clé sur AWS, mais que vous l'avez ensuite téléchargée à nouveau (par exemple, vers une autre région), vous obtiendrez une empreinte digitale différente car il prendra l'empreinte RSA de SSH2, plutôt que le sha1 qu'il affiche pour les clés que vous avez générées sur AWS.

Amusant, hein ? This screenshot has two copies of the same key in it with different fingerprints

Dans le ci-dessus, test-generated a été généré en utilisant AWS EC2. test-generated-reuploaded est la clé publique de la clé privée générée par AWS, extraite avec ssh-keygen -y et téléchargé à nouveau. La troisième clé, test-uploaded est une clé générée localement ... mais la clé locale ssh-keygen -l l'empreinte digitale est b2:2c:86:d6:1e:58:c0:b0:15:97:ab:9b:93:e7:4e:ea .

$ ssh-keygen -l -f theprivatekey
2048 b2:2c:86:d6:1e:58:c0:b0:15:97:ab:9b:93:e7:4e:ea
$ openssl pkey -in theprivatekey -pubout -outform DER | openssl md5 -c
Enter pass phrase for id_landp:
(stdin)= 91:bc:58:1f:ea:5d:51:2d:83:d3:6b:d7:6d:63:06:d2

Clés téléchargées sur AWS

Lorsque vous téléchargez une clé vers AWS, vous téléchargez uniquement la clé publique, et AWS affiche le hachage MD5 de la clé publique.

Vous pouvez utiliser OpenSSL, comme démontré par Daniel sur les forums AWS pour générer l'empreinte digitale sous la forme utilisée par AWS pour montrer les empreintes digitales des clés publiques téléchargées (SSH2 MD5), comme :

7a:58:3a:a3:df:ba:a3:09:be:b5:b4:0b:f5:5b:09:a0

Si vous disposez de la clé privée, vous pouvez générer l'empreinte digitale en extrayant la partie publique de la clé privée et en la hachant en utilisant :

openssl pkey -in id_rsa -pubout -outform DER | openssl md5 -c

Si vous n'avez que la clé publique, et qu'elle est au format OpenSSH, vous devez d'abord la convertir en PEM, puis en DER et enfin la hacher, en utilisant :

ssh-keygen -f id_rsa.pub -e -m PKCS8 | openssl pkey -pubin -outform DER | openssl md5 -c

Clés générées sur AWS

Lorsque vous générez une paire de clés sur AWS, AWS affiche le hachage SHA1 de la clé privée, qui est plus long, comme :

ea:47:42:52:2c:25:43:76:65:f4:67:76:b9:70:b4:64:12:00:e4:5a

Dans ce cas, vous devez utiliser la commande suivante, également indiquée par Daniel sur les forums AWS, pour générer un hachage sha1 basé sur la clé privée :

openssl pkcs8 -in aws_private.pem -nocrypt -topk8 -outform DER | openssl sha1 -c

sur le fichier téléchargé de clé privée/certificat généré par AWS. Cela fonctionnera également sur les clés que vous avez converties au format OpenSSH. Cela nécessite toutefois que vous ayez la clé privée, puisque le hachage est celui de la clé privée. Vous ne pouvez pas générer le hachage localement si vous ne disposez que de la clé publique.

Références

Voir :

8 votes

Malheureusement, le manque de clarté d'AWS à ce sujet ouvre une brèche de sécurité potentielle qui rend la vérification des clés plus difficile.

2 votes

Excellente réponse ! Sur la question initiale ssh avec les versions plus récentes, vous devez utiliser l'option -E pour spécifier le format md5 : ssh-keygen -E md5 -l -f id_rsa .

1 votes

Réponse absolument brillante, couvrant toutes les bizarreries et toutes les conversions dont vous pourriez avoir besoin. Pour moi, openssl pkcs8 -in aws_private.pem -nocrypt -topk8 -outform DER | openssl sha1 -c ce que je cherchais pour faire correspondre une clé que j'avais téléchargée avec ce qui était affiché sur la console EC2.

24voto

J. Doe Points 361

Si vous ne disposez que de clés publiques, vous pouvez générer l'empreinte AWS comme suit :

ssh-keygen -e -f id_rsa.pub -m pkcs8 | openssl pkey -pubin -outform der | openssl md5 -c

4voto

Ryan Points 123

Il y a une ressource sur AWS docs http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#verify-key-pair-fingerprints

Si vous avez créé votre paire de clés à l'aide d'AWS, vous pouvez utiliser les outils OpenSSL pour générer une empreinte digitale à partir du fichier de la clé privée :

Copie

$ openssl pkcs8 -in path_to_private_key -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c

Si vous avez créé votre paire de clés à l'aide d'un outil tiers et téléchargé la clé publique sur AWS, vous pouvez utiliser les outils OpenSSL pour générer une empreinte à partir du fichier de clé privée sur votre machine locale :

Copie

$ openssl rsa -in path_to_private_key -pubout -outform DER | openssl md5 -c

La sortie doit correspondre à l'empreinte digitale qui est affichée dans la console.

3voto

Max Murphy Points 141

C'est ce que j'utilise :

openssl rsa -RSAPublicKey_in -in <(ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PEM) -inform PEM -outform DER 2>/dev/null | openssl md5 -c | awk '{print $2}'

Cela génère l'empreinte digitale à partir de la clé publique, de manière similaire à certaines des méthodes ci-dessus.

1voto

Steve Kaye Points 121

Juste au cas où cela pourrait être utile : https://ssh-vault.com/post/fingerprint/

par exemple :

$ ssh-vault -u bob -f

Imprime l'empreinte digitale de l'utilisateur Bob en respectant le format utilisé par AWS.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X