Un certificato digitale è un documento elettronico che utilizza una firma digitale per vincolare una chiave pubblica a un'identità. Questo documento viene emesso da un'autorità di certificazione (CA) e serve a garantire l'autenticità, l'integrità e la non ripudiabilità delle comunicazioni e delle transazioni elettroniche.

Componenti di un certificato digitale

  • Chiave pubblica: La chiave pubblica dell'entità a cui il certificato è emesso. Viene utilizzata per la crittografia delle informazioni e per la verifica delle firme digitali.
  • Informazioni sull'identità: Dati che identificano il titolare del certificato, come il nome, l'organizzazione, l'unità organizzativa, il paese, e l'indirizzo e-mail.
  • Informazioni sull'emittente: Dati che identificano l'autorità di certificazione che ha emesso il certificato.
  • Periodo di validità: La data di inizio e di fine della validità del certificato. Dopo questa data, il certificato non è più considerato valido.
  • Numero di serie: Un numero unico assegnato dall'autorità di certificazione per identificare univocamente il certificato.
  • Algoritmo di firma e Firma digitale: L'algoritmo utilizzato per creare la firma digitale e la firma stessa, che è generata dalla chiave privata dell'autorità di certificazione.

Funzioni di un certificato digitale

  • Autenticazione: Conferma l'identità del titolare del certificato. Ad esempio, un certificato SSL/TLS conferma l'identità di un sito web.
  • Crittografia: Abilita la crittografia delle comunicazioni per proteggere la privacy e l'integrità dei dati trasmessi.
  • Firma digitale: Consente di firmare digitalmente documenti e transazioni, garantendo che non siano stati alterati e che provengano dall'entità dichiarata.

Tipi di certificati digitali

  • Certificati SSL/TLS: Utilizzati per garantire connessioni sicure su Internet, come nei siti web HTTPS.
  • Certificati di firma del codice: Utilizzati per firmare software e garantire che il codice non sia stato alterato dopo essere stato firmato.
  • Certificati di firma digitale: Utilizzati per firmare documenti elettronici, garantendo la loro integrità e autenticità.
  • Certificati di e-mail (S/MIME): Utilizzati per firmare e cifrare e-mail, garantendo la sicurezza delle comunicazioni e-mail.

 

 

 

Figura 1: Trusted Root Certification Authorities presenti in Windows

 

Processo di emissione di un certificato digitale

L'emissione di un certificato digitale è un processo che coinvolge vari passaggi chiave per garantire l'identità e la sicurezza del titolare del certificato. L’intero processo può essere riassunto in queste fasi:

1. Richiesta del certificato (Certificate Signing Request - CSR)

  • Generazione della coppia di chiavi: Il richiedente genera una coppia di chiavi (pubblica e privata) utilizzando un software di crittografia.
  • Creazione della CSR: Il richiedente crea una CSR, un file che contiene la chiave pubblica e informazioni identificative (nome del dominio, organizzazione, paese, ecc.).

2. Invio della CSR

  • La CSR viene inviata a una Autorità di Certificazione (Certification Authority - CA).

3. Verifica dell'identità

  • La CA verifica le informazioni fornite nella CSR. Questo può includere la verifica del dominio, l'identità dell'organizzazione e altre informazioni necessarie.
  • Verifica del dominio: Solitamente la CA invia un’e-mail a un indirizzo associato al dominio (ad es. Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.) o richiede di aggiungere un record DNS specifico per dimostrare il controllo del dominio.

4. Emissione del certificato

  • Una volta completata la verifica, la CA firma la chiave pubblica del richiedente con la propria chiave privata, creando così il certificato digitale.
  • Il certificato digitale include la chiave pubblica del richiedente (la chiave privata non abbandona mai il computer su cui è stata generata inizialmente la coppia di chiavi), informazioni identificative e la firma della CA.

5. Installazione del certificato

  • Il certificato digitale emesso viene inviato al richiedente.
  • Il richiedente installa il certificato sul server o dispositivo che utilizzerà il certificato per stabilire connessioni sicure.

