Como converter uma chave privada em uma chave privada RSA?

97

Deixe-me explicar minha pergunta primeiro. Comprei um certificado de uma CA e usei o seguinte formato para gerar o csr e a chave privada:

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

Quando abro o arquivo server.key, vejo que ele começa com "----- BEGIN PRIVATE KEY -----"

Eu uso o certificado SSL no meu servidor e tudo parece bem.

Agora eu quero fazer upload do mesmo certificado para AWS IAM para que eu possa usá-lo pelo balanceador de carga beanstalk. Eu uso o seguinte comando deste 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

Eu mudo os nomes dos arquivos certificados conforme necessário, mas continuo recebendo este erro: "400 MalformedCertificate Invalid Private Key."

O interessante é que, na página de doc do aws, o exemplo de chave privada que eles mostram começa com "------- Begin RSA Private Key --------"

Existe uma maneira de converter minha chave privada em uma chave privada RSA usando o openssl?

Usuário silencioso
fonte

Respostas:

155

Versões mais recentes do OpenSSL dizem que BEGIN PRIVATE KEYporque contêm a chave privada + um OID que identifica o tipo de chave (isso é conhecido como formato PKCS8). Para obter a chave de estilo antigo (conhecida como PKCS1 ou formato OpenSSL tradicional), você pode fazer o seguinte:

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

Como alternativa, se você tiver uma chave PKCS1 e quiser PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem
Paul Kehrer
fonte
1
Essa também é a solução para receber mensagens de erro estranhas, como Invalid PEM structure, '-----BEGIN...' missing.de ferramentas como o Cyberduck, enquanto o SSH puro com a mesma chave está funcionando.
Daniel
1
Obrigado! Eu estava obtendo A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.e executando isso na minha chave privada, consertei!
philfreo
4
Para referência: consulte stackoverflow.com/q/20065304/53974 para uma explicação mais completa.
Blaisorblade
1
como fazemos o oposto disso? Eu preciso de um Private Keyde um RSA Private Key?
terceiro dia
1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemvai escrever um PKCS8 para STDOUT
Paul Kehrer
24

Isso pode ser de alguma ajuda (não escreva literalmente as barras invertidas '\' nos comandos, elas significam que "tudo tem que estar em uma linha"):

Qual comando aplicar quando

Parece que todos os comandos (em cinza) aceitam qualquer tipo de arquivo de chave (em verde) como argumento "in". Que é bom.

Aqui estão os comandos novamente para facilitar a cópia e colagem:

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
David Tonhofer
fonte
1
O arquivo "graphml" da imagem (que pode ser editado com yworks yed, por exemplo) pode ser encontrado aqui
David Tonhofer
8

Para converter "BEGIN OPENSSH PRIVATE KEY" em "BEGIN RSA PRIVATE KEY"

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
ahirapara
fonte
Isso é exatamente o que eu precisava. Obrigado!
RossD
Este comportamento está documentado indiretamente na página de manual do ssh-keygen, mas o uso do sinalizador -m não é mencionado para outros modos de operação além de -i e -o
ikrabbe