OpenSSL è un'implementazione open source dei protocolli SSL (Secure Sockets Layer) e TLS (Transport Layer Security), questi protocolli permettono di instaurare una comunicazione "sicura” tra la sorgente e la destinazione su una rete TPC/IP, tecnicamente una siffatta comunicazione viene detta di tipo "end-to-end”. I due protocolli forniscono autenticazione, cifratura ed integrità dei dati, agendo al di sopra del livello di trasporto TCP. Esistono diverse implementazioni sia per i sistemi Unix-like che per quelli della famiglia Microsoft. Attualmente è possibile prelevare dal sito ufficiale la release 1.0.1.
In quest'articolo vedremo come installare e configurare openssl versione 1.0.1 all'interno del sistema operativo Ubuntu 11.10.
Verifichiamone la presenza nel sistema
Prima di procedere con una nuova installazione è bene verificare l'eventuale presenza del pacchetto openSSL nel nostro sistema operativo, relativamente ad Ubuntu utilizzeremo la direttiva version:
openssl version
Se all'interno del nostro sistema è già presente una qualsiasi versione di OpenSSL, il sistema operativo risponderà fornendoci la versione attualmente installata, così come mostrato in figura 1.
Analizzando l'immagine 1, deduciamo che nel nostro sistema è presente la versione 0.9.8g, ma come precedentemente detto, è attualmente disponibile la versione 1.0.1, per procedere all'aggiornamento all'ultima versione di openssl tramite Ubuntu si dovrà impartire il comando:
apt-get install openssl
così da procedere all'aggiornamento di OpenSSL e di tutti i sui pacchetti ad esso correlati.
Come mostrato in figura 2 il sistema richiede se procedere all'installazione dei pacchetti senza verificarli oppure no, nel caso in cui si voglia procedere alla verifica si dovrà digitare il carattere S altrimenti basterà confermare con un invio.
Le operazioni di aggiornamento devono essere eseguite come utente root, quindi occorrerà prima dell'apt-get digitare il comando sudo.
Compilare OpenSSL
Diversamente dal caso precedente, se non è presente alcuna versione di OpenSSL nel nostro sistema possiamo procedere all'installazione, come primo passo occorrerà prelevare il pacchetto d'installazione con l'ausilio del comando wget:
wget http://www.openssl.org/source/openssl-1.0.1a.tar.gz
Ultimato il download del pacchetto openSSL siamo pronti a procedere al suo scompattamento, al fine di poter proseguire con le operazioni di configurazione:
tar –xvzf openssl-1.0.1a.tar.gz
Posizionandoci nella cartella openssl-1.0.1a tramite un semplice cd openssl-1.0.1a saremo pronti per l'operazione di configurazione:
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
Come in ogni installazione Linux l'ultimo passo da compiere è la compilazione del pacchetto, naturalmente tramite la direttiva make.
A compilazione e configurazione ultimata, siamo finalmente pronti per l'installazione del servizio, questa operazione richiede i privilegi di root:
sudo make install
La Certification Autority (CA)
Realizzata l'installazione potremo finalmente utilizzare OpenSSL, con il quale creeremo una o più CA di tipo self signed, questa modalità è utile quando non si rende necessario, che una root CA esterna firmi i nostri certificati, un tipico esempio è quello nel quale si vuole realizzare un semplice sistema di autenticazione web basato sui certificati, ogni client per potersi autenticare dovrà presentare il proprio certificato.
Il file openssl.cnf
Il file openssl.cnf presente nella cartella /etc/ssl/ contiene le informazioni di base che saranno inserite all'interno dei singoli certificati che andremo a creare con la nostra CA. Il file è suddiviso in sezioni, ognuna della quali è individuata da un nome contenuto tra parentesi quadre, ad esempio la sezione "[ca]” conterrà le informazioni sulla CA di default, all'interno di ogni sezione è presente una o più keywords con annesso valore, sostanzialmente esistono due sezioni principali la [ca] e [req], nella prima andremo a settare il comando ca, che ci permetterà di emettere e firmare i certificati nella seconda invece inseriremo il comando per emettere il root certificate auto firmato.
La nostra prima Certification authority
Supponiamo di voler creare la nostra certification autority denominata CA_html.it, tramite un qualsiasi editor di testo (ad esempio gedit) con privilegi di amministratore apriamo il file openssl.cnf e ricerchiamo la sezione [ca], modificando in corrispondenza della key il valore default_ca con il valore con CA_html.it (così come evidenziato in figura 4).
A questo punto sarà necessario creare una sezione CA_html.it, nella quale racchiudere le informazioni della corrispondente CA, potremo utilizzare la sezione di default con opportune correzioni, le prime informazioni da inserire sono relative alla directory dove verranno immagazzinati i file, per i nostri scopi supponiamo in htmlitCA, successivamente dovremo specificare dove verranno archiviati i certificati e i crl, nonché il database in formato txt, per default è previsto il salvataggio all'interno delle directory certs, crl, mentre il file del database verrà creato in index.txt, è inutile rammentare che tali directory devono essere opportunamente protette tramite i meccanismi messi a disposizione da Linux (esempio gestione appropriata dei permessi d'accesso).
Una parte interessante della sezione relativa alla nostra CA è quella in cui andremo a specificare la durante del certificato ed il defalut_crl_days.
Relativamente alla sezione [req] avremo la possibilità di specificare il numero di bit che compongono la nostra chiave, nonché il file che immagazzinerà la key.
Ultima sezione che vale la pena menzionare è la [root_ca_distinguished_name], all'interno della quale inseriremo le informazioni relative alla nostra local CA, quali ad esempio il nome della CA, i riferimenti geografici e l'indirizzo email.
Non è possibile entrare nel merito di ogni singola sezione e key, ma per i nostri scopi possiamo essere soddisfatti delle modifiche appena illustrate.
Generazione del root certificate
Ogni CA dovrà possedere un root certificate. Impostata la [ca] e la [req] possiamo procedere a generare il root certificate auto firmato e le relative coppie di chiavi pubblica/privata. Tali operazioni sono rese possibili dal comanda req.
openssl req -x509 –newkey rsa:2048 -out cert.pem –outform PEM
Analizziamo il comando: si è scelto di creare un certificato conforme allo standard x509, utilizzando l'algoritmo RSA a 2048 bit, il file di output esplicitato tramite la direttiva –out sarà cert.pem e sarà creato secondo il formato PEM, così come specificato dalla direttiva –outform.
Anche le operazioni di creazione del certificato devono essere eseguite con i privilegi di root, come mostrato in figura 8, per poter completare il processo di creazione del certificato verrà richiesta una password, è superfluo sottolineare che la password dovrà essere robusta e conservata lontana da "sguardi indiscreti”. Inserita la password e confermati i parametri precedentemente esplicitati in openssl.cnf verranno creati due file prive.pen e cacert.pem visualizzabili attraverso il comando:
openssl x509 –in cert.pem –text –noout
dove –text indica al sistema di stampare il formato testuale del certificate, e –noout per specificare la volontà di non ricorrere alla versione non codificata della richiesta.
Come ottenere un certificato
Creata la CA ed i relativi certificati con i quali firmare ed emetterne dei nuovi, siamo pronti alla diffusione.
Per simulare la richiesta di un certificato, il mio suggerimento è quello di utilizzare una nuova shell, così da non avere interferenze proveniente dalla variabile d'ambiente OPENSSL_CONF.
Ogni utente che vorrà avvalersi dei certificati dovrà richiedere una coppia di chiavi contestualmente alla richiesta del certificato, tale operazione viene eseguita con il comando:
$openssl req –newkey rsa:2048 –keyout htmlkey.pem –keyform PEM –out htmlreq.pem
Impartito il comando e confermato tramite invio, il sistema ci richiederà due password, la prima sarà utilizzata dal sistema per cifrare la chiave privata e la seconda verrà memorizzata all'interno della richiesta, il sistema provvederà a generare due nuovi file htmlkey.pem (contenente la chiave privata) e htmlreq.pem contenente la richiesta del certificato.
La visualizzazione delle richieste pervenute avviene tramite il comando:
$ openssl req –in htmlreq.pem –text –noout
Simulata la richiesta si potrà ritornare nella shell principale nella quale la variabile d'ambiente OPENSSL_CONF è settata, l'evasione della richiesta avviene per mezzo del comando:
$ openssl ca –in outhtmlreq.pem
Confermata la richiesta, e le relative opzioni verrà generato il certificato con una nomenclatura del tipo .pem .
Conclusioni
La gestione di una CA seppur self signed non è un'operazione banale, in quest'articolo abbiamo solo voluto dare un'infarinatura della procedura per la gestione dei certificati, ma va ricordato che occorrerà gestire sia l'emissione dei certificati che la revoca degli stessi.