Server Name Indication (SNI) per qmail e dovecot

18 marzo 2026 by Roberto Puzzanghera 0 commenti

Server Name Indication (SNI) è una estensione del protocollo TLS che consente a un server di presentare differenti certificati a seconda dell'hostname richiesto dal client durante il saluto TLS.

In un ambiente email moderno, molti domini condividono uno stesso indirizzo IP per i servizi SMTP, IMAP, POP3 e submission. Senza SNI, un amministratore di un server email può presentare un solo certificato per ogni socket disponibile, cosa che obbliga l'aministratore ad affidarsi a certificati multi-dominio (SAN) o a certificati con wildcard. Questo approccio aumenta i problemi operativi tra gli utenti finali novelli, che spesso non sono in grado di usare la configurazione automatica del client per configurare correttamente le loro mailbox.

L'abilitazione di SNI nei serivizi mail consente al server di presentare il certificato appropriato basato sull'hostname richiesto dal client, contenuto nel suo indirizzo email.

La funzionalità SNI per la mia distribuzione qmail è stata aggiunta da Andreas Gerstlauer (commit qui e qui), che vorrei ringraziare.

Creazione dei certificati

In qmail, quando il client supporta SNI, i certificati SSL di domini specifici devono essere impostati nel seguente modo:

QMAILDIR/control/servercerts/<FQDN>/servercert.pem

QMAILDIR/control/servercert.pem è usato come default, nel caso non possa essere trovato nel server un certificato appropriato per l'hostname richiesto.

Riguardo a dovecot, è necessario dichiarare i certificati addizionali per SNI nel modo seguente:

local_name domain2.tld { 
 ssl_server_cert_file = /etc/dehydrated/certs/domain2.tld/fullchain.pem 
 ssl_server_key_file  = /etc/dehydrated/certs/domain2.tld/privkey.pem 
} 
local_name *.domain2.tld { 
 ssl_server_cert_file = /etc/dehydrated/certs/domain2.td/fullchain.pem 
 ssl_server_key_file  = /etc/dehydrated/certs/domain2.tld/privkey.pem 
}

Queste impostazioni per dovecot vengono aggiunte in automatico dallo script hook.sh.

Il setup dei certificati SNI per qmail, DovecotApache e la loro configurazione sarà discussa nella prossima pagina.

Test dei certificati

In ciò che segue domain.tld è il dominio per il quale si vuole testare SNI. Per testare SNI con openssl è necessario passare l'opzione -servername.

openssl s_client -starttls smtp -connect serverIP:587 -servername domain.tld 2>/dev/null | grep subject=CN

In pratica, ci stiamo connettendo all'IP del mail server e richiedendo un certificato per il dominio domain.tld. Se il server non fornisce un certificato per domain.tld, allora verrà servito quello di default, che è /var/qmail/control/servercert.pem.

Alla fine del certificato abbiamo il Common Name (CN):

subject=CN = domain.tld

che è il FQDN per il quale il certificato è stato rilasciato. Se si ottiene domain.tld o smtp.domain.tld o ogni altro dominio avente domain.tld come dominio di secondo livello, allora SNI sta funzionando bene e il client è in grado di indicare il certificato associato al dominio dal quale si sta connettendo.

Stesso esempio per i protocolli IMAPPOP3:

# openssl s_client -connect serverIP:995 -servername domain.tld 2>/dev/null | grep subject=CN
subject=CN = domain.tld

# openssl s_client -connect serverIP:993 -servername domain.tld 2>/dev/null | grep subject=CN
subject=CN = domain.tld

Il SAN (Subject Alternative Name) del certificato è la lista dei domini che sono protetti da quel certifcato:

# openssl x509 -in /var/qmail/control/servercert.pem -noout -text | grep -A1 "Subject Alternative Name"     
           X509v3 Subject Alternative Name:  
               DNS:domain1.tld, DNS:smtp.domain.tld, DNS:imap.domain.tld, DNS:pop3.domain.tld,

Si può ottenere il SAN quando ci si connette da remoto nel modo seguente:

openssl s_client -starttls smtp -connect domain.tld:587 2>/dev/null |
  openssl x509 -noout -text | 
  grep -A1 "Subject Alternative Name"

Aggiungi un commento

qmail notes

Pay me a coffee:

PayPal - The safer, easier way to pay online.

LXC scripts
Other contents
Guide per gli utenti
Ultimi commenti
Vedi anche...
Articoli recenti

RSS feeds