it-swarm-es.com

¿Qué es un archivo Pem y en qué se diferencia de otros formatos de archivo de clave generados por OpenSSL?

Soy responsable de mantener dos servidores Debian. Cada vez que tengo que hacer algo con los certificados de seguridad, busco tutoriales en Google y me alejo hasta que finalmente funciona.

Sin embargo, en mis búsquedas a menudo me encuentro con diferentes formatos de archivo (.key, .csr, .pem) pero nunca he podido encontrar una buena explicación de cuál es el propósito de cada formato de archivo.

Me preguntaba si las buenas personas aquí en ServerFault podrían proporcionar alguna aclaración sobre este asunto.

1413
Noah Goodrich

SSL ha existido durante el tiempo suficiente como para pensar que se acordarían los formatos de contenedor. Y tienes razón, las hay. Demasiados estándares como sucede. Así que esto es lo que sé, y estoy seguro de que otros intervendrán.

  • . csr - Esta es una solicitud de firma de certificado. Algunas aplicaciones pueden generarlos para enviarlos a las autoridades de certificación. El formato real es PKCS10 que se define en RFC 2986 . Incluye algunos/todos los detalles clave del certificado solicitado, como el asunto, la organización, el estado, lo que sea, así como la ¡clave pública del certificado para firmar. Estos son firmados por la CA y se devuelve un certificado. El certificado devuelto es public certificate (que incluye la clave pública pero no la clave privada), que puede estar en un par de formatos.
  • . pem - Definido en RFC 1421 a 1424 , este es un formato contenedor que puede incluir solo el certificado público (como con las instalaciones de Apache y los archivos de certificado de CA /etc/ssl/certs), o puede incluir una cadena de certificados completa que incluye clave pública, clave privada y certificados raíz. Confusamente, también puede codificar una CSR (por ejemplo, como se usa aquí ) ya que el formato PKCS10 se puede traducir a PEM. El nombre es de Privacy Enhanced Mail (PEM) , un método fallido para correo electrónico seguro pero el formato del contenedor en el que se utiliza, y es una traducción base64 de las claves x509 ASN.1.
  • . key - Este es un archivo con formato PEM que contiene solo la clave privada de un certificado específico y es simplemente un nombre convencional y no uno estandarizado. En las instalaciones de Apache, esto con frecuencia reside en /etc/ssl/private. Los derechos sobre estos archivos son muy importantes, y algunos programas se negarán a cargar estos certificados si están configurados incorrectamente.
  • . pkcs12 .pfx .p12 - Definido originalmente por RSA en Estándares de criptografía de clave pública (PKCS abreviado), el " La variante de 12 "fue originalmente mejorada por Microsoft, y luego presentada como RFC 7292 . Este es un formato de contenedor con contraseña que contiene pares de certificados públicos y privados. A diferencia de los archivos .pem, este contenedor está completamente encriptado. Openssl puede convertir esto en un archivo .pem con claves públicas y privadas: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Algunos otros formatos que aparecen de vez en cuando:

  • . der - Una forma de codificar la sintaxis ASN.1 en binario, un archivo .pem es solo un archivo .der codificado en Base64. OpenSSL puede convertirlos a .pem (openssl x509 -inform der -in to-convert.der -out converted.pem). Windows los ve como archivos de certificado. De manera predeterminada, Windows exportará los certificados como archivos con formato .DER con una extensión diferente. Me gusta...
  • . cert .cer .crt - Un archivo formateado .pem (o rara vez .der) con una extensión diferente, que el Explorador de Windows reconoce como certificado, que .pem no lo es.
  • . p7b .keystore - Definido en RFC 2315 como PKCS número 7, este es un formato utilizado por Windows para el intercambio de certificados. Java entiende esto de forma nativa, y a menudo usa .keystore como una extensión en su lugar. A diferencia de los certificados de estilo .pem, este formato tiene una forma definida de incluir certificados de ruta de certificación.
  • . crl - Una lista de revocación de certificados. Las autoridades de certificación los producen como una forma de desautorizar los certificados antes de su vencimiento. A veces puede descargarlos de los sitios web de CA.

En resumen, hay cuatro formas diferentes de presentar certificados y sus componentes:

  • [~ # ~] pem [~ # ~] - Gobernado por RFC, se usa preferentemente por software de código abierto. Puede tener una variedad de extensiones (.pem, .key, .cer, .cert, más)
  • PKCS7 - Un estándar abierto utilizado por Java y compatible con Windows. No contiene material de clave privada.
  • PKCS12 - Un estándar privado de Microsoft que luego se definió en un RFC que proporciona seguridad mejorada en comparación con el formato PEM de texto sin formato. Esto puede contener material de clave privada. Se usa preferentemente por los sistemas Windows, y se puede convertir libremente al formato PEM mediante el uso de openssl.
  • [~ # ~] der [~ # ~] - El formato padre de PEM. Es útil considerarlo como una versión binaria del archivo PEM codificado en base64. No se usa habitualmente mucho fuera de Windows.

Espero que esto ayude.

1730
sysadmin1138

PEM por sí solo no es un certificado, es solo una forma de codificar datos. Los certificados X.509 son un tipo de datos que comúnmente se codifican con PEM.

PEM es un certificado X.509 (cuya estructura se define usando ASN.1), codificado usando el ASN.1 DER (reglas de codificación distinguidas), luego se ejecuta a través de la codificación Base64 y se atasca entre las líneas de anclaje de texto sin formato (BEGIN CERTIFICATE y END CERTIFICATE ).

Puede representar los mismos datos usando las representaciones PKCS # 7 o PKCS # 12, y la utilidad de línea de comandos openssl se puede usar para hacer esto.

Los beneficios obvios de PEM es que es seguro pegarlo en el cuerpo de un mensaje de correo electrónico porque tiene líneas de anclaje y está limpio en 7 bits.

RFC1422 tiene más detalles sobre el estándar PEM en lo que se refiere a claves y certificados.

146
James F

A veces un .crt el archivo ya es un .pem. Ver: https://stackoverflow.com/questions/991758/openssl-pem-key

57
mgold