bg-tutorials

Come generare un CSR su Qmail

Questa guida ti mostra come generare una CSR (Certificate Signing Request) su qmail utilizzando la riga di comando OpenSSL. Qmail (e il suo fork attivamente mantenuto, notqmail) non include uno strumento CSR integrato. Utilizzi OpenSSL per creare due file contemporaneamente: una chiave privata che rimane sul server e la CSR che invii alla tua Certificate Authority (CA).

La CSR codifica l’hostname di posta che il tuo server presenta durante STARTTLS, i dettagli della tua organizzazione e la parte pubblica della chiave. La chiave privata corrispondente non lascia mai il server. Se la perdi, il certificato emesso diventa inutilizzabile e devi generare una nuova coppia.

Una nota su qmail vs. notqmail: l’originale qmail è stato congelato da Daniel J. Bernstein nel 1998 e da allora non ha ricevuto alcun aggiornamento upstream. notqmail (ultima versione: 1.09, maggio 2024) è il fork mantenuto dalla comunità che aggiunge correzioni di sicurezza, compatibilità di build attuale e continui lavori di portabilità. TLS non ne fa parte: su notqmail, come sull’originale qmail, STARTTLS deriva da una patch esterna, e le note di rilascio della 1.09 riportano che l’esistente patch smtp-tls non si applica a quella versione e che è necessaria una nuova patch upstream. Verifica lo stato delle patch per la versione che utilizzi prima di ordinare un certificato. Il processo di generazione della CSR è identico per entrambi, poiché utilizza OpenSSL anziché un qualsiasi binario di qmail. Se stai ancora eseguendo l’originale qmail, valuta la migrazione a notqmail o Postfix per un supporto continuo alla sicurezza.

Prerequisiti

  • Accesso root o sudo al server su cui gira qmail (o notqmail).
  • OpenSSL installato. È incluso nel sistema di base su ogni distribuzione Linux e BSD principale. Verifica con openssl version.
  • L’hostname di posta completo (fully qualified) che desideri sul certificato, ad esempio mail.example.com. Deve corrispondere al record MX a cui i client si connettono tramite STARTTLS, non al semplice dominio apex.

Passo 1: Prepara una directory per la chiave e la CSR

Qmail-smtpd legge il suo certificato TLS da /var/qmail/control/servercert.pem, il percorso codificato in modo fisso dalla patch TLS. Crea una sottodirectory per il materiale delle chiavi e blocca l’accesso solo a root:

sudo mkdir -p /var/qmail/control/ssl
sudo chmod 700 /var/qmail/control/ssl
cd /var/qmail/control/ssl

Genererai la chiave e la CSR all’interno di questa directory. Dopo che la CA emette il certificato, combinerai i file nel file servercert.pem che qmail-smtpd legge all’avvio.

Passo 2: Genera la chiave privata e la CSR

Esegui il comando qui sotto. Crea la chiave privata e la CSR in un unico passaggio e include il Subject Alternative Name (SAN) richiesto dai moderni client di posta e dalle CA. Il SAN deve elencare l’hostname di posta (quello a cui punta il tuo record MX):

sudo openssl req -new -newkey rsa:2048 -nodes 
-keyout /var/qmail/control/ssl/mail.example.com.key 
-out /var/qmail/control/ssl/mail.example.com.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com" 
-addext "subjectAltName=DNS:mail.example.com"

Ecco cosa fa ciascuna parte:

  • req -new crea una nuova richiesta di firma del certificato.
  • -newkey rsa:2048 genera una nuova chiave privata RSA a 2048 bit. 2048 bit è il minimo attuale per i certificati pubblici; puoi usare rsa:4096 per una chiave più grande.
  • -nodes lascia la chiave privata non cifrata (senza passphrase), così qmail-smtpd può caricarla all’avvio senza richiedere conferme.
  • -keyout scrive la chiave privata. Mantieni questo file riservato e non inviarlo mai a nessuno, nemmeno alla CA.
  • -out scrive la CSR che invii alla CA.
  • -subj compila i campi del soggetto in linea in modo che il comando venga eseguito senza richieste interattive. Imposta CN (Common Name) sul tuo hostname di posta.
  • -addext “subjectAltName=…” aggiunge la voce SAN. Le CA emettono i certificati in base all’elenco SAN, quindi l’hostname di posta deve comparire qui.

