Como obter o arquivo .pem dos arquivos .key e .crt?

601

Como posso criar um arquivo PEM a partir de um certificado SSL?

Estes são os arquivos que tenho disponíveis:

  • .crt
  • server.csr
  • server.key
Sergio Rodriguez
fonte
2
Ao contrário: converta .pemem .crte.key .
Kenorb 17/05/19

Respostas:

801

Suas chaves já podem estar no formato PEM, mas apenas nomeadas com .crt ou .key.

Se o conteúdo do arquivo começar com -----BEGIN e você puder lê-lo em um editor de texto:

O arquivo usa base64, que é legível em ASCII, não no formato binário. O certificado já está no formato PEM. Basta alterar a extensão para .pem.

Se o arquivo estiver em binário:

Para o server.crt, você usaria

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

Para server.key, use openssl rsano lugar de openssl x509.

A server.key provavelmente é sua chave privada e o arquivo .crt é o certificado x509 retornado e assinado.

Se for para um servidor Web e você não puder especificar o carregamento de uma chave pública e privada separada:

Pode ser necessário concatenar os dois arquivos. Para este uso:

cat server.crt server.key > server.includesprivatekey.pem

Eu recomendaria nomear arquivos com "includesprivatekey" para ajudá-lo a gerenciar as permissões que você mantém com esse arquivo.

maxwellb
fonte
2
Verifique o formato da server.key. Eu apenas assumi que era RSA. Mas ler a primeira linha do arquivo provavelmente lhe dirá isso.
maxwellb
10
Apenas um aviso que cat server.crt server.key > server.pemnão colocará o comentário aberto em sua própria linha, o que parece ser um requisito. Correio de correio me deu um inferno e levei horas para descobrir o que estava errado.
Graham Walters
1
Obrigado Graham. Diferentes ferramentas geram os arquivos de maneira diferente e, por fim, algumas verificações são boas. Quando eu executei essas etapas, os arquivos terminaram com uma nova linha, por exemplo.
maxwellb
A dica sobre concatenar os arquivos .crt e .key juntos foi muito útil. Eu queria usar meu certificado com stunnel3, mas ele não tinha como especificar o arquivo de chave. Usando a concatenação funcionou. (Na verdade, como stunnel3 é um programa Perl, eu mesmo adicionei uma opção para ler o arquivo-chave. No entanto, como vi mais tarde a concatenação funcionar, reverti o stunnel3 para o código original.)
LS
2
Apenas uma ressalva em dizer que o gato server.crt server.key > server.includesprivatekey.pemé útil para SSL com haproxy 1.5.
precisa saber é o seguinte
224

Eu precisava fazer isso para um AWS ELB. Depois de ser espancado pelo diálogo várias vezes, finalmente foi isso que funcionou para mim:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

Obrigado NCZ

Edit: Como diz @floatingrock

Com a AWS, não esqueça de acrescentar o nome do arquivo file://. Então será parecido com:

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html

slf
fonte
19
Com a AWS, não esqueça de acrescentar o nome do arquivo file://. Assim, parecerá:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock
1
O segundo comando não faz nada se sua entrada é um arquivo pem, supondo que seja, você só precisa do primeiro comando
Kristofer
Impressionante! Isso funcionou bem para mim! Acabei de converter meus arquivos .key e .crt para .pem usando suas linhas de código e, em seguida, carreguei (copiar / colar) via console da AWS. Obrigado!
Diego D
79

Um pemarquivo contém o certificado e a chave privada. Depende do formato em que seu certificado / chave está, mas provavelmente é tão simples quanto isto:

cat server.crt server.key > server.pem
sth
fonte
Eu continuo recebendo-bash: server.key.pem: Permission denied
tq
2
@tq: Isso significa que você não tem permissão para ler ou gravar esse arquivo.
sth 25/03
obrigado @sth procurará por permissão. mas eu estava fazendo isso com os comandos sudo
tq
8
@tq: cat server.crt server.key | sudo tee server.pem
dimir
2
watchout para novas linhas que faltam nossa seu arquivo pem poderia ter ilegível linhas como ----- END CERTIFICATE ---------- BEGIN CERTIFICATE -----
Wolfgang Fahl
24