6. Configurazione e test

  • Il richiedente configura il server o dispositivo per utilizzare il certificato digitale nelle comunicazioni sicure (es. HTTPS per siti web).
  • Vengono eseguiti test per assicurarsi che il certificato sia installato correttamente e che le connessioni siano sicure.

7. Rinnovo e revoca

  • I certificati digitali hanno una data di scadenza e devono essere rinnovati periodicamente.
  • Se il certificato o la chiave privata viene compromesso, il certificato deve essere revocato e ne deve essere emesso uno nuovo.

Maggiori informazioni sono disponibili alla pagina Certificato digitale - Wikipedia

 

 

Figura 2: Come viene realizzato un certificato digitale. Fonte: Wikipedia

 

I certificati digitali possono essere emessi in diversi formati. Ecco i più comuni:

  1. DER (Distinguished Encoding Rules): Alcuni dispositivi hardware di sicurezza, come smart card e token crittografici, utilizzano il formato DER per memorizzare certificati e chiavi. In ambienti con risorse limitate, dove l'efficienza dello spazio è cruciale, il formato binario DER può essere preferito rispetto al formato base64 PEM, poiché non introduce l'overhead di codifica. Talvolta, i certificati radice e quelli delle autorità di certificazione (CA) sono distribuiti in formato DER per garantire una rappresentazione compatta e compatibile con vari sistemi operativi e software. Alcuni sistemi operativi, come Windows, possono utilizzare il formato DER per l'importazione e l'esportazione dei certificati all'interno del loro archivio certificati.
  • Formato binario
  • Estensione del file: .der, .cer
  • Può essere utilizzato sia in ambienti Windows che Unix/Linux
  1. PEM (Privacy-Enhanced Mail): Il formato PEM permette di gestire certificati, chiavi private e catene di certificati in file separati, facilitando la configurazione e la manutenzione. È possibile concatenare più certificati in un singolo file PEM. Ad esempio, un certificato intermedio e un certificato radice possono essere combinati insieme.

    Il formato PEM è ampiamente utilizzato grazie alla sua leggibilità, flessibilità e compatibilità con molte applicazioni e sistemi operativi, specialmente in ambienti Unix/Linux. È particolarmente adatto per la gestione di certificati SSL/TLS, chiavi private e catene di certificati, rendendolo una scelta preferita in molte implementazioni di sicurezza e comunicazioni sicure.
  • Formato base64 codificato, comune nei sistemi Unix/Linux e nei server web (Apache, Nginx, ecc.).
  • Estensione del file: .pem, .crt, .cer, .key
  • È facile da leggere e modificare con un editor di testo, poiché è codificato in base64 e contiene delimitatori chiari (-----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----)
  1. PFX/PKCS#12 (Personal Information Exchange): È utilizzato principalmente per l'archiviazione e il trasferimento sicuro di certificati e chiavi private. È ampiamente utilizzato in ambienti Windows e in contesti dove è necessario trasferire in modo sicuro certificati e chiavi private. La sua capacità di contenere sia il certificato che la chiave privata, insieme alla protezione tramite password, lo rende ideale per molte applicazioni aziendali e di sicurezza.
  • Formato binario che può contenere sia il certificato pubblico che la chiave privata e opzionalmente una catena di certificati.
  • Usato principalmente su piattaforme Windows. Il server web di Microsoft (IIS) utilizza il formato PFX per l'importazione di certificati SSL/TLS e delle chiavi private associate.
  • Estensione del file: .pfx, .p12
  • Utilizzato per importare ed esportare certificati e chiavi private in modo sicuro.
  • È ideale per il backup sicuro di certificati e chiavi private, poiché può essere protetto con una password.
  1. PKCS#7 (Cryptographic Message Syntax Standard): È utilizzato in vari contesti dove è necessario firmare e/o crittografare i dati.
  • Formato usato per firmare e crittografare i messaggi e per la firma digitale.
  • Contiene solo certificati o catene di certificati, ma non le chiavi private.
  • È utilizzato sia in ambienti Windows che Unix/Linux. In Windows è più integrato nelle console di gestione dei certificati.
  • Estensione del file: .p7b, .p7c
  • Le autorità di certificazione (CA) possono utilizzare il formato PKCS#7 per distribuire certificati in un formato sicuro e standardizzato.
  • È utilizzato per la crittografia e la firma digitale delle e-mail in S/MIME. Consente di garantire la riservatezza e l'integrità dei messaggi e-mail.
  • PKCS#7 è compatibile con altri standard di sicurezza e può essere utilizzato insieme a PKCS#12 per la gestione e la distribuzione di certificati.
  1. SPC (Software Publisher Certificate): È specificamente utilizzato per la firma digitale di software e driver in ambienti Windows ed è utilizzato per garantire l'autenticità del software, assicurando agli utenti che il software proviene da una fonte affidabile e non è stato alterato.

    Gli sviluppatori utilizzano certificati SPC per firmare il loro software prima di distribuirlo, in modo che gli utenti possano verificare che il software non sia stato manomesso.
  • Formato utilizzato specificamente per la firma di software in ambienti Windows.
  • Estensione del file: .spc
  • Contiene certificati che attestano l'identità del publisher del software.

