Questo tutorial mostra come installare un certificato SSL/TLS su Qmail, l’agente di trasferimento della posta scritto originariamente da D. J. Bernstein. Il procedimento è lo stesso che Qmail utilizza da anni: creare un unico file PEM contenente la chiave privata, il certificato del server e la catena intermedia, posizionarlo in /var/qmail/control/servercert.pem e riavviare Qmail.
Prima di iniziare: Qmail è un MTA legacy
Qmail non viene aggiornato dalla release originale qmail-1.03 del 1998. D. J. Bernstein ha rilasciato il codice nel pubblico dominio nel 2007, ma non ha ripreso lo sviluppo. Il noto fork della comunità netqmail ha raggiunto la sua release finale 1.06 nel 2007 ed è rimasto senza manutenzione per oltre un decennio. Il successore moderno attivo è notqmail (release attuale 1.09, maggio 2024), che porta avanti correzioni di bug e compatibilità con i sistemi moderni, rimanendo comunque compatibile “drop-in” con l’originale.
Altrettanto importante per questa guida: qmail di base non ha supporto nativo per SSL/TLS. Il TLS viene aggiunto tramite uno di due percorsi di terze parti:
- La patch qmail-tls di Frederik Vermeulen, che aggiunge STARTTLS a qmail-smtpd e legge il certificato da un percorso fisso: /var/qmail/control/servercert.pem. La maggior parte dei pacchetti qmail moderni (comprese le build netqmail e notqmail, la distribuzione s/qmail e molti pacchetti dei vendor) include questa patch o un equivalente.
- stunnel davanti a qmail-smtpd per incapsulare la connessione in TLS sulla porta 465 (SMTPS). Questo funziona con qualsiasi build di qmail poiché la terminazione TLS avviene al di fuori di Qmail.
Se gestisci una distribuzione qmail esistente, i passaggi seguenti sono comunque validi. Se stai costruendo un nuovo server di posta da zero, valuta piuttosto Postfix o OpenSMTPD: entrambi hanno un supporto TLS nativo e ben mantenuto, con team di sicurezza attivi. Abbiamo un tutorial separato su come installare un certificato SSL su Postfix.
Genera un codice CSR per Qmail
Se hai già generato il tuo CSR e ricevuto i file SSL dalla tua CA, passa direttamente a Installa il certificato SSL su Qmail.
CSR è l’acronimo di Certificate Signing Request: un blocco di testo codificato che contiene i dati del tuo dominio e della tua organizzazione. Lo invii alla Certificate Authority (CA) affinché possa validare la tua richiesta ed emettere il certificato. La generazione del CSR crea anche la chiave privata corrispondente, che rimane sul tuo server ed è necessaria per l’installazione. Hai due opzioni:
- Usa il nostro Generatore di CSR per creare il CSR automaticamente.
- Segui il nostro tutorial passo-passo su come generare un CSR per Qmail.
Apri il file CSR in un qualsiasi editor di testo semplice e copia l’intero blocco, comprese le righe BEGIN CERTIFICATE REQUEST e END CERTIFICATE REQUEST, nel campo CSR del modulo d’ordine. Conserva al sicuro il file della chiave privata: la unirai al file PEM nella prossima sezione.
Installa il certificato SSL su Qmail
Dopo la convalida, la CA ti invia via e-mail un archivio ZIP con i tuoi file SSL: il certificato primario (del server) e uno o più certificati intermedi (CA). Estrai l’archivio sul tuo server, quindi segui i passaggi seguenti.
Passaggio 1: Combina chiave, certificato e catena in un unico file PEM
La patch qmail-tls (e gli equivalenti in netqmail, notqmail e s/qmail) legge tutto ciò che serve per terminare il TLS da un unico file PEM. Concatena i file in questo ordine: prima la tua chiave privata, poi il tuo certificato del server, quindi la catena intermedia (CA). Il certificato radice non è necessario (i client lo considerano già attendibile). Dalla directory contenente i file estratti, esegui:
cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Se la tua CA ha fornito gli intermedi come file separati anziché in un unico .ca-bundle, elenca ciascuno di essi dopo il certificato del server, prima il foglia e per ultimo l’intermedio che emette dal root:
cat yourdomain.key yourdomain.crt intermediate1.crt intermediate2.crt > servercert.pem
Apri il file risultante in un editor di testo per confermare la struttura. Dovrebbe apparire così, con veri marcatori a cinque trattini attorno a ciascun blocco:
-----BEGIN RSA PRIVATE KEY-----
(il testo della tua chiave privata)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(il testo del tuo certificato SSL primario)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(il testo del certificato CA intermedio)
-----END CERTIFICATE-----
Le chiavi più recenti possono essere etichettate BEGIN PRIVATE KEY invece di BEGIN RSA PRIVATE KEY; entrambe vanno bene. La chiave non deve essere criptata con una passphrase, perché qmail-smtpd la carica all’avvio senza chiedere conferma. Se la tua CA ha emesso un certificato ECDSA, il blocco della chiave sarà BEGIN EC PRIVATE KEY; nient’altro cambia.
Passaggio 2: Sposta il file nella directory di controllo di Qmail
Il nome e il percorso del file sono fissati dalla patch qmail-tls. Sposta il PEM combinato nella directory di controllo di Qmail e restringi i suoi permessi, poiché contiene la tua chiave privata:
sudo mv servercert.pem /var/qmail/control/servercert.pem
sudo chmod 600 /var/qmail/control/servercert.pem
sudo chown root:qmail /var/qmail/control/servercert.pem
Il proprietario e il gruppo dipendono da quale utente esegue qmail-smtpd sul tuo sistema. Su un’installazione standard di netqmail o notqmail di solito è qmaild o il gruppo qmail, quindi root:qmail con modalità 600 funziona. Su una configurazione basata su vpopmail, qmail-smtpd viene eseguito come vpopmail, quindi usa:
sudo chown vpopmail:vchkpw /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem
In entrambi i casi, l’obiettivo è lo stesso: il processo qmail-smtpd deve poter leggere il file, e nient’altro dovrebbe poterlo fare.
Passaggio 3: Adatta le build personalizzate
La maggior parte delle versioni di qmail cerca il percorso predefinito, ma alcune usano invece variabili d’ambiente. Trova quella corrispondente alla tua build:
- Qmail standard con la patch qmail-tls (netqmail / notqmail / pacchetti dei vendor): non è necessaria alcuna configurazione aggiuntiva. qmail-smtpd legge automaticamente /var/qmail/control/servercert.pem. Affinché qmail-smtpd annunci STARTTLS nella risposta EHLO, la variabile d’ambiente UCSPITLS deve essere impostata nello script di avvio di qmail-smtpd (in genere /var/qmail/supervise/qmail-smtpd/run): esegui l’export di UCSPITLS=”” prima della riga di qmail-smtpd. Per richiedere la crittografia prima dell’autenticazione, imposta anche FORCE_TLS=1.
- s/qmail con ucspi-ssl: il percorso del certificato non è fisso. Imposta queste variabili d’ambiente nello script di avvio di qmail-smtpd (o nel corrispondente wrapper tcpserver / sslserver): CERTFILE per il certificato del server, KEYFILE per la chiave privata (possono puntare allo stesso PEM combinato) e CERTCHAINFILE per gli intermedi. Consulta la documentazione di s/qmail per i nomi esatti delle direttive nella tua versione.
- Front-end stunnel (SMTPS sulla porta 465): punta la direttiva cert di stunnel su /var/qmail/control/servercert.pem e fai in modo che il suo exec avvii qmail-smtpd. Questo percorso non richiede affatto la patch qmail-tls; il TLS termina a livello di stunnel.
Se non sai con quale patch è stato compilato il tuo qmail-smtpd, controlla il binario:
strings /var/qmail/bin/qmail-smtpd | grep -iE 'tls|starttls|servercert'
Se vedi riferimenti a STARTTLS, servercert.pem o UCSPITLS, il binario ha la patch qmail-tls compilata al suo interno.
Passaggio 4: Riavvia Qmail
Qmail legge il certificato all’avvio del processo, quindi è necessario riavviare qmail-smtpd. Sulla maggior parte delle installazioni che usano gli script di controllo forniti:
sudo qmailctl restart
Se la tua distribuzione racchiude Qmail in un servizio systemd, usa invece:
sudo systemctl restart qmail
Su una configurazione daemontools / runit, invia invece un TERM a qmail-smtpd tramite svc:
sudo svc -t /service/qmail-smtpd
Controlla il log (in genere /var/log/qmail/smtpd/current) per eventuali errori durante l’avvio. Un PEM malformato o una proprietà errata sono la causa più comune per cui qmail-smtpd si rifiuta di abilitare il TLS.
Verifica la tua installazione SSL
Conferma che Qmail offra STARTTLS e stia servendo il certificato corretto con OpenSSL. Sostituisci mail.yourdomain.com con il nome host del tuo server di posta:
openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null
| openssl x509 -noout -issuer -subject -dates
L’output dovrebbe stampare il subject (nome comune) del tuo certificato, l’emittente (la CA) e le date di validità. Se hai configurato SMTPS tramite stunnel sulla porta 465, rimuovi -starttls smtp e connettiti direttamente alla porta 465:
openssl s_client -connect mail.yourdomain.com:465 -servername mail.yourdomain.com
Cerca Verify return code: 0 (ok) in fondo all’handshake. Se vedi un errore di catena, i certificati intermedi mancano da servercert.pem: aggiungili e riavvia qmail-smtpd. Per un rapporto completo su certificato, catena e supporto dei protocolli, esegui il nostro SSL Checker sul nome host della tua posta.
Domande frequenti
Dal file /var/qmail/control/servercert.pem. Questo percorso è fisso nella patch qmail-tls che aggiunge STARTTLS a qmail-smtpd, e lo stesso percorso viene usato da ogni versione comune di qmail (netqmail, notqmail, pacchetti dei vendor). Il file deve contenere la chiave privata, il certificato del server e la catena intermedia, in quest’ordine. s/qmail con ucspi-ssl è l’eccezione: legge invece le variabili d’ambiente CERTFILE, KEYFILE e CERTCHAINFILE.
Prima la chiave privata, poi il certificato del server (foglia), quindi il/i certificato/i CA intermedio/i. Il certificato radice non è necessario, perché i client di posta lo considerano già attendibile. Una build su una riga è sufficiente:cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Se l’ordine è sbagliato, qmail-smtpd non riuscirà a caricare il certificato all’avvio e il TLS non verrà offerto. Controlla il log in /var/log/qmail/smtpd/ se sospetti questo problema.
Non da solo. La release originale qmail-1.03 del 1998 non ha supporto SSL o TLS. Il TLS viene aggiunto o dalla patch qmail-tls (compilata nel binario qmail-smtpd, aggiunge STARTTLS sulle porte 25 e 587) oppure eseguendo stunnel davanti a qmail-smtpd per SMTPS sulla porta 465. Quasi tutti i pacchetti qmail moderni includono già la patch qmail-tls applicata, quindi di solito non è necessario applicare la patch al codice sorgente da soli.
Il Qmail originale (qmail-1.03) non viene aggiornato dal 1998. Il primo fork della comunità, netqmail, ha rilasciato la sua ultima versione (1.06) nel 2007. Il successore moderno attivo è notqmail, che ha rilasciato la versione 1.09 nel maggio 2024 e continua a fornire correzioni di bug e patch di compatibilità con i sistemi moderni. Per i nuovi server di posta, la maggior parte degli operatori sceglie invece Postfix o OpenSMTPD, entrambi dotati di supporto TLS nativo e mantenuto attivamente.
Tre cause comuni. Primo, la variabile d’ambiente UCSPITLS non viene esportata nello script di avvio di qmail-smtpd: imposta UCSPITLS=”” (il valore può essere vuoto) prima della riga di qmail-smtpd e riavvia il servizio. Secondo, il binario qmail-smtpd è stato compilato senza la patch qmail-tls: verifica con strings /var/qmail/bin/qmail-smtpd | grep -i tls. Terzo, /var/qmail/control/servercert.pem è mancante, illeggibile per l’utente di qmail-smtpd o malformato; controlla i permessi e l’ordine dei blocchi PEM.
Connettiti alla porta SMTP con OpenSSL e leggi il certificato che Qmail presenta tramite STARTTLS:openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null | openssl x509 -noout -issuer -subject -dates
Questo stampa il subject, l’emittente e le date di validità. Per SMTPS tramite stunnel sulla porta 465, rimuovi il flag -starttls smtp. Verifica che l’emittente corrisponda alla tua CA e che l’handshake termini con Verify return code: 0 (ok).
Risparmia il 10% sui certificati SSL ordinando oggi stesso da SSL Dragon!
Emissione rapida, crittografia avanzata, affidabilità del browser al 99,99%, assistenza dedicata e garanzia di rimborso entro 25 giorni. Codice coupon: SAVE10


