Installare un certificato Let's Encrypt ai server qmail e dovecot

2 giugno 2021 Roberto Puzzanghera 7 commenti

Maggiori informazioni qui:

Qui di seguito viene spiegato come installare e configurare un certificato SSL valido di Let's Encrypt per i server qmaildovecot. L'installazione è ad opera del client certbot.

Certbot is part of EFF’s effort to encrypt the entire Internet. Secure communication over the Web relies on HTTPS, which requires the use of a digital certificate that lets browsers verify the identity of web servers (e.g., is that really google.com?). Web servers obtain their certificates from trusted third parties called certificate authorities (CAs). Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.

Installazione di certbot

Innanzitutto è necessaria una versione di python v.3, e poi vi sono una marea di prerequisiti, perciò è consigliabile lasciar fare l'installazione al package manager della propria distribuzione. Per gli utenti Slackware c'è uno sclackbuild pronto su SBO qui e se non si ha voglia di risolvere manualmente tutte le dipendenze si può sempre usare sbotools.

Installazione del certificato

Naturalmente il certificato viene rilasciato dopo che si è data prova delle affettiva proprietà del dominio associato al certificato. Pertanto certbot dovrà installare una "ACME challenge" (ovvero un file con un nome riconoscibile) in una directory a nostra scelta dove far girare un webserver temporaneo e recuperare l'ACME via http. Se tutto va a buon fine il certificato verrà installato in /etc/letsencrypt.

Creiamo quindi la cartella dove "webroot" la ACME challenge dovrà essere salvata:

mkdir -p /path/to/webroot

Creare un virtual host apposito su apache. yourdomain.tld è il dominio al quale faremo la connessione smtp e imap/pop3:

<VirtualHost *:80>
 ServerName yourdomain.tld

DocumentRoot /path/to/webroot
 <Directory /path/to/webroot>
   Require all granted
 </Directory>
</VirtualHost>

Prepariamo uno script per installare i certificati via certbot in /usr/local/bin/my_certbot.sh

#!/bin/sh
#

CERTBOT=/usr/bin/certbot
DOMAIN=yourdomain.tld

$CERTBOT certonly \
 --webroot \
 --webroot-path /path/to/webroot \
 --preferred-challenges http-01 \
 -d ${DOMAIN} \
 --email youremail@${DOMAIN} \
 --renew-by-default \
 --agree-tos \
 --text

# qmail cert
if [ ! -d "/var/qmail/control/certs_backup" ]; then
 mkdir -p /var/qmail/control/certs_backup
