La sicurezza di molti protocolli viene implementata utilizzando certificati SSL. Normalmente tali certificati sono emessi da certificate authorities pubbliche. Se si parla di siti web (protocollo HTTPS), il browser con cui navighiamo in Internet deve riconoscere l’identità della CA che ha emesso il certificato, altrimenti ci viene mostrato un messaggio di errore:
Una CA emette un nuovo certificato firmandolo con il proprio… ci possono essere anche più livelli di firma, ad esempio il certificato di Google (blu) è firmato da una intermediate CA (verde), il cui certificato è firmato a sua volta da una root CA (rosso):
Perché il certificato sia ritenuto valido, il browser o il sistema operativo deve avere i certificati delle CA nei suoi certificati trusted:
Oggi vi mostro come realizzare una CA utilizzando un software opensource, OpenSSL. Tale CA sarà utile ogni volta che ci servirà un certificato SSL ad uso interno.
Dopo aver installato l’applicativo OpenSSL, creiamo una cartella dedicata alla nuova CA (nel mio esempio MyCA).
All’interno di tale cartella creiamo alcune cartelle e files vuoti:
Apriamo il file serial e inseriamo il valore 1000 (sarà il numero seriale del primo certificato emesso).
Prendiamo ora dal mio repository Github il file openssl.cnf e copiamolo nella cartella MyCA. Questo file contiene l’intera configurazione della CA.
Dobbiamo per prima cosa modificare il parametro dir indicando il path della cartella principale della nostra CA:
Generiamo la chiave privata per la nostra CA. Tutti i comandi sono da lanciare all’interno della cartella MyCA:
openssl genrsa -aes256 -out private/ca.key.pem 4096 |
Ci verrà chiesta una password; è molto importante memorizzarla perché dovremo inserirla ogni volta che vorremo utilizzare la CA.
Passiamo ora a generare il certificato della CA, in modalità self-signed:
openssl req -config openssl.cnf -key private/ca.key.pem -new -x509 -days 3650 -sha256 -extensions v3_ca -out certs/ca.cert.pem |
OpenSSL ci chiederà alcune informazioni, la più importante è il Common Name, ovvero il nome che identifica la nostra CA:
Vediamo ora come generare i certificati client o server.
La generazione di un certificato parte dalla creazione di una chiave privata, che dovrà essere memorizzata sul sistema che utilizzerà il certificato (ad esempio sul server web che esporrà il sito in HTTPS). Si passa poi a creare il CSR (certificate signing request), ovvero un file che, firmato dalla CA, porterà alla generazione del certificato finale.
Il file CSR può essere fornito direttamente dall’utente; in alternativa possiamo utilizzare OpenSSL:
1. genero la chiave per un nuovo certificato server:
openssl.exe genrsa -out server.key |
2. genero il file CSR:
openssl.exe req -new -config openssl.cnf -key server.key -out server.csr |
Anche in questo caso ci verranno chieste alcune informazioni, tra le quali il nome (common name) del server.
Generiamo infine il certificato firmando il file CSR:
openssl.exe ca -config openssl.cnf -extensions server_cert -notext -in server.csr -out server.cer |
Dopo aver confermato con due Y (yes), il certificato sarà generato: