Il n’est peut-être pas possible de faire cela avec les outils OpenSSH seuls.
Mais cela peut être fait assez facilement avec les outils OpenSSL. En fait, il y a au moins deux façons de le faire. Dans les exemples ci-dessous, ~/.ssh/id_rsa
est votre clé privée.
Une façon utilise dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
L'autre utilise pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Tous deux écrivent une signature binaire sur la sortie standard. dgst prend une -hex
option pour imprimer une représentation textuelle, avec quelques détails sur la forme de la signature. pkeyutl prend une -hexdump
option un peu moins utile. Les deux accepteront les clés RSA et DSA. Je n'ai aucune idée du format de la sortie. Les deux commandes produisent des formats différents. J'ai l'impression que pkeyutl est considéré comme plus moderne que dgst .
Pour vérifier ces signatures:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
et:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Le problème ici est $PUBLIC_KEY_FILE
. OpenSSL ne peut pas lire le format de clé publique d'OpenSSH, vous ne pouvez donc pas simplement l'utiliser id_rsa.pub
. Vous avez quelques options, aucune idéale.
Si vous avez une version de OpenSSH 5.6 ou ultérieure, vous pouvez apparemment le faire:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Qui écrira la clé publique sur la sortie standard au format PEM, qu’OpenSSL peut lire.
Si vous possédez la clé privée et qu'il s'agit d'une clé RSA, vous pouvez en extraire la clé publique (je suppose que le fichier de clé privée codé en PEM inclut une copie de la clé publique, car il n'est pas possible de dériver la clé publique. de la clé privée elle-même), et utilisez-le:
openssl rsa -in ~/.ssh/id_rsa -pubout
Je ne sais pas s'il existe un équivalent DSA. Notez que cette approche nécessite une certaine coopération de la part du propriétaire de la clé privée, qui devra extraire la clé publique et l'envoyer au vérificateur potentiel.
Enfin, vous pouvez utiliser un programme Python écrit par un responsable appelé Lars pour convertir la clé publique du format OpenSSH au format OpenSSL.