Comment convertir une clé privée en clé privée RSA?

97

Permettez-moi d'abord d'expliquer ma question. J'ai acheté un certificat auprès d'une autorité de certification et utilisé le format suivant pour générer le csr et la clé privée:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

Lorsque j'ouvre le fichier server.key, je vois qu'il commence par "----- BEGIN PRIVATE KEY -----"

J'utilise le certificat SSL sur mon serveur et tout semble bien.

Maintenant, je souhaite télécharger le même certificat sur AWS IAM afin de pouvoir l'utiliser pour par l'équilibreur de charge beanstalk. J'utilise la commande suivante de ce document aws http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SubmitCSRCertAuth

iam-servercertupload -b public_key_certificate_file  -k privatekey.pem -s certificate_object_name

Je change les noms de fichier de certificat selon les besoins mais continue à recevoir cette erreur: «400 MalformedCertificate Invalid Private Key».

La chose intéressante est que, sur la page doc aws, l'exemple de clé privée qu'ils montrent commence par "------- Begin RSA Private Key --------"

Existe-t-il un moyen de convertir ma clé privée en clé privée RSA en utilisant openssl?

Utilisateur silencieux
la source

Réponses:

155

Les nouvelles versions d'OpenSSL disent BEGIN PRIVATE KEYqu'elles contiennent la clé privée + un OID qui identifie le type de clé (c'est ce qu'on appelle le format PKCS8). Pour obtenir l'ancienne clé de style (connue sous le nom de PKCS1 ou de format OpenSSL traditionnel), vous pouvez le faire:

openssl rsa -in server.key -out server_new.key

Alternativement, si vous avez une clé PKCS1 et souhaitez PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem
Paul Kehrer
la source
1
C'est également la solution pour obtenir des messages d'erreur étranges comme ceux Invalid PEM structure, '-----BEGIN...' missing.d'outils tels que Cyberduck alors que le SSH pur avec la même clé fonctionne.
Daniel
1
Je vous remercie! J'obtenais A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.et exécutais ceci sur ma clé privée l'a corrigé!
philfreo
4
Pour référence: voir stackoverflow.com/q/20065304/53974 pour une explication plus complète.
Blaisorblade
1
comment faire le contraire? J'ai besoin Private Keyd'un RSA Private Key?
edthethird
1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemécrira un PKCS8 à STDOUT
Paul Kehrer
24

Cela peut être utile (n'écrivez pas littéralement les barres obliques inverses '\' dans les commandes, elles sont destinées à indiquer que "tout doit être sur une seule ligne"):

Quelle commande appliquer quand

Il semble que toutes les commandes (en gris) prennent n'importe quel type de fichier clé (en vert) comme argument "in". Ce qui est bien.

Voici à nouveau les commandes pour faciliter le copier-coller:

openssl rsa                                                -in $FF -out $TF
openssl rsa -aes256                                        -in $FF -out $TF
openssl pkcs8 -topk8 -nocrypt                              -in $FF -out $TF
openssl pkcs8 -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA256 -in $FF -out $TF

et

openssl rsa -check -in $FF
openssl rsa -text  -in $FF
David Tonhofer
la source
1
Le fichier "graphml" de l'image (qui peut être édité avec yworks yed par exemple) peut être trouvé ici
David Tonhofer
8

Pour convertir «BEGIN OPENSSH PRIVATE KEY» en «BEGIN RSA PRIVATE KEY»

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
Ahirapara
la source
C'est exactement ce dont j'avais besoin. Merci!
RossD
Ce comportement est documenté indirectement sur la page de manuel ssh-keygen, mais l'utilisation de l'indicateur -m n'est en fait pas mentionnée pour d'autres modes de fonctionnement que -i et -o
ikrabbe