Pregunta ¿Qué es un archivo Pem y en qué se diferencia de otros formatos de archivos 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 los alejo hasta que finalmente funcione.

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 la buena gente aquí en ServerFault podría proporcionar alguna aclaración sobre este asunto.


1173
2018-05-19 02:24


origen


stackoverflow.com/a/45886431/1599699 - Andrew


Respuestas:


SSL ha existido durante el tiempo suficiente como para pensar que se acordarían 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 generarlas para enviarlas 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, todo lo demás, así como el Llave pública del certificado para ser firmado. Estos son firmados por la CA y se devuelve un certificado. El certificado devuelto es el público. certificado (que incluye la clave pública, pero no la clave privada), que puede estar en un par de formatos.
  • .pem - Definido en RFC 1421 mediante 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, incluida la clave pública, la clave privada y los certificados raíz. Confusamente, también puede codificar una CSR (por ejemplo, como se usa aquí) como el formato PKCS10 puede traducirse a PEM. El nombre es de Correo de privacidad mejorada (PEM), un método fallido para el correo electrónico seguro, pero el formato de contenedor que usó vive, y es una traducción base64 de las claves ASN.1 x509.
  • .llave - 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 reside frecuentemente en /etc/ssl/private. Los derechos sobre estos archivos son muy importantes, y algunos programas se negarán a cargar estos certificados si se configuran incorrectamente.
  • .pkcs12 .pfx .p12 - Originalmente definido por RSA en el Estándares de criptografía de clave pública (abreviado PKCS), la variante "12" se mejoró originalmente por Microsoft y luego se envió 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á totalmente 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 ve estos como archivos de certificado. De forma predeterminada, Windows exportará certificados como archivos con formato .DER con una extensión diferente. Me gusta...
  • .cert .cer .crt - Un archivo con formato .pem (o rara vez .der) con una extensión diferente, uno que el Explorador de Windows reconoce como un certificado, que no es .pem.
  • .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 estos de forma nativa, y utiliza a menudo .keystore como una extensión en su lugar. A diferencia de los certificados de estilo .pem, este formato tiene un definido Manera de incluir certificados de ruta de certificación.
  • .crl - Una lista de revocación de certificados. Las Autoridades de certificación producen estos como una forma de desautorizar certificados antes de su vencimiento. A veces se pueden descargar desde los sitios web de CA.

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

  • PEM - Gobernado por RFC, se utiliza preferentemente por software de código abierto. Puede tener una variedad de extensiones (.pem, .key, .cer, .cert, más)
  • PKCS7 - Un estándar abierto usado por Java y soportado por 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 de manera preferencial por los sistemas de 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 mucho de forma rutinaria fuera de Windows.

Espero que esto ayude.


1449
2018-05-19 02:49



Lo bueno de los estándares es que hay muchos para elegir ... - squillman
.crt es otra extensión común para .cert y .cer - David Pashley
PEM es un formato de archivo que puede consistir en un certificado (también conocido como clave pública), una clave privada o incluso ambos concatenados. No preste tanta atención a la extensión de archivo; significa correo mejorado con privacidad, un uso para el que no se vio mucho, pero el formato de archivo se mantuvo. - Dan Carley
Respuesta muy útil, pero no creo que haya cubierto el formato .pub creado por ssh-keygen. Sería útil saber cómo se relaciona con el resto. - Jez
No puedo dejar de notar que "Correo electrónico de privacidad mejorada" daría el acrónimo "PEE" en lugar de "PEM". Los RFC tienden a usar la frase "Correo con privacidad mejorada" - aidan


PEM en sí mismo 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 utilizando PEM.

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

Puede representar los mismos datos utilizando 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 pegar en el cuerpo de un mensaje de correo electrónico porque tiene líneas de anclaje y está limpio de 7 bits.

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


123
2018-06-06 15:19



¿Cómo haces esto "usando la línea de comandos de openssl"? - Samik R
Para convertir un archivo DER (.crt .cer .der) a PEM: openssl x509 -inform der -in cert.cer -out cert.pem. Para convertir un archivo PEM a DER: openssl x509 -outform der -in cert.pem -out certi.der. Para convertir un archivo PKCS # 12 (.pfx .p12) que contiene una clave privada y certificados a PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Para convertir un archivo de certificado PEM y una clave privada a PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crt Desde aquí - mpeac


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


51
2018-03-15 00:24



De hecho es cierto, me di cuenta de esto hoy. Tuve que ingresar un certificado PEM en el compartimiento de carga de Rackspace y me preguntaba si el crt generado estaba en ese formato. Pero funcionó así, así que esa fue también mi conclusión, la mayoría de estos .crt vienen en formato PEM, parece. - Glenn Plas