ti-enxame.com

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

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, nas minhas pesquisas, geralmente encontro diferentes formatos de arquivo (.key, .csr, .pem) mas nunca consegui encontrar uma boa explicação sobre qual é o objetivo de cada formato de arquivo.

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

1413
Noah Goodrich

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 em RFC 2986 . Ele inclui alguns/todos os detalhes importantes do certificado solicitado, como assunto, organização, estado, outros enfeites, além da chave pública do certificado a ser assinado. Eles são assinados pela CA e um certificado é retornado. O certificado retornado é o público certificate (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 , este é um formato de contêiner que pode incluir apenas o certificado público (como as instalações do Apache e os arquivos de certificado da CA /etc/ssl/certs) ou pode incluir uma cadeia inteira de certificados, incluindo chave pública, chave privada e certificados raiz. De maneira confusa, ele também pode codificar um CSR (por exemplo, conforme 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 reside 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 definido pelo RSA no Public-Key Cryptography Standards (PKCS abreviado), o " A variante de 12 "foi aprimorada originalmente 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, que .pem não é.
  • . p7b .keystore - Definido em RFC 2315 como número PKCS 7, este é um formato usado pelo Windows para troca de certificados. Java entende isso nativamente e geralmente usa .keystore como uma extensão. Diferentemente dos certificados no estilo .pem, esse formato possui uma maneira definida para 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 por Java e suportado pelo Windows. Não contém material de chave privada.
  • PKCS12 - Um padrão privado da Microsoft que foi definido posteriormente em uma 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.

1730
sysadmin1138

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 de ancoragem 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.

RFC1422 possui mais detalhes sobre o padrão PEM, que se refere a chaves e certificados.

146
James F

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

57
mgold