Sostituisci mail.example.com con il vero hostname a cui si connettono i client (spesso lo stesso nome del tuo record MX), e modifica i valori di -subj in base alla tua organizzazione. Il codice paese a due lettere (C) deve essere maiuscolo, ad esempio US o GB. Per un certificato a convalida di dominio (DV), i campi dell’organizzazione non vengono verificati, ma il comando richiede comunque valori validi. Le versioni moderne di OpenSSL firmano la CSR con SHA-256 per impostazione predefinita, che è ciò che ogni CA pubblica richiede.

Se preferisci compilare i campi in modo interattivo anziché con -subj, ometti quel flag e OpenSSL ti chiederà ogni valore:

sudo openssl req -new -newkey rsa:2048 -nodes 
-keyout /var/qmail/control/ssl/mail.example.com.key 
-out /var/qmail/control/ssl/mail.example.com.csr 
-addext "subjectAltName=DNS:mail.example.com"

Quando richiesto, lascia vuoti challenge password e optional company name premendo Invio. Le CA ignorano quei campi, e una challenge password causa problemi in seguito.

Coprire più di un hostname

Se la stessa istanza qmail risponde su più di un nome (ad esempio, sia mail.example.com che smtp.example.com), elenca ogni hostname nel valore SAN, separati da virgole:

-addext "subjectAltName=DNS:mail.example.com,DNS:smtp.example.com"

Il Common Name dovrebbe rimanere l’hostname di posta primario. Aggiungere il dominio apex nudo al SAN è utile solo se i client di posta si connettono mai direttamente ad esso; se il tuo record MX punta a un sub-hostname, non hai bisogno dell’apex sul certificato.

Preferisci una chiave ECDSA?

Le chiavi ECDSA sono più piccole e veloci rispetto a RSA con lo stesso livello di sicurezza e sono supportate da tutti i client di posta e le CA attuali. Per generare invece una chiave e una CSR P-256 (prime256v1), sostituisci l’argomento -newkey:

sudo openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout /var/qmail/control/ssl/mail.example.com.key 
-out /var/qmail/control/ssl/mail.example.com.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com" 
-addext "subjectAltName=DNS:mail.example.com"

Nota che l’originale qmail con le patch TLS di DJB potrebbe non supportare ECDSA. Se esegui notqmail con una versione recente di OpenSSL, ECDSA funziona senza problemi.

Passo 3: Proteggi la chiave privata

Blocca la chiave privata in modo che solo root possa leggerla. Il file della chiave grezza serve solo quando costruirai in seguito il servercert.pem combinato, quindi la proprietà di root e il permesso 600 sono corretti:

sudo chown root:root /var/qmail/control/ssl/mail.example.com.key
sudo chmod 600 /var/qmail/control/ssl/mail.example.com.key

Il file CSR non è segreto (contiene solo la chiave pubblica e i dettagli del tuo soggetto), ma mantenerlo nella stessa directory bloccata rende l’organizzazione più ordinata.

Passo 4: Verifica la CSR

Prima di inviare la richiesta, conferma che contenga l’hostname e il SAN corretti e che la sua firma sia valida:

openssl req -noout -text -verify -in /var/qmail/control/ssl/mail.example.com.csr

Cerca verify OK nell’output, verifica che la riga Subject mostri il tuo hostname di posta come Common Name, e conferma che la sezione X509v3 Subject Alternative Name elenchi tutti gli hostname previsti. Se manca un SAN, rigenera la CSR con il valore -addext corretto: una CA non può aggiungere hostname dopo l’emissione. Puoi anche incollare la CSR nel nostro CSR Decoder online per controllare questi campi da browser.

