¿Cuál es la diferencia entre X.509 y el certificado PKCS # 7?

45
  1. ¿Estoy corrigiendo el archivo de llamada con la extensión de archivo .p7b guardada como 'Estándar de sintaxis criptográfica de mensajes - Certificados PKCS # 7 (.P7B)' en Windows - un 'certificado PKCS # 7'? ¿O es mejor llamarlo 'Certificado X.509 guardado en formato PKCS # 7'?

  2. ¿Cuándo elegiría un formato de certificado en lugar de otro? ¿Estos formatos tienen alguna fortaleza o debilidad en particular?

  3. Agregando esta pregunta después de mis dos primeras ediciones. ¿En qué se diferencia el formato PKCS # 7 en comparación con los formatos de archivo DER / PEM?

Gracias

Edición # 1: Firefox bajo Linux me ofrece la posibilidad de exportar el certificado de algunos sitios web como:

  • Certificado X.509 (PEM)
  • Certificado X.509 (DER)
  • Certificado X.509 (PKCS # 7)

¿Significa que PKCS # 7 aquí es solo un formato de archivo binario similar pero distinto de DER? Si es verdadero, entonces el archivo .p7b es solo un certificado X.509 guardado en formato PKCS # 7 (a diferencia de los formatos PEM o DER).

Editar # 2: seguimiento a mi primera edición. Esta página OpenSSL: Documents, pkcs7 sugiere que PKCS # 7 se puede cifrar en DER o PEM. De eso deduzco que PKCS # 7 no es un formato de archivo binario distinto. Ahora estoy totalmente confundido.

Edit # 3: Ok, me di cuenta de la relación entre los formatos PEM y DER. La carga útil codificada en Base64 del archivo PEM son en realidad datos en formato DER. Entonces, inicialmente el certificado X.509 está codificado en formato DER y luego, opcionalmente, puede codificar el 'certificado codificado DER' resultante a 'certificado codificado PEM'. Todavía tengo dificultades para adaptar PKCS # 7 parte del rompecabezas.

Editar # 4: Otra pieza de información. PKCS # 7 parece ser un contenedor que permite agrupar varios certificados X.509 antes de codificarlos en formato DER (que es diferente del formato PEM, donde puede agrupar certificados en el mismo archivo simplemente pegándolos uno tras otro) .

    
pregunta golem 18.11.2014 - 23:56
fuente

2 respuestas

47

Has evolucionado hacia la mayor parte del derecho, pero para agregar varios puntos y expandir en @CoverosGene más de lo que me sentía cómodo haciendo en una edición:

X.509 define un certificado (y algunas otras cosas que no son relevantes aquí) en ASN.1, Un (muy!) método general de estructuración de datos que tiene varias codificaciones definidas, de las cuales DER La representación de codificación distinguida es bastante común y se usa aquí.

Formato

PEM - para varios tipos de datos de los cuales un certificado es solo uno - es lo que usted dice, simplemente los datos binarios (DER) codificados en base64 (editar) divididos en líneas normalmente cada 64 caracteres (pero hay variaciones), más las líneas de encabezado y final. consiste en guiones + BEGIN o END + el tipo de datos, en este caso CERTIFICADO + guiones. Esas líneas parecen redundantes para un humano, pero son esperadas y en su mayoría son requeridas por el software. PEM (Privacy Enhanced Mail) era en realidad un estándar completo para correo electrónico seguro que ahora tiene Se ha olvidado en su mayoría (ver más abajo) excepto por su formato de codificación. (editar) A partir de 2015 hay RFC 7468 que describe en detalle la mayoría uso de formatos 'PEM' para datos criptográficos modernos.

PKCS # 7 fue definido por RSA (la compañía, no el algoritmo) como un formato multiuso. Para datos encriptados y / o firmados. Fue entregado a IETF y se convirtió en Sintaxis de mensajes criptográficos de CMS enlace luego enlace luego enlace luego enlace , de ahí la redacción del indicador de Windows (inetopt). "PKCS # 7" se usa a menudo para referirse a ambos El RSA PKCS # 7 original y el CMS sucesor de IETF, de la misma manera que "SSL" se usa a menudo para tanto el protocolo original de Netscape como el sucesor de IETF TLS Transport Level Security.

El formato .p7b o .p7c es un caso especial de PKCS # 7 / CMS: una estructura SignedData que contiene sin "contenido" y cero SignerInfos, pero uno o más certificados (generalmente) y / o CRL (raramente). Retrocedió cuando esto proporcionó una manera estándar de manejar (editar) el conjunto de certificados necesarios para formar una cadena (no necesariamente en orden).

PKCS # 7 / CMS es (son?) también ASN.1 y, dependiendo de las circunstancias, puede ser DER o BER , una codificación estrechamente relacionada con algunas diferencias muy pequeñas que la mayoría de los decodificadores DER manejan.

Aunque PKCS # 7 / CMS como cualquier objeto DER o BER puede tener formato PEM, no he visto ninguna implementación que no sea openssl (editar) es raro para los certificados. (Java CertificateFactory puede leer PKCS7 / CMS-certs-only desde DER o PEM, pero CertPath.getEncoded lo escribe solo en DER.) En contraste, los formatos DER y PEM para un único certificado son comunes.

PKCS # 7 / CMS también se usa como base para el correo electrónico seguro S / MIME (múltiples rfcs a partir de 5751). Básicamente, PEM codificó PKCS # 7 en texto ASCII que los sistemas de correo electrónico de la década de 1980 podrían manejar fácilmente, mientras que S / MIME representa CMS como entidades MIME que están codificadas en varias formas en que los sistemas de correo electrónico modernos pueden manejar.

OpenSSL asuntos confusos al implementar, en orden: un comando pkcs7 que maneja el caso certs-CRLs only no está lleno PKCS # 7; un comando crl2pkcs7 que realmente maneja CRLs y certificados, pero de nuevo no el resto de PKCS # 7; un comando smime que realmente maneja tanto S / MIME y PKCS # 7 / CMS para la mayoría de los casos de mensajes cifrados y / o firmados; y un comando cms que realmente maneja tanto S / MIME como PKCS # 7 / CMS para un conjunto de casos más completo.

Así que describiría las opciones como: un certificado en formato PEM o DER; un (solo) certificado en un contenedor PKCS # 7 o para abreviar solo p7, y mencione PEM solo en el caso raro que se aplique; o una cadena de certificados en PKCS # 7 o p7. La diferencia semántica entre un solo certificado y una cadena de certificados. es al menos tan importante como la diferencia de formato entre un certificado solo o en un contenedor.

Y esto ni siquiera llega a la confusión generalizada entre un certificado por sí mismo (para alguna otra entidad, en la mayoría de los casos una raíz CA o un ancla) y la combinación del certificado PLUS de clave privada, o generalmente una cadena, que se usa para pruebe su propia identidad, por ejemplo, como un servidor SSL / TLS o al firmar un correo electrónico S / MIME. Eso utiliza el formato original de intercambio de información personal de Microsoft PFX, o su formulario estandarizado PKCS # 12 o "p12".

    
respondido por el dave_thompson_085 19.11.2014 - 17:01
fuente
8

PKCS # 7 se puede considerar como un formato que permite agrupar varios certificados, ya sea con codificación DER o PEM, y puede incluir certificados y listas de revocación de certificados (CRL).

Por RFC2315 , PKCS # 7 is

a general syntax for data that may have
cryptography applied to it, such as digital signatures and digital
envelopes. The syntax admits recursion, so that, for example, one
envelope can be nested inside another, or one party can sign some
previously enveloped digital data.
    
respondido por el CoverosGene 19.11.2014 - 15:22
fuente

Lea otras preguntas en las etiquetas