Che cos'è un file Pem e in cosa differisce dagli altri formati di file chiave generati da OpenSSL?


1344

Sono responsabile del mantenimento di due server Debian. Ogni volta che devo fare qualcosa con i certificati di sicurezza, ho Google per tutorial e battuto fino a quando finalmente funziona.

Tuttavia, nelle mie ricerche spesso mi imbatto in diversi formati di file ( .key, .csr, .pem), ma non sono mai stato in grado di trovare una buona spiegazione di ciò che lo scopo di ogni formato di file è.

Mi chiedevo se le brave persone qui a ServerFault potessero fornire qualche chiarimento in merito?


Risposte:


1656

SSL è in circolazione da abbastanza tempo che potresti pensare che ci sarebbero accordi sui formati container. E hai ragione, ci sono. Troppi standard come succede. Quindi questo è quello che so, e sono sicuro che altri entreranno.

  • .csr - Questa è una richiesta di firma del certificato. Alcune applicazioni possono generarle per l'invio alle autorità di certificazione. Il formato effettivo è PKCS10 che è definito in RFC 2986 . Include alcuni / tutti i dettagli chiave del certificato richiesto come soggetto, organizzazione, stato, quant'altro, nonché la chiave pubblica del certificato per ottenere la firma. Questi vengono firmati dalla CA e viene restituito un certificato. Il certificato restituito è il certificato pubblico (che include la chiave pubblica ma non la chiave privata), che a sua volta può essere in un paio di formati.
  • .pem : definito nelle RFC da 1421 a 1424 , si tratta di un formato contenitore che può includere solo il certificato pubblico (come con installazioni Apache e file di certificato CA /etc/ssl/certs) o può includere un'intera catena di certificati tra cui chiave pubblica, chiave privata e certificati di root. Confusamente, può anche codificare un CSR (ad esempio, come utilizzato qui ) poiché il formato PKCS10 può essere tradotto in PEM. Il nome deriva da Privacy Enhanced Mail (PEM) , un metodo non riuscito per l'e-mail sicura, ma il formato contenitore che utilizzava vive ed è una traduzione base64 delle chiavi ASN.1 x509.
  • .key - Questo è un file in formato PEM contenente solo la chiave privata di un certificato specifico ed è semplicemente un nome convenzionale e non standardizzato. Nelle installazioni di Apache, questo risiede spesso in /etc/ssl/private. I diritti su questi file sono molto importanti e alcuni programmi rifiuteranno di caricare questi certificati se impostati in modo errato.
  • .pkcs12 .pfx .p12 - Originariamente definita da RSA negli standard di crittografia a chiave pubblica (abbreviato PKCS), la variante "12" è stata originariamente migliorata da Microsoft e successivamente presentata come RFC 7292 . Questo è un formato contenitore con password che contiene coppie di certificati sia pubbliche che private. A differenza dei file .pem, questo contenitore è completamente crittografato. Openssl può trasformarlo in un file .pem con chiavi sia pubbliche che private:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Alcuni altri formati che appaiono di volta in volta:

  • .der - Un modo per codificare la sintassi ASN.1 in binario, un file .pem è solo un file .der con codifica Base64. OpenSSL può convertirli in .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem). Windows li vede come file di certificato. Per impostazione predefinita, Windows esporterà i certificati come file in formato .DER con un'estensione diversa. Piace...
  • .cert .cer .crt - Un file in formato .pem (o raramente .der) con una diversa estensione, riconosciuto da Esplora risorse come certificato, che non è .pem.
  • .p7b .keystore - Definito in RFC 2315 come PKCS numero 7, questo è un formato utilizzato da Windows per lo scambio di certificati. Java li capisce in modo nativo e spesso usa invece .keystorecome estensione. A differenza dei certificati di stile .pem, questo formato ha un modo definito di includere certificati del percorso di certificazione.
  • .crl : un elenco di revoche di certificati. Le autorità di certificazione producono questi come un modo per autorizzare i certificati prima della scadenza. A volte è possibile scaricarli dai siti Web di CA.

