Ho avuto la necessità di installare un certificato ssl per garantire una comunicazione sicura con il mio server di email.
Dato che offro caselle di email ai miei clienti, devo garantire un servizio adeguato, sia per le funzionalità che per la sicurezza, e un certificato per imap e per l’smtp è praticamente obbligatorio.
Avevo due opzioni, la prima era acquistare un certificato presso una CA ufficiale, e la seconda crearmi una CA personale, e di conseguenza crearmi i miei certificati.
Entrambe le soluzioni non mi piacevano; la prima ha un costo, e, aimè, dato che non sono esperto di certificati, chiavi ssl e altro, avevo pure paura di sbagliare ad acquistare il certificato!
La seconda soluzione non era percorribile perché, dato che devo dare un servizio a pagamento, mi spiace creare certificati che non sono ufficialmente riconosciuti dai client, e che quindi accendono allarmi e warning che spaventano l’utente generico.
Per cui, girottolando sulla rete, ho trovato letsencrypt.org, una organizzazione riconosciuta che rilascia certificati ufficiali in modo gratuito.
Questi certificati non sono adatti per firmare documenti o altro, ma vanno benissimo per cifrare una connessione verso un server o per scaricare e inviare mail.
Qua descrivo i passi tecnici per creare e installare questi certificati su postfix e dovecot. Tenete presente che qualcosa (…dalla data di scrittura del documento a oggi) puo’ essere cambiato, per un aggiornamento della release del software di letsencrypt, ma i principi di base e i passi sono gli stessi.
Primo passo: installazione del software.
Per ricevere i certificati è necessario installare un software che effettua una verifica e che genera il certificato.
Il software crea o utilizza un sito web sul server destinatario del certificato, e dall’esterno apre una comunicazione che effettivamente verifica quella macchina risponde al certificato per il sito web che tu vuoi effettivamente generare.
Mi spiego meglio con un esempio.
Voglio generare un certificato per il mio sito, mailserver1.esseciesse.net
Il software che vado ad installare, al momento della richiesta del certificato crea un sito web temporaneo sul mio server (mailserver1.esseciesse.net), pone un file cifrato su questo sito e attende. Dall’esterno, dal sito di letsencrypt, parte una verifica automatica verso il sito https://mailserver1.esseciesse.net, per verificare che effettivamente sul sito che ha richiesto il certificato, esista, abbia effettuato la richiesta, sia presente un server web, e che questo contenga un file particolare con un contenuto particolare. Questo certifica che il richiedente è anche il proprietario del sito.
Per cui i passi sono i seguenti ( su macchina Linux UBUNTU 14.X):
Scaricare dal sito il software e installarlo
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
A questo punto bisogna generare il certificato.
Spegnere il web server presente sul tuo sistema, e assicurarsi che sia raggiungibile dall’esterno sulla porta https (443), sull’indirizzo web su cui vuoi generare il certificato.
Io ho dato il seguente comando, ma chiaramente deve essere personalizzato secondo le vostre esigenze
./letsencrypt-auto certonly --test-cert -v -t -d mailserver1.esseciesse.net --standalone -m a.montanari1@esseciesse.net --agree-tos
Questo crea un certificato di test (opzione --test-cert
) che vi serve per verificare che sia tutto a posto.
Ricorda che attualmente possono essere richiesti 5 certificati in 7 giorni, per cui attenzione a non lanciare troppi comandi senza l’opzione di test….
Quando lanci il comando con l’opzione di test, questo genera un certificato valido, ma non firmato da una CA autorizzata, ma generato da una CA “fake”.. per cui attenzione a non usarlo.
Quando tutto e’ a posto, e il comando di test non da problemi, il comando da lanciare, la prima volta e quindi una volta al mese, (quello buono per intenderci) è il seguente:
./letsencrypt-auto certonly -t -d mailserver1.esseciesse.net --standalone -m a.montanari1@esseciesse.net --agree-tos --renew-by-default
Il certificato generato dura solo 3 mesi, per cui è opportuno rinfrescarlo spesso. Io ho settato il mio cron per essere invocato una volta al mese con quel comando.
Lanciare poi il comando per far sì che dovecot e la mail possano accedere ai certificati. Assicurarsi che dovecot e postfix appartengano al gruppo mail.
chgrp mail /etc/letsencrypt/archive /etc/letsencrypt/live
chmod g+rx /etc/letsencrypt/archive /etc/letsencrypt/live
Ricorda il restart di apache
Con queste operazioni hai generato un certificato valido per postfix e dovecot.
Adesso vediamo la configurazione dei due servizi.
Dovecot
File 10-auth.conf
disable_plaintext_auth = yes
File 10-ssl.conf
ssl = yes
ssl_cert = </etc/letsencrypt/live/mailserver1.esseciesse.net/fullchain.pem
ssl_key = </etc/letsencrypt/live/mailserver1.esseciesse.net/privkey.pem
Postfix, in master.cf main.cf
smtpd_tls_cert_file = /etc/letsencrypt/live/mailserver1.esseciesse.net/cert.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mailserver1.esseciesse.net/privkey.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mailserver1.esseciesse.net/chain.pem
Per vedere altre configurazioni relative alla ottimizzazione del protocollo vedi per postfix
installazione di un imap server con postfix e dovecot
Per verificare il certificato dare il seguente comando
openssl s_client -connect mailserver1.esseciesse.net:993
CONNECTED(00000003)
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
.......
---
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot (Ubuntu) ready.
A1 LOGOUT
Closed
Per verificare la CA dare il seguente comando
openssl s_client -CApath /etc/letsencrypt/live/mailserver1.esseciesse.net -connect mailserver1.esseciesse.net:993
CONNECTED(00000003)
……..
—
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot (Ubuntu) ready.
A1 LOGOUT
Closed
TAGS: cerfificato, ssl, gratuito, dovecot, postfix, letsencrypt