Qual è la differenza tra il certificato X.509 e PKCS # 7?

45
  1. Sto correggendo il file di chiamata con l'estensione di file .p7b salvata come 'Cryptographic Message Syntax Standard - PKCS # 7 Certificates (.P7B)' in Windows - un 'certificato PKCS # 7'? O è meglio chiamare "certificato X.509 salvato in formato PKCS # 7"?

  2. Quando si sceglie un formato di certificato rispetto ad un altro? Questi formati hanno punti di forza o punti deboli particolari?

  3. Aggiunta di questa domanda dopo le mie prime due modifiche. In che modo il formato PKCS # 7 è diverso rispetto ai formati di file DER / PEM?

Grazie

Modifica n. 1: Firefox sotto Linux mi offre la possibilità di esportare il certificato di un sito Web come:

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

Significa che PKCS # 7 qui è solo un formato di file binario simile ma distinto da DER? Se vero, il file .p7b è solo un certificato X.509 salvato nel formato PKCS # 7 (diversamente dai formati PEM o DER).

Modifica n. 2: segui fino alla mia prima modifica. Questa pagina OpenSSL: Documents, pkcs7 suggerisce che PKCS # 7 può essere crittografato in DER o PEM. Da ciò deduco che PKCS # 7 non è un formato file binario distinto. Ora sono totalmente confuso.

Edit # 3: Ok, ho capito la relazione tra i formati PEM e DER. Il carico utile codificato Base64 del file PEM è in realtà dati in formato DER. Quindi inizialmente il certificato X.509 è codificato in formato DER e quindi, facoltativamente, è possibile codificare il risultato "certificato codificato DER" in "certificato codificato PEM". Sto ancora riscontrando difficoltà nell'adattare la parte PKCS # 7 del puzzle.

Modifica n. 4: un'altra informazione. PKCS # 7 sembra essere un contenitore che consente di raggruppare diversi certificati X.509 prima di codificarli in formato DER (che è diverso dal formato PEM in cui è possibile raggruppare i certificati insieme nello stesso file semplicemente incollandoli uno dopo l'altro) .

    
posta golem 18.11.2014 - 23:56
fonte

2 risposte

47

Ti sei evoluto per lo più giusto, ma per aggiungere diversi punti ed espandi @CoverosGene più di quanto mi sentissi a mio agio in una modifica:

X.509 definisce un certificato (e alcune altre cose non rilevanti qui) in ASN.1, un (molto!) metodo generale di strutturazione dei dati che ha diverse codifiche definite, di cui DER La rappresentazione della codifica distinta è abbastanza comune e viene utilizzata qui.

Formato

PEM - per diversi tipi di dati di cui un certificato è solo uno - è come dici tu solo dati binari (DER) codificati in base64 (modifica) suddivisi in righe normalmente ogni 64 caratteri (ma ci sono variazioni), oltre a intestazione e linee di rimorchio composto da trattini + BEGIN o END + il tipo di dati, in questo caso CERTIFICATO + trattini. Queste linee sembrano ridondanti per un essere umano, ma sono previste e per lo più richieste dal software. PEM (Privacy Enhanced Mail) era in realtà uno standard completo per la posta elettronica sicura che ha ora stato per lo più dimenticato (vedi sotto) tranne per il suo formato di codifica. (modifica) A partire dal 2015 è RFC 7468 che descrive in dettaglio la maggior parte uso di formati "PEM" per i moderni dati crittografici.

PKCS # 7 è stato definito da RSA (la società, non l'algoritmo) come formato multiuso per dati crittografati e / o firmati. È stato consegnato a IETF e si è evoluto in Sintassi dei messaggi crittografici CMS link quindi link quindi link quindi link , da qui la formulazione del prompt di Windows (inetopt). "PKCS # 7" è spesso usato per significare entrambi l'originale RSA PKCS # 7 e il successore IETF CMS, nello stesso modo "SSL" viene spesso utilizzato per sia il protocollo Netscape originale che il TLS Transport Level Security di IETF.

Il formato .p7b o .p7c è un caso speciale di PKCS # 7 / CMS: una struttura SignedData contenente nessun "contenuto" e zero SignerInfos, ma uno o più certificati (di solito) e / o CRL (raramente). Quando questo ha fornito un modo standard per gestire (modifica) il set di certificati necessari per creare una catena (non necessariamente in ordine).

PKCS # 7 / CMS è (sono?) anche ASN.1 e in base alle circostanze può essere DER o BER , una codifica strettamente correlata con alcune differenze molto minori che la maggior parte dei decodificatori DER gestisce.

Mentre PKCS # 7 / CMS come qualsiasi oggetto DER o BER può essere formattato PEM, Non ho visto alcuna implementazione diversa da openssl (modifica) è raro per i certs. (Java CertificateFactory può leggere PKCS7 / CMS-certs-only da DER o PEM, ma CertPath.getEncoded lo scrive solo su DER.) Al contrario, i formati DER e PEM per un singolo certificato sono comuni.

PKCS # 7 / CMS viene anche utilizzato come base per l'email sicura S / MIME (più file rfcs a partire da 5751). Fondamentalmente PEM codifica PKCS # 7 in testo ASCII che i sistemi di posta elettronica degli anni '80 potrebbero facilmente gestire, mentre S / MIME rappresenta CMS come entità MIME che sono codificate in diversi modi in cui i moderni sistemi di posta elettronica possono gestire.

OpenSSL argomenti confusi implementando, nell'ordine: un comando pkcs7 che gestisce il caso Certs-CRL-only non completo PKCS # 7; un comando crl2pkcs7 che effettivamente gestisce CRL e certificati, ma ancora non il resto di PKCS # 7; un comando smime che gestisce effettivamente entrambi S / MIME e PKCS # 7 / CMS per la maggior parte dei casi di messaggi crittografati e / o firmati; e un comando cms che gestisce effettivamente sia S / MIME che PKCS # 7 / CMS per un set di casi più completo.

Quindi descriverei le opzioni come: un certificato in formato PEM o DER; un (singolo) certificato in un contenitore PKCS # 7 o in breve solo p7 e menziona PEM solo nel raro caso in cui si applica; o una catena di certificati in PKCS # 7 o p7. La differenza semantica tra un singolo cert e una catena di cert è importante almeno quanto la differenza di formato tra un certificato di per sé o un contenitore.

E questo non raggiunge nemmeno la diffusa confusione tra un certificato di per sé (per qualche altra entità, più spesso una radice o un ancoraggio della CA) e la combinazione del certificato privatekey PLUS - o solitamente della catena - che usi per dimostrare la propria identità, ad esempio come server SSL / TLS o quando si firma l'e-mail S / MIME. Che utilizza il formato originale di scambio di informazioni personali PFX di Microsoft o il suo modulo standard PKCS # 12 o "p12".

    
risposta data 19.11.2014 - 17:01
fonte
8

PKCS # 7 può essere pensato come un formato che consente di raggruppare più certificati insieme, codificati DER o PEM, e può includere certificati e elenchi di revoche di certificati (CRL).

Per RFC2315 , PKCS # 7 è

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.
    
risposta data 19.11.2014 - 15:22
fonte

Leggi altre domande sui tag