In breve, ci sono quattro modi diversi per presentare i certificati e i loro componenti:

  • PEM : governato da RFC, viene utilizzato preferibilmente da software open source. Può avere una varietà di estensioni (.pem, .key, .cer, .cert, altro)
  • PKCS7 - Uno standard aperto utilizzato da Java e supportato da Windows. Non contiene materiale chiave privata.
  • PKCS12 - Uno standard privato Microsoft che è stato successivamente definito in una RFC che fornisce una sicurezza avanzata rispetto al formato PEM in testo normale. Questo può contenere materiale chiave privata. È usato preferenzialmente dai sistemi Windows e può essere liberamente convertito in formato PEM tramite openssl.
  • DER - Il formato principale di PEM. È utile pensarlo come una versione binaria del file PEM con codifica base64. Di routine non molto usato al di fuori di Windows.

Spero che questo possa essere d'aiuto.


297
La cosa grandiosa degli standard è che ce ne sono così tanti tra cui scegliere ...
Squillman,

36
.crt è un'altra estensione comune per .cert e .cer
David Pashley,

44
PEM è un formato di file che può consistere in un certificato (noto anche come chiave pubblica), una chiave privata o effettivamente entrambi concatenati insieme. Non prestare molta attenzione all'estensione del file; significa Privacy Enhanced Mail, un uso per il quale non ha visto molto uso ma il formato del file è rimasto bloccato.
Dan Carley,

20
Risposta molto utile, ma non credo che tu abbia coperto il formato .pub creato da ssh-keygen. Sarebbe utile sapere come si lega al resto.
Jez,

24
Non posso fare a meno di notare che "Privacy Enhanced Email" darebbe l'acronimo "PEE" anziché "PEM". Le RFC tendono a usare la frase "Privacy Enhanced Mail"
helpan il

141

PEM da solo non è un certificato, è solo un modo di codificare i dati. I certificati X.509 sono un tipo di dati comunemente codificati mediante PEM.

PEM è un certificato X.509 (la cui struttura è definita utilizzando ASN.1), codificato utilizzando ASN.1 DER (regole di codifica distinte), quindi eseguito attraverso la codifica Base64 e bloccato tra le linee di ancoraggio in testo normale (BEGIN CERTIFICATE e END CERTIFICATE ).

Puoi rappresentare gli stessi dati usando le rappresentazioni PKCS # 7 o PKCS # 12, e l'utility della riga di comando openssl può essere usata per fare questo.

L'ovvio vantaggio di PEM è che è sicuro incollare nel corpo di un messaggio e-mail perché ha linee di ancoraggio ed è pulito a 7 bit.

RFC1422 ha maggiori dettagli sullo standard PEM in quanto riferito a chiavi e certificati.


1
Come si fa a "usare la riga di comando openssl"?
Samik R,

2
Per convertire un file DER (.crt cer .der) al PEM: openssl x509 -inform der -in cert.cer -out cert.pem. Per convertire un file PEM a DER: openssl x509 -outform der -in cert.pem -out certi.der. Per convertire un # 12 file PKCS (.pfx p12) contenente una chiave privata e certificati PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Per convertire un file di certificato PEM e una chiave privata in PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtDa qui
mpeac,

55

A volte un .crtfile è già a .pem. Vedi: https://stackoverflow.com/questions/991758/openssl-pem-key


4
Anzi, l'ho appena notato oggi. Ho dovuto inserire un certificato PEM nel bilanciamento del carico dello spazio rack e mi chiedevo se il crt generato fosse in quel formato. Ma ha funzionato così, quindi anche questa è stata la mia conclusione, a quanto pare la maggior parte di questi .crt è disponibile in formato PEM.
Glenn Plas,

Focus @GlennPlas invece del contenuto del file, non del nome o dell'estensione. Potrebbe essere chiamato .foobarper tutto ciò che conta ...
Patrick Mevzek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.