O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada OpenSSL?

1344

Eu sou responsável por manter dois servidores Debian. Toda vez que tenho que fazer alguma coisa com certificados de segurança, busco tutoriais no Google e vou embora até que finalmente funcione.

No entanto, em minhas pesquisas eu muitas vezes deparamos com diferentes formatos de arquivo ( .key, .csr, .pem), mas eu nunca fui capaz de encontrar uma boa explicação sobre o propósito de cada formato de arquivo é.

Eu queria saber se as pessoas boas aqui no ServerFault poderiam fornecer alguns esclarecimentos sobre este assunto?

Noah Goodrich
fonte

Respostas:

1656

O SSL existe há bastante tempo, você acha que haveria um acordo sobre os formatos dos contêineres. E você está certo, existem. Muitos padrões como isso acontece. Então é isso que eu sei, e tenho certeza de que outros irão gritar.

  • .csr - esta é uma solicitação de assinatura de certificado. Alguns aplicativos podem gerá-los para envio às autoridades de certificação. O formato real é PKCS10, definido na RFC 2986 . Inclui alguns / todos os detalhes importantes do certificado solicitado, como assunto, organização, estado, outros enfeites, bem como a chave pública do certificado a ser assinado. Eles são assinados pela CA e um certificado é retornado. O certificado retornado é o certificado público (que inclui a chave pública, mas não a chave privada), que pode estar em alguns formatos.
  • .pem - Definido nas RFCs 1421 a 1424 , é um formato de contêiner que pode incluir apenas o certificado público (como instalações do Apache e arquivos de certificado da CA /etc/ssl/certs) ou pode incluir uma cadeia de certificados inteira, incluindo chave pública, chave privada e certificados raiz. De maneira confusa, ele também pode codificar um CSR (por exemplo, como usado aqui ), pois o formato PKCS10 pode ser traduzido para o PEM. O nome é de Privacy Enhanced Mail (PEM) , um método com falha para email seguro, mas o formato do contêiner usado permanece e é uma tradução base64 das chaves x509 ASN.1.
  • .key - Este é um arquivo formatado em PEM que contém apenas a chave privada de um certificado específico e é apenas um nome convencional e não padronizado. Nas instalações do Apache, isso geralmente ocorre em /etc/ssl/private. Os direitos sobre esses arquivos são muito importantes e alguns programas se recusam a carregar esses certificados se estiverem configurados incorretamente.
  • .pkcs12 .pfx .p12 - Originalmente definida pelo RSA nos Padrões de criptografia de chave pública (PKCS abreviado), a variante "12" foi originalmente aprimorada pela Microsoft e posteriormente enviada como RFC 7292 . Este é um formato de contêiner com senha que contém pares de certificados públicos e privados. Ao contrário dos arquivos .pem, esse contêiner é totalmente criptografado. O Openssl pode transformar isso em um arquivo .pem com chaves públicas e privadas:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Alguns outros formatos que aparecem periodicamente:

  • .der - Uma maneira de codificar a sintaxe ASN.1 em binário, um arquivo .pem é apenas um arquivo .der codificado em Base64. O OpenSSL pode convertê-los em .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem). O Windows os vê como arquivos de certificado. Por padrão, o Windows exportará certificados como arquivos formatados em .DER com uma extensão diferente. Gostar...
  • .cert .cer .crt - um arquivo formatado .pem (ou raramente .der) com uma extensão diferente, reconhecida pelo Windows Explorer como um certificado, e não .pem.
  • .p7b .keystore - Definido no RFC 2315 como PKCS número 7, é um formato usado pelo Windows para troca de certificados. O Java entende isso nativamente e, em geral, usa .keystorecomo uma extensão. Ao contrário dos certificados no estilo .pem, esse formato tem uma maneira definida de incluir certificados de caminho de certificação.
  • .crl - uma lista de revogação de certificado. As autoridades de certificação as produzem como uma maneira de desautorizar os certificados antes da expiração. Às vezes, você pode baixá-los nos sites da CA.

