Question Qu'est-ce qu'une empreinte de clé SSH et comment est-elle générée?


Je trouve toujours que je reçois ce message quand je ssh dans une nouvelle machine:

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

Qu'est ce que cela signifie? Chaque machine aura-t-elle la même empreinte à chaque fois?

Comment ces empreintes sont-elles générées? De quels paramètres dépendent-ils?


97
2018-05-08 14:22


origine




Réponses:


L'empreinte est basée sur la clé publique de l'hôte, généralement basée sur "/etc/ssh/ssh_host_rsa_key.pub" En règle générale, il s'agit d'une identification / vérification facile de l'hôte auquel vous vous connectez.

Si l'empreinte digitale change, la machine à laquelle vous vous connectez a changé de clé publique. Cela peut ne pas être une mauvaise chose (se produit lors de la réinstallation de ssh), mais cela peut également indiquer que vous vous connectez à une autre machine sur le même domaine / IP (lorsque vous vous connectez via un équilibrage de charge) sont ciblés avec une attaque de type man-in-the-middle, où l'attaquant intercepte / redirige d'une manière ou d'une autre votre connexion ssh pour se connecter à un autre hôte qui pourrait surveiller votre utilisateur / pw.

Bottom line: Si vous êtes averti d'une nouvelle empreinte digitale, soyez prudent et vérifiez que vous vous connectez réellement à l'hôte correct via une connexion sécurisée. Bien que la plupart du temps cela soit inoffensif, cela peut indiquer un problème potentiel

Voir: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html
et: http://en.wikipedia.org/wiki/Public_key_fingerprint


45
2018-05-08 14:41



"... soyez prudent et vérifiez que vous êtes bien connecté au bon hôte via une connexion sécurisée" - question stupide, mais comment pouvez-vous le faire facilement? - Savara
@Savara Lorsque vous vous connectez à un serveur SSH auquel vous n'étiez pas connecté auparavant, vous devez demander la clé publique du serveur SSH à l'administrateur du serveur. L'administrateur du serveur vous donnera un morceau de texte. Vous devriez ajouter ce texte au fichier ~/.ssh/known_hosts. De cette façon, lorsque vous vous connectez au serveur, votre client SSH reconnaîtra ce serveur, puisque vous avez enregistré sa clé publique sur known_hosts. Par conséquent, en fait, vous devriez jamais dire "oui" quand le client SSH vous dit "l'authenticité de l'hôte ne peut pas être établie". Vous devez toujours ajouter la clé publique du serveur au préalable. - Utku
@Savara Si vous faites cela, vous saurez que quelque chose de louche se produit lorsque votre client SSH vous dit "l'authenticité du client ne peut pas être établie" ou lorsqu'il vous dit "la clé publique du serveur a été modifiée". Par conséquent, vous devez toujours ajouter la clé publique du serveur à votre ~/.ssh/known_hosts déposer au préalable et jamais Dites oui lorsque votre client SSH vous dit "L'authenticité du client ne peut pas être établie" ou quand il vous dit "La clé publique du serveur a été modifiée". - Utku
Oui, je suis parfaitement conscient de la façon dont fonctionne la visualisation des empreintes digitales SSH, mais un grand pourcentage du temps, vous n'avez pas la possibilité d'obtenir l'empreinte digitale via un autre canal. TOFU est malheureusement le meilleur que nous ayons souvent. - Savara
Est-il possible de vérifier l'authenticité même après avoir répondu "oui"? - exchange


Vous pouvez générer une empreinte digitale pour une clé publique en utilisant ssh-keygen ainsi:

ssh-keygen -lf /path/to/key.pub

Exemple concret (si vous utilisez une clé publique RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

La première partie (2048) est la longueur de la clé en bits, deuxième partie (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff) est l'empreinte de la clé publique et la troisième partie est l'emplacement du fichier de clé publique lui-même.


76
2017-07-24 16:26



savez-vous comment traduire en 12: f8: 7e: 78: 61: b4: bf: e2: de: 24: 15: 96: 4e: d4: 72: 53 ce format de cette clé publique? - Kit Ho
@KitHo Je ne sais pas si je comprends votre question. J'ai mis à jour l'exemple, comme je le pense ssh-keygen -lf fera ce que tu veux. - Benjamin Oakes
Lorsque SSH-ing dans une nouvelle machine, ce que l'on voit est ne pas empreinte de pubkey d'un utilisateur, mais empreinte de pubkey de l'hôte. Donc, un meilleur exemple pour le contexte de la question est ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub. Il montre l'empreinte digitale également affichée sur les connexions SSH à localhost. - tanius
ma ssh-keygen signalé sha256 empreintes. Afin d'obtenir md5 les empreintes digitales que j'ai courues ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub. #archlinux - Justin C
(@JustinC) Les versions OpenSSH 6.8 (mars 2015) et ultérieures sont passées à SHA256, affichées en base64 plutôt qu'en hexadécimal, par défaut. Pour l'usage du client ssh -o FingerprintHash=md5 ou l'équivalent en ssh_config et sur les choses qui utilisent ssh comme scp. - dave_thompson_085


L'empreinte est le MD5 de la clé publique codée en Base64.

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|       +*..+*    |
|      =. +.=     |
|     . . .o .    |
|         o+   E  |
|        S= . + o |
|        . o o +  |
|           .   . |
|                 |
|                 |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

Le md5sum 6530389635564f6464e8e3a47d593e19 est l’empreinte affichée lorsque la clé est générée uniquement sans les deux-points séparateurs.


Cependant, si vous traitez les empreintes digitales d’Amazon dans la console EC2 Key Pairs, malheureusement, cela peut être une bête différente. S'il s'agit d'une chaîne hexadécimale à 32 chiffres, il s'agit de l'empreinte de clé publique MD5 SSH standard ci-dessus. Mais s'il y a 40 chiffres hexadécimaux, c'est en fait une empreinte digitale calculée en prenant le SHA1 du Clé privée au format PKCS # 8:

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58

56
2018-02-08 20:40



J'ai trouvé cette réponse utile dans le scénario suivant. Votre système utilise SHA1 pour calculer l'empreinte, mais votre ami utilise md5. J'ai partagé une empreinte digitale qui était SHA1 et elle ne correspondait pas au MD5 généré par son système. Cela a aidé - merci! sed 's | ^ ssh-rsa ||' /etc/ssh/ssh_host_rsa_key.pub | sed's = ==. * $ | == | ' | base64 -d | md5sum - Liczyrzepa
Cela est très utile pour comprendre pourquoi cette empreinte ne correspondra pas à celle des enregistrements DNS SSHFP, car ils utilisent des résumés SHA-1 ou SHA-256. - neirbowj
@Liczyrzepa le champ publickey peut ou non avoir "==" à la fin en fonction du type de clé et des bits; plus sûr et OMI plus facile à utiliser awk '{print $2}' /path/to/keyfile.pub ou similaire. - dave_thompson_085
C'est la seule réponse qui explique comment est calculée l'empreinte digitale - greuze
Cependant, sous Linux Mint, la commande est la suivante: cat id_rsa.pub | cut -d' ' -f2 | base64 -d | md5sum - greuze


ssh-keygen -r host.name.com

Produira les empreintes digitales pour toutes les clés publiques configurées sur une instance sshd.

Ceux-ci peuvent alors être mis dans DNS SSHFP des enregistrements


0
2017-11-26 04:32