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
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
Respostas:
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 rsa
no 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.
cat server.crt server.key > server.pem
nã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.
server.crt server.key > server.includesprivatekey.pem
é útil para SSL com haproxy 1.5.
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
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/
Um pem
arquivo 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
-bash: server.key.pem: Permission denied
Além disso, se você não quiser solicitar uma senha, precisará executar o seguinte comando:
openssl rsa -in server.key -out server.key
-----BEGIN RSA PRIVATE KEY-----
e comece com -----BEGIN ENCRYPTED PRIVATE KEY-----
, este é o comando que você deseja usar.
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
openssl x509
. Ele emitirá um certificado PEM válido: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
neste 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 p
comando (print) se aplique às linhas entre a primeira linha que contém --BEGIN
e o final do arquivo ( $
).
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.
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
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
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
openssl pkcs12 -em YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts
.pem
em.crt
e.key
.