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?

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

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.