Em resumo, existem quatro maneiras diferentes de apresentar certificados e seus componentes:

  • PEM - Governado por RFCs, é usado preferencialmente por software de código aberto. Pode ter uma variedade de extensões (.pem, .key, .cer, .cert, mais)
  • PKCS7 - Um padrão aberto usado pelo Java e suportado pelo Windows. Não contém material de chave privada.
  • PKCS12 - Um padrão particular da Microsoft que foi definido posteriormente em um RFC que fornece segurança aprimorada em relação ao formato PEM em texto sem formatação. Isso pode conter material de chave privada. É usado preferencialmente pelos sistemas Windows e pode ser livremente convertido para o formato PEM através do uso do openssl.
  • DER - O formato pai do PEM. É útil pensar nisso como uma versão binária do arquivo PEM codificado em base64. Não é usado rotineiramente muito fora do Windows.

Eu espero que isso ajude.

sysadmin1138
fonte
297
A grande coisa sobre padrões é que há tantos para escolher ...
squillman
36
.crt é outra extensão comum para .cert e cer
David Pashley
44
PEM é um formato de arquivo que pode consistir em um certificado (também conhecido como chave pública), uma chave privada ou mesmo concatenadas. Não preste muita atenção à extensão do arquivo; isso significa o Privacy Enhanced Mail, um uso para o qual não havia muito uso, mas o formato do arquivo permaneceu por aí.
22811 Dan Carley
20
Resposta muito útil, mas acho que você não cobriu o formato .pub criado por ssh-keygen. Seria útil saber como isso se relaciona com o resto.
Jez
24
Não é possível deixar de notar "Privacidade aprimorada por e-mail" com o acrônimo "PEE" em vez de "PEM". Os RFCs tendem a usar a frase "Privacy Enhanced Mail"
Aidan
141

O PEM por si só não é um certificado, é apenas uma maneira de codificar dados. Os certificados X.509 são um tipo de dados geralmente codificado usando o PEM.

O PEM é um certificado X.509 (cuja estrutura é definida usando ASN.1), codificado usando o ASN.1 DER (regras de codificação distintas), depois é executado através da codificação Base64 e preso entre as linhas âncoras de texto simples (BEGIN CERTIFICATE e END CERTIFICATE )

Você pode representar os mesmos dados usando as representações PKCS # 7 ou PKCS # 12, e o utilitário de linha de comando openssl pode ser usado para fazer isso.

Os benefícios óbvios do PEM é que é seguro colar no corpo de uma mensagem de email porque possui linhas de ancoragem e é limpo em 7 bits.

O RFC1422 possui mais detalhes sobre o padrão PEM, relacionado a chaves e certificados.

James F
fonte
1
Como você faz isso "usando a linha de comando openssl"?
precisa saber é o seguinte
2
Para converter um arquivo DER (.crt cer .der) para PEM: openssl x509 -inform der -in cert.cer -out cert.pem. Para converter um arquivo PEM DER: openssl x509 -outform der -in cert.pem -out certi.der. Para converter um arquivo PKCS # 12 (.pfx .p12) contendo uma chave privada e certificados para PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Para converter um arquivo de certificado PEM e uma chave privada em PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtA partir daqui
mpeac
55

Às vezes, um .crtarquivo já é um arquivo .pem. Consulte: https://stackoverflow.com/questions/991758/openssl-pem-key

mgold
fonte
4
Na verdade, acabei de perceber isso hoje. Eu tive que inserir um certificado PEM no loadbalancer do rackspace e queria saber se o crt gerado estava nesse formato. Mas funcionou assim, então essa foi a minha conclusão também, a maioria desses arquivos .crt vem no formato PEM, ao que parece.
Glenn Plas
O @GlennPlas concentra-se no lugar do conteúdo do arquivo, não no nome ou na extensão. Poderia ser chamado .foobarpara tudo o que importa ...
Patrick Mevzek 16/09