Além disso, se você não quiser solicitar uma senha, precisará executar o seguinte comando:

openssl rsa -in server.key -out server.key
rahul
fonte
9
Se você deseja um arquivo que comece com -----BEGIN RSA PRIVATE KEY-----e comece com -----BEGIN ENCRYPTED PRIVATE KEY-----, este é o comando que você deseja usar.
Philippe Gerber
18

esta é a melhor opção para criar arquivo .pem

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
GOrozco58
fonte
4

O que observei é: se você usa o openssl para gerar certificados, ele captura a parte do texto e a parte do certificado base64 no arquivo crt. O formato estrito do pem diz ( definição da wiki ) que o arquivo deve começar e terminar com BEGIN e END.

.pem - Certificado DER codificado em Base64, entre "----- COMEÇAR CERTIFICADO -----" e "----- TERMINAR CERTIFICADO -----"

Portanto, para algumas bibliotecas (eu encontrei isso em java) que esperam um formato estrito de pem, o crt gerado falharia na validação como um 'formato de pem inválido'.

Mesmo se você copiar ou grep as linhas com BEGIN / END CERTIFICATE e colá-lo em um arquivo cert.pem, ele deverá funcionar.

Aqui está o que eu faço, não muito limpo, mas funciona para mim, basicamente ele filtra o texto a partir da linha BEGIN:

grep -A 1000 BEGIN cert.crt> cert.pem

adityalad
fonte
1
outra opção é simplesmente passar o certificado não estrito openssl x509. Ele emitirá um certificado PEM válido: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode 17/07/2013
Se você deseja obter tudo, desde "INICIAR" até o final do arquivo, esse é um trabalho para sed. Especificamente, você deseja algo como sed -n '/--BEGIN/,$p' cert.crtneste caso. Para explicar isso: o "-n" diz ao sed para não imprimir nada por padrão e a expressão range /--BEGIN/,$faz com que o pcomando (print) se aplique às linhas entre a primeira linha que contém --BEGINe o final do arquivo ( $).
precisa saber é o seguinte
4

Eu estava tentando ir do godaddy para o app engine. O que o truque foi usar nesta linha:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

Exatamente como está, mas substituindo o nome pelo meu nome de domínio (não que isso realmente importasse)

E respondi a todas as perguntas referentes ao nome / organização comum como www.name.com

Então eu abri o csr, copiei, colei em go daddy, depois baixei, descompactei, naveguei até a pasta descompactada com o terminal e digitei:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

Em seguida, usei estas instruções de Problemas com o SSL do domínio personalizado do Google Apps , que eram:

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

exatamente como está, exceto que, em vez de privateKey.key, usei name.unencrypted.priv.key e, em vez de www_mydomain_com.crt, usei name.crt

Em seguida, carreguei o public.pem no console administrativo para o "certificado X.509 codificado pelo PEM" e carreguei o private.pem para a "chave privada RSA codificada pelo PEM não criptografada".

.. E isso finalmente funcionou.

Comunidade
fonte
4

Ao tentar fazer o upload de um certificado do GoDaddy para a AWS, falhei várias vezes, mas no final foi bem simples. Não há necessidade de converter nada para .pem. Você só precisa incluir o certificado do pacote GoDaddy no parâmetro chain, por exemplo,

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

E para excluir seu upload com falha anterior, você pode fazer

aws iam delete-server-certificate --server-certificate-name mypreviouscert
Skensell
fonte
Isso não funcionou para mim #An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis
4
  1. Faça o download do certificado do portal provisório por appleId,
  2. Exportar certificado do conjunto de chaves e nome (Certificates.p12),
  3. Abra o terminal e vá para a pasta onde você salva acima do arquivo Certificates.p12,
  4. Execute os comandos abaixo:

    a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes ,

    b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. Seu arquivo .pem está pronto para "pushcert.pem".
Ashvin Ajadiya
fonte
0
  • Terminal aberto.
  • Vá para a pasta em que seu certificado está localizado.
  • Execute o comando abaixo, substituindo o nome pelo seu certificado.

openssl pkcs12 -em YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • Espero que funcione !!
Dhaval H. Nena
fonte