fi
cp -p /var/qmail/control/*.pem /var/qmail/control/certs_backup/
cat /etc/letsencrypt/live/${DOMAIN}/privkey.pem /etc/letsencrypt/live/${DOMAIN}/fullchain.pem > /var/qmail/control/servercert.pem
/usr/local/bin/qmailctl restart

# dovecot cert (you have to set the path inside 10-ssl.conf accordingly)
/usr/local/bin/dovecotctl restart

yourdomain.tld sarà usato come nome del certificato stesso. Per conoscere meglio cosa può fare certbot si può digitare:

certbot --help all

Ricordiamoci infine di settare la x flag:

chmod +x /usr/local/bin/my_certbot.sh

Possiamo quindi eseguire lo script e se non vi saranno errori avremo ottenuto il nostro certificato.

Infine settiamo un cronjob per rinnovare il certificato una volta al mese (la validità è di 3 mesi):

15 2 20 * * /usr/local/bin/my_certbot.sh >> /var/log/cron

Ricordare di disabilitare la linea di update_tmprsadh nel crontab.

Configurazione di qmail e dovecot

Per quanto riguarda qmail la private key e la fullchain devono essere unite in un unico file /var/qmail/control/servercert.pem. Questo viene fatto dallo script di cui sopra e non deve essere fatto altro.

Riguardo a dovecot invece, è sufficiente modificare il file di configurazione /usr/local/dovecot/etc/dovecot/conf.d/10-ssl.conf come segue:

#ssl_cert = </etc/ssl/certs/dovecot.pem
#ssl_key = </etc/ssl/private/dovecot.pem
ssl_cert = </etc/letsencrypt/live/yourdomain.tld/fullchain.pem
ssl_key = </etc/letsencrypt/live/yourdomain.tld/privkey.pem

Ora riavviare qmail e dovecot per abilitare il nuovo certificato.

Commenti

Differenze dei certificati autogenerati e certbot

La differenza tra autogerenato e Certbot è che il primo non è referenziato da una root e pertanto è definito comunque inattendibile, il secondo essendo attaccato alla radice root è valido perchè validato dal root. Ringraziamo con una donazione questa org che pur con limitazioni mette a disposizione i propri server per la gestione della autorizzazioni facendosi carico del costo del traffico dati.

Una news di pochi giorni fà: Scaduti i miei certificati autogenerati ho eseguito il rinnovo autogenerandolli come faccio da oltre 12 Anni da quando i miei server sono attivi con questa installazione (grazie ai ragazzi di sagredo per il lungo supporto) e di alcuni clienti che mi  hanno affidato la gestione in sicurezza delle loro Mail Machine.  Ci sono porblemi con le piattaforme Apple iMac(mail) e Mail Iphone che rifiutano a priori i certificati non attendibili e se per mac rimane la possibilità di confermare che vanno bene sugli iPhone hanno tolto (ritengo con le ultime upgrade)  la spunta "Autorizza" quando si visualizzano i dettagli del certificato autogenerato. Upgradando tutti i server con i certificati Certbot la questione si è risolta. Grazie per questa guida che integrerei con l'install del certificato SSL per Dovecot

Rispondi | Permalink

Differenze dei certificati autogenerati e certbot

Ciao, per quanto riguarda dovecot, come scritto sopra, la sola cosa da fare è settare i seguenti parametri e il gioco è fatto

ssl_cert = </etc/letsencrypt/live/smtp.yourdomain.tld/fullchain.pem
ssl_key = </etc/letsencrypt/live/smtp.yourdomain.tld/privkey.pem

Rispondi | Permalink

differenza tra fullchain e certificato

Ciao Roberto, che differenza c'è nell'usare la fullchain al posto del certificato?

E cosa succede per i client se cambio la configurazione in un server di produzione?

Grazie

Gabriele

Rispondi | Permalink

differenza tra fullchain e certificato

non sono sicuro di aver capito bene la domanda.. con certificato intendi servercert.pem? quest'ultimo è la fusione del fullchain e della chiave privata, ad es.

cat /etc/letsencrypt/live/smtp.${DOMAIN}/privkey.pem /etc/letsencrypt/live/smtp.${DOMAIN}/fullchain.pem > /var/qmail/control/servercert.pem

il client dovrebbe assorbire in modo indolore la variazione del certificato, se questo è valido, a meno che non sia settato per fornire comunque una notifica all'utente (claws ad es. ha un'opzione del genere)

Rispondi | Permalink

differenza tra fullchain e certificato

La documentazione di Dovecot non indica di usare la fullchain  ma il certifcato (o auto generato o acquistato) nella configurazione del SSL, e così ho fatto fino a quando non ho inizaito ad avere come riferimento la tua utilissima guida.

Per quello mi domandavo se ci fossero delle differenze nell'usare fullchain  o certificato nella configurazione di Dovecot.

Grazie

Rispondi | Permalink

differenza tra fullchain e certificato

Ti posso assicurare che la configurazione come la descrivo sopra funziona. Non ricordo più dove ho trovato esempi identici...

Rispondi | Permalink

differenza tra fullchain e certificato

Si funziona, la sto usando, ero curioso di conoscere la differenza delle 2 configurazioni.

Grazie ancora

Rispondi | Permalink