Questi formati servono diversi scopi e sono scelti in base alle esigenze specifiche di sicurezza, compatibilità e usabilità nel contesto di utilizzo. Ecco una tabella che confronta i formati di certificati digitali utilizzati in ambienti Windows e Unix/Linux:

 

Formato

Utilizzo in Windows

Utilizzo in Unix/Linux

DER

PEM

Parzialmente

Sì (molto comune)

PFX/PKCS#12

Sì (molto comune)

PKCS#7

SPC

Sì (per la firma del software)

No (specifico per Windows)

 

 

I formati .CER, .KEY e .PFX, comunemente usati nei certificati SSL

Questi file sono essenziali per la gestione della sicurezza e della crittografia nelle comunicazioni SSL/TLS, garantendo che le informazioni trasmesse tra client e server rimangano sicure e protette da intercettazioni.

Un file con estensione .CER, noto anche come .CRT, contiene il certificato pubblico di un'entità. Questo certificato include la chiave pubblica e informazioni identificative dell'entità, come il nome del dominio o l'organizzazione. Il formato del file può essere PEM (Base64 ASCII) o DER (binario). I certificati .CER sono utilizzati dai browser e dai server per verificare l'identità dell'entità e stabilire una connessione sicura.

Il file .KEY contiene la chiave privata associata a un certificato SSL. Questa chiave privata è fondamentale per la decrittazione dei messaggi ricevuti che sono stati crittografati con la chiave pubblica. È solitamente in formato PEM e include delimitatori come "-----BEGIN PRIVATE KEY-----" e "-----END PRIVATE KEY-----". La chiave privata deve essere mantenuta segreta e protetta per garantire la sicurezza delle comunicazioni.

Il file .PFX, conosciuto anche come .P12, è un formato binario che combina il certificato del server, i certificati intermedi e la chiave privata in un unico file. Questo formato è utile per trasferire certificati e chiavi private tra diverse piattaforme, soprattutto su sistemi Windows. I file .PFX sono spesso protetti da una password per garantire la sicurezza durante l'importazione e l'esportazione.

Questi file lavorano insieme per garantire la crittografia e la sicurezza delle comunicazioni tra client e server, proteggendo i dati trasmessi da intercettazioni e attacchi.

 

 

Figura 3: Contenuto di un file .CER in formato PEM (Base64 ASCII)

 

 

Figura 4: File .KEY che contiene la chiave privata associata a un certificato SSL

 

  • .CER: Contiene solo il certificato pubblico. Utilizzato per stabilire connessioni sicure.
  • .KEY: Contiene solo la chiave privata. Utilizzato dal server per decrittografare i dati crittografati.
  • .PFX: Contiene sia certificati pubblici che chiavi private in un unico file. Utilizzato per facilitare il trasferimento di certificati e chiavi tra diverse piattaforme.

 

 

Figura 5: Formati.CER, .KEY e .PFX, comunemente usati nei certificati SSL

 

Conversione dei certificati tra diversi formati

