Come convertire una chiave privata in una chiave privata RSA?


97

Lasciatemi spiegare prima la mia domanda. Ho acquistato un certificato da una CA e ho utilizzato il seguente formato per generare il csr e la chiave privata:

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

Quando apro il file server.key, vedo che inizia con "----- BEGIN PRIVATE KEY -----"

Uso il certificato SSL sul mio server e tutto sembra a posto.

Ora voglio caricare lo stesso certificato su AWS IAM in modo da poterlo utilizzare per il bilanciamento del carico beanstalk. Uso il seguente comando da questo documento 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

Cambio i nomi dei file del certificato come richiesto, ma continuo a ricevere questo errore: "400 MalformedCertificate Invalid Private Key".

La cosa interessante è che, nella pagina della documentazione di aws, la chiave privata di esempio che mostrano inizia con "------- Begin RSA Private Key --------"

C'è un modo per convertire la mia chiave privata in una chiave privata RSA utilizzando openssl?

Risposte:


155

Le versioni più recenti di OpenSSL dicono BEGIN PRIVATE KEYperché contengono la chiave privata + un OID che identifica il tipo di chiave (questo è noto come formato PKCS8). Per ottenere la chiave vecchio stile (nota come formato PKCS1 o tradizionale OpenSSL) puoi farlo:

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

In alternativa, se hai una chiave PKCS1 e desideri PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem

1
Questa è anche la soluzione per ottenere strani messaggi di errore come Invalid PEM structure, '-----BEGIN...' missing.da strumenti come Cyberduck mentre funziona SSH puro con la stessa chiave.
Daniel

1
Grazie! Lo stavo ricevendo A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.e eseguendo sulla mia chiave privata, risolto!
philfreo

4
Per riferimento: vedere stackoverflow.com/q/20065304/53974 per una spiegazione più completa.
Blaisorblade

1
come facciamo il contrario di questo? Ho bisogno Private Keydi un RSA Private Key?
terzo

1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemscriverà un PKCS8 a STDOUT
Paul Kehrer il

24

Questo può essere di qualche aiuto (non scrivere letteralmente le barre rovesciate '\' nei comandi, hanno lo scopo di indicare che "tutto deve essere su una riga"):

Quale comando applicare quando

Sembra che tutti i comandi (in grigio) prendano qualsiasi tipo di file chiave (in verde) come argomento "in". Che è carino.

Ecco di nuovo i comandi per un copia-incolla più facile:

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

e

openssl rsa -check -in $FF
openssl rsa -text  -in $FF

1
Il file "graphml" dell'immagine (che può essere modificato con yworks yed per esempio) può essere trovato qui
David Tonhofer

8

Per convertire "BEGIN OPENSSH PRIVATE KEY" in "BEGIN RSA PRIVATE KEY"

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

Questo è esattamente ciò di cui avevo bisogno. Grazie!
RossD

Questo comportamento è documentato indirettamente nella manpage di ssh-keygen, ma l'uso del flag -m non è effettivamente menzionato per altre modalità operative oltre a -i e -o
ikrabbe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.