O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chaves gerados do OpenSSL?

1188

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

No entanto, em minhas pesquisas, geralmente encontro formatos de arquivo diferentes ( .key , .csr , .pem ), mas nunca consegui 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 algum esclarecimento sobre este assunto?

    
por Noah Goodrich 19.05.2009 / 04:24

3 respostas

1461

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

  • .csr - esta é uma solicitação de assinatura de certificado. Alguns aplicativos podem gerá-los para envio a autoridades de certificação. O formato atual é PKCS10, que é definido em RFC 2986 . Ele inclui alguns / todos os detalhes importantes do certificado solicitado, como assunto, organização, estado, e a chave pública do certificado para ser assinado. Estes 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 nos RFCs 1421 através de 1424 , esse é um formato de contêiner que pode incluir apenas o certificado público (como com instalações do Apache e arquivos de certificado de CA /etc/ssl/certs ) ou pode incluir uma cadeia inteira de certificados incluindo chave pública, chave privada e certificados raiz. Confusamente, também pode codificar um CSR (por exemplo, como usado aqui ) como o formato PKCS10 pode ser traduzido em PEM. O nome é de Privacy Enhanced Mail (PEM) , um método com falha para email seguro, mas o formato de contêiner usado usava vidas on, e é uma tradução base64 das chaves x509 ASN.1.
  • .key - Este é um arquivo formatado em PEM contendo apenas a chave privada de um certificado específico e é meramente um nome convencional e não um nome padronizado. Nas instalações do Apache, isso frequentemente reside em /etc/ssl/private . Os direitos sobre esses arquivos são muito importantes, e alguns programas se recusarão a carregar esses certificados se estiverem errados.
  • .pkcs12 .pfx .p12 - Originalmente definido pela 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 . Esse é 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. 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 de tempos em tempos:

  • .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 .DER com uma extensão diferente. Como ...
  • .cert .cer .crt - Um arquivo formatado .pem (ou raramente .der) com uma extensão diferente, reconhecida pelo Windows Explorer como um certificado, que .pem não é.
  • .p7b .keystore - Definido em RFC 2315 como número 7 do PKCS, este é um formato usado pelo Windows para o intercâmbio de certificados. O Java entende isso de forma nativa e geralmente usa .keystore como extensão. Ao contrário dos certificados de estilo .pem, esse formato tem uma maneira definida para incluir certificados de caminho de certificação.
  • .crl - Uma lista de revogação de certificados. As Autoridades de Certificação as produzem como uma maneira de desautorizar os certificados antes da expiração. Às vezes, você pode baixá-los dos sites da CA.

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

  • PEM - regido por RFCs, é usado preferencialmente por software de código aberto. Pode ter uma variedade de extensões (.pem, .key, .cer, .cert, more)
  • PKCS7 - Um padrão aberto usado pelo Java e suportado pelo Windows. Não contém material de chave privada.
  • PKCS12 - Um padrão privado da Microsoft que foi posteriormente definido em um RFC que fornece segurança aprimorada em relação ao formato PEM de texto simples. 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 de 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.

Espero que isso ajude.

    
por 19.05.2009 / 04:49
125

O PEM por si só não é um certificado, é apenas uma maneira de codificar dados. Os certificados X.509 são um tipo de dado comumente 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), executado na codificação Base64 e preso entre linhas de âncora 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 e-mail porque tem linhas de ancoragem e é de 7 bits.

O RFC1422 tem mais detalhes sobre o padrão PEM, pois está relacionado a chaves e certificados.

    
por 06.06.2009 / 17:19
51

Às vezes, um arquivo .crt já é um .pem . Consulte: link

    
por 15.03.2012 / 01:24