Passo 5: Invia la CSR

Apri il file CSR e copia il suo intero contenuto, incluse le righe BEGIN e END:

cat /var/qmail/control/ssl/mail.example.com.csr

Il blocco appare così. Copia tutto dalla prima all’ultima riga, inclusi i cinque trattini su ciascun lato dei marcatori BEGIN e END:

-----BEGIN CERTIFICATE REQUEST-----
MIIC...base64-encoded data...AB
-----END CERTIFICATE REQUEST-----

Incolla quel blocco nel modulo d’ordine del tuo SSL. Dopo che la CA convalida la CSR ed emette il certificato, segui la nostra guida all’installazione SSL per qmail per distribuirlo. Mantieni il file .key sul server: ti serve insieme al certificato emesso per abilitare STARTTLS, e non devi mai inviarlo alla CA o a chiunque altro.

Se preferisci non usare la riga di comando, crea la richiesta con il nostro CSR Generator e incolla il risultato nel tuo ordine. Il generatore restituisce una chiave privata corrispondente che posizionerai nello stesso percorso sul server.

Dove vanno i file in qmail

Per contesto, ecco come i file appena generati vengono collegati a qmail una volta che la CA restituisce il certificato e l’intermedio (CA bundle). Qmail-smtpd legge il suo materiale TLS da un unico file PEM combinato in /var/qmail/control/servercert.pem. Questo file deve contenere la chiave privata, il certificato del server e i certificati intermedi, concatenati in quest’ordine:

cat mail.example.com.key mail.example.com.crt intermediate.pem 
> /var/qmail/control/servercert.pem
sudo chown root:nofiles /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem

Il gruppo nofiles è il gruppo predefinito per l’utente qmaild con cui viene eseguito qmail-smtpd. Il permesso 640 permette a qmaild di leggere il file tramite l’appartenenza al gruppo, mantenendolo illeggibile da altri utenti. Se il tuo sistema usa un gruppo diverso per qmaild, sostituisci quel nome di gruppo nel comando chown.

Qmail-smtpd offre STARTTLS solo quando è stato compilato con supporto TLS, cosa che né l’originale qmail né notqmail includono di per sé. Il percorso abituale per entrambi è la patch qmail-tls di Frederik Vermeulen: è ciò che fa sì che qmail-smtpd legga servercert.pem e annunci STARTTLS non appena quel file è presente. L’altra strada è s/qmail di Erwin Hoffmann con ucspi-ssl, dove sslserver esporta la variabile d’ambiente UCSPITLS in /service/qmail-smtpd/run e la chiave si trova in un file serverkey.pem separato, quindi la struttura a file singolo sopra descritta non si applica in quel caso. Dopo aver posizionato il file PEM combinato, riavvia il servizio qmail-smtpd:

sudo svc -t /service/qmail-smtpd

La procedura completa di installazione, inclusa la verifica della catena del certificato con OpenSSL, è nella nostra guida all’installazione SSL per qmail.

Verifica STARTTLS dopo l’installazione

Una volta installato il certificato, conferma che il tuo server annunci STARTTLS e fornisca una catena valida:

openssl s_client -connect mail.example.com:25 -starttls smtp -servername mail.example.com

Cerca Verify return code: 0 (ok) e conferma che il soggetto e l’emittente corrispondano al tuo certificato. Puoi anche scansionare il server con il nostro SSL Checker per un report visivo della catena del certificato e della data di scadenza.

Genera una CSR su altre piattaforme di posta

Utilizzi un server di posta diverso? Consulta le nostre altre guide sulla CSR:

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

Un'immagine dettagliata di un drago in volo
Scritto da

Scrittore di contenuti con esperienza, specializzato in certificati SSL. Trasforma intricati argomenti di cybersicurezza in contenuti chiari e coinvolgenti. Contribuisci a migliorare la sicurezza digitale attraverso narrazioni d'impatto.