Je rencontre un problème en générant une clé publique que la fonction openssl PEM_read_bio_RSA_PUBKEY()
peut consommer. Je continue à recevoir des erreurs.
Évidemment, je ne peux pas simplement utiliser la chaîne ASCII dans le ssh-keygen <>.pub
fichier clé tel qu'il est au format de fichier SSH ou je structure peut-être SubjectPublicKeyInfo
.
Voici le code gen clé: ssh-keygen -t rsa -b 1024 -C "Test Key"
J'ai trouvé un convertisseur en php sur le web qui convertira le contenu de la clé publique au format PEM base64 ASCII format chaîne. Cependant, la fonction ne l'aime toujours pas.
La documentation Openssl indique:
Comment obtenir ma clé publique OpenSSH dans l'un ou l'autre des formats que la fonction OpenSSL utilisera?
D'ACCORD!
Alors je suis entré dans cette pensée "Facile, j'ai compris." Il s'avère qu'il y a beaucoup plus que je ne le pensais.
Donc, le premier problème est que (selon les pages de manuel pour OpenSSL (man 3 pem)), OpenSSL s'attend à ce que la clé RSA soit au format PKCS # 1. De toute évidence, ce n'est pas avec cela que ssh-keygen travaille. Vous avez deux options (de chercher autour).
Si vous avez OpenSSH v. 5.6 ou version ultérieure (je ne l'ai pas fait sur mon ordinateur portable), vous pouvez exécuter ceci:
ssh-keygen -f key.pub -e -m pem
La méthode la plus longue consiste à séparer votre clé SSH en ses différents composants (le entrée de blog J'ai trouvé une partie de cela en accusant OpenSSH d'être "propriétaire", je préfère l'appeler "unique" ), puis utilisez une bibliothèque ASN1 pour permuter les choses.
Heureusement pour vous, quelqu'un a écrit le code pour ce faire:
En supposant que vous disposez de la clé privée SSH id_rsa
, vous pouvez en extraire la clé publique comme suit:
openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem
Je me rends compte que l'OP a demandé la conversion d'une clé publique, donc cela ne répond pas tout à fait à la question, mais j'ai pensé que ce serait utile pour certains de toute façon.
Notez également que cette commande entraîne un format de clé publique PEM, qui est généralement ce qu'OpenSSL attend. D'un autre côté, la réponse de Brian se traduit par un fichier au format RSAPublicKey, qui n'est pas le format normal attendu par OpenSSL (bien que les versions ultérieures puissent apparemment le lire via le -RSAPublicKey_in
drapeau). Pour convertir, vous pouvez faire ceci:
openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem
Le format que vous voulez est ce que ssh-keygen
appels PKCS8
. Ainsi, la commande suivante produira la sortie souhaitée:
ssh-keygen -f key.pub -e -m pkcs8
Du ssh-keygen
page de manuel:
-m key_format
Specify a key format for the -i (import) or -e (export) conversion
options. The supported key formats are:
``RFC4716'' (RFC 4716/SSH2 public or private key),
``PKCS8'' (PEM PKCS8 public key) or
``PEM'' (PEM public key).
The default conversion format is ``RFC4716''.
Semblable à la méthode d'Amal Chaudhuri ci-dessous, c'est ce qui a fonctionné pour moi. J'avais besoin de créer un fichier pem à partir de la clé publique ssh que j'avais générée pour mon client SFTP (Cyberduck).
openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem