Come usare OpenSSL per firmare le e-mail


Mia mamma spesso riceve e-mail da amiche o colleghe che sono chiaramente spam o virus. Ogni volta deve chiedere a me, “ma posso cliccare qui?”, “ma secondo te me l’ha mandato lei?” e roba simile.

Il mondo sarebbe sicuramente un posto migliore se ogni utente di internet prendesse la buona abitudine di certificare il proprio account di posta. Un po’ perché eviterebbe che la gente rompa il cazzo a noi per capire se una mail è buona o no, un po’ perché fa figo avere la mail firmata (forse, ma dico forse, solo per noi nerd è una figata).

Vi espongo di seguito due metodi per ottenere un certificato per firmare le mail, uno a livello Poppante e uno da Nerd Boss. Infine vedremo come usare questi certificati.

1. Metodo Poppante: fa tutto la mamma
Mi faccio certificare la casella di posta da una Certification Authority, magari gratuita. Questo servizio è ad esempio offerto su IstantSSL da Comodo.
Basta registrarsi e in pochi secondi si riceve una mail con il link del certificato da scaricare.

2. Metodo Nerd Boss: autocertificazione via OpenSSL
OpenSSL è un progetto opensource che ha lo scopo di sviluppare librerie che implementino le funzionalità di SSL (versione 2 e 3), TSL (versione 1) e algoritmi di crittografia simmetrica e asimmetrica. La versione attuale è la 1.0.0d.
Mostra Approfondimento ∨

Per prima cosa verifichiamo se e quale versione abbiamo installata sulla macchina. Aprite il terminale (se non sapete cos’è o come aprirlo andate in bagno a piangere per almeno 10 minuti, grazie) e digitate:
$ openssl version
Riceverete una risposta tipo “OpenSSL 0.9.8l 5 Nov 2009”, che per i nostri scopi è più che sufficiente.
Se invece o non è installato o la versione è stantia e volete aggiornarla, spiego brevemente cosa fare.
Mostra Approfondimento ∨

OpenSSL ci mette a disposizione una serie di metodi per creare e gestire una Public Key Infrastructure.
I certificati emessi con le PKI create con OpenSSL rispettano lo standard X.509 e possono essere usati per server e persone.

La prima cosa da fare per creare la propria PKI consiste nel creare il certificato relativo alla root CA. Più precisamente è necessario creare una coppia di chiavi ed un certificato autofirmato relativo alla chiave pubblica.

Per creare la chiave privata della CA si usa il comando genrsa
$ openssl genrsa -des3 -out CA-key.pem 4096
Mostra Approfondimento ∨

La prossima cosa da fare è creare il certificato di chiave pubblica relativo alla CA; il comando da utilizzare è req.
$ openssl req -key CA-key.pem -new -x509 -days 365 -out CA-cert.pem
Mostra Approfondimento ∨

Molto bene. Siamo a metà dell’opera. Abbiamo creato la nostra CA personale autofirmata. Ora è il momento di prendere i panni di noi stessi e creare una chiave privata per il nostro utente possessore della e-mail da certificare e una richiesta di certificazione alla CA.
L’utente che desidera ottenere un certificato crea quindi la propria chiave privata e successivamente crea una richiesta di certificato che contiene:

1. La chiave pubblica da certificare
2. I dati dell’utente che richiede il certificato

La richiesta di certificato viene firmata con la chiave privata del richiedente. Questo permette alla CA di essere certa che l’utente sia in possesso della chiave privata corrispondente alla chiave pubblica che sta certificando!

Passiamo ai comandi. La generazione della chiave avviene come abbiamo già visto in precedenza (comando genrsa).
La generazione della richiesta avviene nuovamente tramite il comando req.
$ openssl genrsa -des3 -out Ryan-key.pem 4096
$ openssl req -key Ryan-key.pem -new -out Ryan-req.pem

Si noti che, a differenza dei parametri utilizzati in precedenza, non sono presenti le opzioni –x509 –days ###, poiché si sta generando una richiesta di certificato e non un certificato. Durante la generazione della richiesta, viene chiesto all’utente di specificare i dati relativi al certificato. È fondamentale che Common Name e Email Address siano corretti o va tutto in vacca.

Siamo quasi alla fine! Rimettiamo per l’ultima volta il costume da supereroe della CA e rilasciamo il certificato che andremo poi ad utilizzare. L’operazione avviene tramite l’utilizzo del comando x509
$ openssl x509 -days 365 -CA CA-cert.pem -CAkey CA-key.pem -CAcreateserial -CAserial ca.srl -req -in Ryan-req.pem -out Ryan-cert.pem
Mostra Approfondimento ∨

Hell yeah! Abbiamo un certificato. Il problema è che la maggior parte dei MUA vuole in ingresso un certificato in formato PKCS#12. Questo formato è utile per salvare in un unico file il certificato di chiave pubblica e la chiave privata cifrata.

Per la conversione possiamo usare il comando pkcs12.
$ openssl pkcs12 -in Ryan-cert.pem -inkey Ryan-key.pem -export -out Ryan-cert.p12
È fatta! Il file .p12 può essere importato assieme al certificato della CA nel Keyring di OSX (o, ad esempio, nel gestore di certificati di Thunderbird). Il MUA da questo momento in poi sarà automaticamente in grado di firmare le e-mail inviate dall’account specificato nel certificato. Win!
Mostra Approfondimento ∨

via le lezioni giù al Dipartimento di Informatica.
more info: openssl.org, S/MIME.

Ryan Vespucci a.k.a. Ryan Vespucci

Il senso comune immagina che, quando uno vede un tavolo, vede un tavolo. Grossolana illusione. (Bertand Russel, L'abc della relatività)
Aree Tematiche
Opensource Tecnologie
Tag
martedì 17 maggio 2011 - 16:53
Edit

Lega Nerd Podcast

Lega Nerd Live

LN Panic Mode - Premi "P" per tornare a Lega Nerd