2013-07-18 17 views
67

Lasciatemi spiegare prima la mia domanda. Ho comprato un certificato da una CA e utilizzato il seguente formato per generare il CSR e la chiave privata:Come convertire una chiave privata in una chiave privata RSA?

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 ----- "

Io 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 di beanstalk. Io 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 

posso cambiare i nomi dei file cert, come richiesto, ma continuo a ricevere questo errore: "400 MalformedCertificate chiave non valido privato"

la cosa interessante è, nella pagina doc AWS, la chiave privata del campione che mostrano inizia con "------- Begin RSA chiave privata --------"

Is c'è un modo per convertire la mia chiave privata in una chiave privata RSA usando openssl?

risposta

105

Le versioni più recenti di OpenSSL dicono BEGIN PRIVATE KEY perché contengono la chiave privata + un OID che identifica il tipo di chiave (questo è noto come formato PKCS8). Per ottenere la chiave vecchio stile (noto come sia PKCS1 o in formato OpenSSL tradizionale) si può fare questo:

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

In alternativa, se si dispone di una chiave PKCS1 e volete PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem 
+0

Perfect !! Ha funzionato come un fascino. Grazie molto! –

+1

Questa è anche la soluzione per ottenere strani messaggi di errore come "Struttura PEM non valida", ----- BEGIN ... "mancante" da strumenti come Cyberduck mentre SSH puro con la stessa chiave funziona. – Daniel

+0

Questo ha funzionato per me. Gli utenti Windows possono ottenere OpenSSL qui: http://slproweb.com/products/Win32OpenSSL.html – ben

14

Questo può essere di qualche aiuto (non letteralmente scrivere le backslash '\' nei comandi, essi sono destinati a indicare che "tutto deve essere su una sola riga"):

Which Command to Apply When

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

Qui ci sono i comandi ancora più facile per i copia-incolla:

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 
+0

Il file "graphml" dell'immagine (che può essere modificato con [yworks yed] (https://www.yworks.com/products/yed) per esempio) può essere trovato [qui ] (https://s3-eu-west-1.amazonaws.com/lohlxadsvl/openssl_commands.graphml) –

Problemi correlati