È possibile convertire i diversi formati di certificati digitali tra di loro utilizzando vari strumenti, con OpenSSL che è uno dei più comuni. OpenSSL è un toolkit robusto e completo per la crittografia e la gestione dei certificati digitali. È un progetto open source che implementa i protocolli SSL (Secure Sockets Layer) e TLS (Transport Layer Security) per fornire sicurezza e privacy nelle comunicazioni su Internet.

  • Funzionalità principali di OpenSSL: includono la gestione dei certificati digitali, la crittografia, l'uso dei protocolli SSL/TLS, il calcolo di hash e la firma e verifica digitale.
  • Gestione dei certificati digitali: OpenSSL permette la creazione di richieste di certificati (CSR), certificati autofirmati e certificati firmati da una CA, la conversione tra vari formati di certificati digitali (PEM, DER, PKCS#12, PKCS#7) e la firma di certificati e la verifica delle firme.
  • Crittografia: OpenSSL consente la cifratura e decifratura di dati utilizzando algoritmi di crittografia simmetrici e asimmetrici, e la generazione di chiavi private, pubbliche e di sessione.
  • Protocolli SSL/TLS: OpenSSL permette la creazione e gestione di connessioni sicure utilizzando SSL/TLS e il debugging di connessioni SSL/TLS per risolvere problemi di sicurezza e configurazione.
  • Hashing: OpenSSL supporta la generazione di hash (digest) usando vari algoritmi come MD5, SHA-1, SHA-256.
  • Firma e verifica digitale: OpenSSL può firmare documenti e verificare firme digitali.

I comandi OpenSSL sono generalmente gli stessi su entrambe le piattaforme, Windows e Unix/Linux. OpenSSL è progettato per essere un toolkit portabile, quindi i comandi funzionano in modo simile indipendentemente dal sistema operativo. Ecco alcuni esempi di come si possono effettuare queste conversioni:

  • Da DER a PEM openssl x509 -inform der -in certificato.der -out certificato.pem
  • Da PEM a DER openssl x509 -outform der -in certificato.pem -out certificato.der
  • Da PFX/PKCS#12 a PEM Questo comando estrae sia il certificato che la chiave privata: openssl pkcs12 -in certificato.pfx -out certificato.pem -nodes
  • Da PEM a PFX/PKCS#12 openssl pkcs12 -export -out certificato.pfx -inkey chiaveprivata.pem -in certificato.pem -certfile catena.pem
  • Da PKCS#7 a PEM Questo comando converte un file PKCS#7 contenente certificati in formato PEM: openssl pkcs7 -print_certs -in certificato.p7b -out certificato.pem
  • Da PEM a PKCS#7 openssl crl2pkcs7 -nocrl -certfile certificato.pem -out certificato.p7b
  • Conversioni specifiche per certificati SPC Il formato SPC è utilizzato specificamente per la firma del codice in Windows; quindi, le conversioni standard con OpenSSL potrebbero non essere applicabili. Tuttavia, gli strumenti di Windows SDK come SignTool sono utilizzati per firmare software con certificati SPC.
  • Firma di software con SPC signtool sign /f mycertfile.spc /p mypassword /t http://timestampurl /v mysoftware.exe

 

 

Considerazioni sulle Conversioni

  • Sicurezza: Durante la conversione, specialmente quando si estraggono chiavi private, è importante mantenere la sicurezza dei file, utilizzando password e permessi appropriati.
  • Compatibilità: Non tutti i formati contengono le stesse informazioni. Ad esempio, PKCS#7 non contiene chiavi private, mentre PFX/PKCS#12 sì. Pertanto, le conversioni devono tener conto delle informazioni necessarie per l'uso previsto.

Queste conversioni permettono di utilizzare i certificati in diversi ambienti e con vari software, garantendo flessibilità e compatibilità tra sistemi operativi e applicazioni.

 

 

Convertitori di certificati SSL online

Esistono diversi siti, molti a cura di Certification Authority pubbliche, che offrono la possibilità di convertire i certificati tra i diversi formati. Ad esempio, potete dare un’occhiata a questi siti: