File dei certificati SSL

Più studio i dettagli e i dietro le quinte di SSL/TLS e della PKI e più mi rendo conto di quanti (troppi?) livelli di complessità ci siano in questo insieme di tecnologie.

Tra questi ci sono i formati dei file e le loro estensioni.

Anche in questo caso vale la regola che il bello degli standard è che ce ne sono tanti tra cui scegliere.

Ho cercato di mantenere il discorso il più chiaro possibile linkando fonti esterne per evitare di aprire troppi incisi; l’elenco e le spiegazioni sono tutto fuorché esaustivi.

File .csr

Si tratta del Certificate Signing Request ed è in formato PKCS10 definito da RFC2986. È il primo passo verso la generazione di un certificato, il file viene generato dal server su cui andrà installato il certificato. Il metodo per generare il file potrebbe variare a seconda del fornitore del certificato, con OpenSSL il comando è qualcosa tipo

openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr

Prima di salvare i due file vengono poste all’utente alcune domande, le cui risposte saranno incluse nel file CSR stesso. I dati sono registrati in formato binario secondo RFC2986 e sono codificato in Base64 con un contenuto simile a questo:

-----BEGIN CERTIFICATE REQUEST-----
PT8kLUR9ygyygPCaSmIEC8zWRJung3y/ElXFRz/Jc+bu0hxCxi2YDz5IjxBBOpB/
[...]
3wHFK+S7BRWrJcXcS8veAexFuk9lHQ+FgGfD0eS/Gz0kyP26Qa2pLTwum7t+nBPl
-----END CERTIFICATE REQUEST-----

Per decodificare un file del genere con OpenSSL a avere un dump in formato testo ASN.1 il comando da dare è

openssl asn1parse -i -in server.csr

con cui si vedranno di fatto  le risposte fornite al comando openssl req per generare quel CSR. Il file contiene anche la chiave pubblica del server che richiede il certificato, che verrà firmata dalla CA.

File .pem

Si tratta di un formato contenitore in origine pensato per gli scambi di posta elettronica, infatti la sigla significa Privacy Enhanced Email. Lo standard per la posta elettronica sicura attraverso PEM è definito da RFC1421RFC1422RFC1423 e RFC1424, ma non è mai stato adottato; di questo standard è rimasto in uso solamente il formato file .pem.

Se il file contiene solamente un certificato pubblico codificato Base64 il contenuto appare simile a

-----BEGIN CERTIFICATE-----
PT8kLUR9ygyygPCaSmIEC8zWRJung3y/ElXFRz/Jc+bu0hxCxi2YDz5IjxBBOpB/
[...]
3wHFK+S7BRWrJcXcS8veAexFuk9lHQ+FgGfD0eS/Gz0kyP26Qa2pLTwum7t+nBPl
-----END CERTIFICATE-----

Un file .pem può contenere anche l’intera catena di certificati PKI, compresi le parti private e i certificati della CA, ognuno dei quali è registrato tra una riga di BEGIN e di END simile a quella riportata sopra.

Il PEM è anche utilizzato come formato per file con altre estensioni: l’estensione in sé non è significativa in quanto i vari blocchi definiscono il contenuto dei dati.

File .key

È il file che contiene la chiave privata del server codificata in Base64 il cui contenuto è simile a:

-----BEGIN RSA PRIVATE KEY-----
PT8kLUR9ygyygPCaSmIEC8zWRJung3y/ElXFRz/Jc+bu0hxCxi2YDz5IjxBBOpB/
[...]
3wHFK+S7BRWrJcXcS8veAexFuk9lHQ+FgGfD0eS/Gz0kyP26Qa2pLTwum7t+nBPl
-----END RSA PRIVATE KEY-----

Di fatto il formato è quello .pem

Si tratta di un dato molto sensibile, in quanto è la parte privata della chiave asimmetrica del server.

Il file viene creato assieme al CSR e non deve essere trasmesso alla CA per la firma.

File .cer, .crt, .cert

Sono file in formato .pem o .der che solitamente vengono restituiti dalla CA e contengono la firma del certificato pubblico del server.

In alcuni casi i file .cer sono in formato .der, mentre i file .crt sono l’equivalente in formato .pem, ma non è uno standard condiviso.

File .der

Sono essenzialmente la versioni in binario dei file .pem o di altri file codificati Base64.

File .p7b, .pkcs7

Si tratta di un formato definito in RFC2315 utilizzato prevalentemente da Windows e da Java per lo scambio di certificati. Rispetto al .pem, questo formato ha un modo definito e inequivocabile per indicare la catena di certificazione.

Il file contiene del testo codificato Base64 e ha il formato

-----BEGIN PKCS7-----
PT8kLUR9ygyygPCaSmIEC8zWRJung3y/ElXFRz/Jc+bu0hxCxi2YDz5IjxBBOpB/
[...]
3wHFK+S7BRWrJcXcS8veAexFuk9lHQ+FgGfD0eS/Gz0kyP26Qa2pLTwum7t+nBPl
-----END PKCS7-----

Non contiene chiavi private.

File .pfx, .p12

Utilizzato principalmente nel mondo Windows, è un formato binario che può contenere chiavi pubbliche, certificati intermedi e chiavi private.

Può essere crittato o firmato.

Il formato del file è noto e le utility di OpenSSL possono convertire da/verso questo formato.

File .crl

È un file in formato .pem che contiene la Certificate Revocation List, ovvero l’elenco dei certificati revocati e, quindi, non più validi, che non devono essere confusi con i certificati scaduti in maniera naturale.

Il file è codificato Base64 e il contenuto appare simile a

-----BEGIN X509 CRL-----
PT8kLUR9ygyygPCaSmIEC8zWRJung3y/ElXFRz/Jc+bu0hxCxi2YDz5IjxBBOpB/
[...]
3wHFK+S7BRWrJcXcS8veAexFuk9lHQ+FgGfD0eS/Gz0kyP26Qa2pLTwum7t+nBPl
-----END X509 CRL-----

La CRL può avere anche estensione .pem

 

Windows ha un’utility CERTUTIL che svolge alcune funzioni analoghe a openssl sotto *NIX.

Come si può vedere, la gestione dei certificati e delle firme nell’ambito della PKI non è semplice nemmeno per quanto riguarda il formato e le estensioni dei file.

Se si vuole adottare un certificato SSL PKI per il proprio sito e/o per il proprio server di posta elettronica fortunatamente i fornitori di certificati mettono a disposizione una documentazione molto dettagliata in merito alle procedure da seguire per generare il CSR e per configurare i software con i certificati forniti.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

5 pensieri riguardo “File dei certificati SSL”

  1. Grande, bel summary. Mi sto imbattendo anche io in questo modo e ho le tue stesse perplessità considerando le numerose variabili che entrano in gioco.

Spazio per un commento