bg-tutorials

Cum se instalează un certificat SSL pe Qmail

Acest tutorial vă arată cum să instalați un certificat SSL/TLS pe Qmail, agentul de transfer de e-mail scris inițial de D. J. Bernstein. Procesul este același pe care Qmail l-a folosit de ani de zile: construiți un singur fișier PEM care conține cheia privată, certificatul de server și lanțul intermediar, plasați-l la /var/qmail/control/servercert.pem și reporniți Qmail.

Înainte de a începe: Qmail este un MTA vechi

Qmail în sine nu a mai fost actualizat de la lansarea originală qmail-1.03 din 1998. D. J. Bernstein a plasat codul în domeniul public în 2007, dar nu a reluat dezvoltarea. Cunoscutul fork al comunității, netqmail, a ajuns la versiunea finală 1.06 în 2007 și nu a mai fost întreținut de peste un deceniu. Succesorul modern activ este notqmail (versiunea curentă 1.09, mai 2024), care preia corecțiile de erori și compatibilitatea cu sistemele moderne, rămânând totodată compatibil ca înlocuitor direct cu versiunea originală.

La fel de important pentru acest ghid: qmail-ul de bază nu are suport nativ pentru SSL/TLS. TLS este adăugat printr-una dintre cele două căi terțe:

  • Patch-ul qmail-tls creat de Frederik Vermeulen, care adaugă STARTTLS la qmail-smtpd și citește certificatul dintr-o cale fixă: /var/qmail/control/servercert.pem. Majoritatea pachetelor qmail moderne (inclusiv build-urile netqmail și notqmail, distribuția s/qmail și multe pachete ale furnizorilor) includ acest patch sau un echivalent.
  • stunnel în fața qmail-smtpd pentru a încapsula conexiunea în TLS pe portul 465 (SMTPS). Acest lucru funcționează cu orice build de qmail, deoarece terminarea TLS are loc în afara Qmail.

Dacă întrețineți o instalare existentă de qmail, pașii de mai jos se aplică în continuare. Dacă construiți un server de e-mail nou de la zero, luați în considerare Postfix sau OpenSMTPD: ambele au suport TLS nativ, bine întreținut, și echipe de securitate active. Avem un tutorial separat despre cum să instalați un certificat SSL pe Postfix.

Generați un cod CSR pentru Qmail

Dacă ați generat deja CSR-ul și ați primit fișierele SSL de la CA, treceți direct la Instalarea certificatului SSL pe Qmail.

CSR înseamnă Certificate Signing Request: un bloc de text codificat care conține detaliile domeniului și ale organizației dumneavoastră. Îl trimiteți Autorității de Certificare (CA) pentru ca aceasta să vă valideze cererea și să emită certificatul. Generarea CSR-ului creează și cheia privată corespunzătoare, care rămâne pe server și este necesară pentru instalare. Aveți două opțiuni:

Deschideți fișierul CSR în orice editor de text simplu și copiați întregul bloc, inclusiv liniile BEGIN CERTIFICATE REQUEST și END CERTIFICATE REQUEST, în câmpul CSR din formularul dumneavoastră de comandă. Păstrați fișierul cu cheia privată în siguranță: îl veți combina în fișierul PEM în secțiunea următoare.

Instalați certificatul SSL pe Qmail

După validare, CA vă trimite prin e-mail o arhivă ZIP cu fișierele SSL: certificatul principal (de server) și unul sau mai multe certificate intermediare (CA). Extrageți arhiva pe server, apoi urmați pașii de mai jos.

Pasul 1: Combinați cheia, certificatul și lanțul într-un singur fișier PEM

Patch-ul qmail-tls (și echivalentele din netqmail, notqmail și s/qmail) citește tot ce are nevoie pentru a termina TLS dintr-un singur fișier PEM. Concatenați fișierele în această ordine: mai întâi cheia privată, apoi certificatul de server, apoi lanțul intermediar (CA). Certificatul rădăcină nu este necesar (clienții îl recunosc deja ca fiind de încredere). Din directorul care conține fișierele extrase, rulați:

cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem

Dacă CA v-a furnizat certificatele intermediare ca fișiere separate în loc de un singur .ca-bundle, enumerați fiecare dintre ele după certificatul de server, cu cel mai apropiat de frunză primul și intermediarul emitent al rădăcinii ultimul:

cat yourdomain.key yourdomain.crt intermediate1.crt intermediate2.crt > servercert.pem

Deschideți fișierul rezultat într-un editor de text pentru a confirma structura. Ar trebui să arate astfel, cu marcaje reale de cinci cratime în jurul fiecărui bloc:

-----BEGIN RSA PRIVATE KEY-----
(the text of your private key)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(the text of your primary SSL certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(the text of the intermediate CA certificate)
-----END CERTIFICATE-----

Cheile mai noi pot fi etichetate BEGIN PRIVATE KEY în loc de BEGIN RSA PRIVATE KEY; oricare dintre variante este acceptabilă. Cheia nu trebuie să fie criptată cu o frază de acces, deoarece qmail-smtpd o încarcă la pornire fără a solicita introducerea vreunei parole. Dacă CA a emis un certificat ECDSA, blocul cheii va fi BEGIN EC PRIVATE KEY; nimic altceva nu se schimbă.

Pasul 2: Mutați fișierul în directorul de control al Qmail

Numele fișierului și calea sunt fixate de patch-ul qmail-tls. Mutați fișierul PEM combinat în directorul de control al Qmail și restrângeți permisiunile acestuia, deoarece conține cheia dumneavoastră privată:

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

Proprietarul și grupul depind de utilizatorul care rulează qmail-smtpd pe sistemul dumneavoastră. Pe o instalare standard netqmail sau notqmail, acesta este de obicei qmaild sau grupul qmail, deci root:qmail cu modul 600 funcționează. Pe o configurație bazată pe vpopmail, qmail-smtpd rulează ca vpopmail, deci folosiți:

sudo chown vpopmail:vchkpw /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem

Indiferent de metodă, obiectivul este același: procesul qmail-smtpd trebuie să poată citi fișierul, iar nimic altceva nu ar trebui să aibă acest acces.

Pasul 3: Ajustați pentru build-uri personalizate

Majoritatea variantelor de qmail caută în locația implicită, dar câteva folosesc variabile de mediu în schimb. Verificați care se potrivește build-ului dumneavoastră:

  • Qmail standard cu patch-ul qmail-tls (netqmail / notqmail / pachete ale furnizorilor): nu este necesară nicio configurare suplimentară. qmail-smtpd citește automat /var/qmail/control/servercert.pem. Pentru ca qmail-smtpd să anunțe STARTTLS în răspunsul EHLO, variabila de mediu UCSPITLS trebuie setată în scriptul de rulare qmail-smtpd (de obicei /var/qmail/supervise/qmail-smtpd/run): exportați UCSPITLS=”” înainte de linia qmail-smtpd. Pentru a impune criptarea înainte de autentificare, setați și FORCE_TLS=1.
  • s/qmail cu ucspi-ssl: calea certificatului nu este fixată. Setați aceste variabile de mediu în scriptul de rulare qmail-smtpd (sau în wrapper-ul tcpserver / sslserver corespunzător): CERTFILE pentru certificatul de server, KEYFILE pentru cheia privată (acestea pot indica spre același fișier PEM combinat) și CERTCHAINFILE pentru intermediari. Consultați documentația s/qmail pentru denumirile exacte ale directivelor din versiunea dumneavoastră.
  • Frontend stunnel (SMTPS pe portul 465): direcționați directiva cert a stunnel către /var/qmail/control/servercert.pem și lăsați directiva sa exec să lanseze qmail-smtpd. Această cale nu necesită deloc patch-ul qmail-tls; TLS se termină la nivelul stunnel.

Dacă nu știți cu ce patch a fost construit qmail-smtpd, verificați binarul:

strings /var/qmail/bin/qmail-smtpd | grep -iE 'tls|starttls|servercert'

Dacă vedeți referințe la STARTTLS, servercert.pem sau UCSPITLS, binarul are compilat patch-ul qmail-tls.

Pasul 4: Reporniți Qmail

Qmail citește certificatul la pornirea procesului, așa că este necesară repornirea qmail-smtpd. Pe majoritatea instalărilor care folosesc scripturile de control furnizate:

sudo qmailctl restart

Dacă distribuția dumneavoastră încapsulează Qmail într-un serviciu systemd în schimb, folosiți:

sudo systemctl restart qmail

Pe o configurație daemontools / runit, trimiteți un semnal TERM către qmail-smtpd prin svc:

sudo svc -t /service/qmail-smtpd

Urmăriți jurnalul (de obicei /var/log/qmail/smtpd/current) pentru erori în timpul pornirii. Un fișier PEM formatat incorect sau permisiuni greșite reprezintă cea mai frecventă cauză pentru care qmail-smtpd refuză să activeze TLS.

Testați instalarea SSL

Confirmați că Qmail oferă STARTTLS și servește certificatul corect folosind OpenSSL. Înlocuiți mail.yourdomain.com cu numele de gazdă al serverului dumneavoastră de e-mail:

openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null 
| openssl x509 -noout -issuer -subject -dates

Rezultatul ar trebui să afișeze subiectul certificatului (numele comun), emitentul (CA) și datele de valabilitate. Dacă ați configurat SMTPS prin stunnel pe portul 465 în schimb, eliminați -starttls smtp și conectați-vă direct la portul 465:

openssl s_client -connect mail.yourdomain.com:465 -servername mail.yourdomain.com

Căutați Verify return code: 0 (ok) la finalul procesului de negociere (handshake). Dacă vedeți o eroare de lanț, certificatele intermediare lipsesc din servercert.pem: adăugați-le și reporniți qmail-smtpd. Pentru un raport complet despre certificat, lanț și suportul protocolului, rulați instrumentul nostru SSL Checker asupra numelui de gazdă al e-mailului dumneavoastră.

Întrebări frecvente

De unde citește Qmail certificatul SSL?

Din fișierul /var/qmail/control/servercert.pem. Această cale este fixă în patch-ul qmail-tls, care adaugă STARTTLS la qmail-smtpd, iar aceeași cale este folosită de fiecare variantă comună de qmail (netqmail, notqmail, pachete ale furnizorilor). Fișierul trebuie să conțină cheia privată, certificatul de server și lanțul intermediar, în această ordine. s/qmail cu ucspi-ssl reprezintă excepția: acesta citește variabilele de mediu CERTFILE, KEYFILE și CERTCHAINFILE în schimb.

În ce ordine pun fișierele în servercert.pem?

Mai întâi cheia privată, apoi certificatul de server (frunza), apoi certificatul (certificatele) CA intermediar(e). Certificatul rădăcină nu este necesar, deoarece clienții de e-mail îl recunosc deja ca fiind de încredere. O construcție într-o singură linie este suficientă:
cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Dacă ordinea este greșită, qmail-smtpd nu va reuși să încarce certificatul la pornire și TLS nu va fi oferit. Verificați jurnalul din /var/log/qmail/smtpd/ dacă suspectați acest lucru.

Qmail standard suportă TLS?

Nu de la sine. Lansarea originală qmail-1.03 din 1998 nu are suport SSL sau TLS. TLS este adăugat fie prin patch-ul qmail-tls (compilat în binarul qmail-smtpd, adaugă STARTTLS pe porturile 25 și 587), fie prin rularea stunnel în fața qmail-smtpd pentru SMTPS pe portul 465. Aproape toate pachetele moderne de qmail vin cu patch-ul qmail-tls deja aplicat, deci de obicei nu trebuie să aplicați singur patch-ul asupra sursei.

Qmail mai este întreținut?

Qmail-ul original (qmail-1.03) nu a mai fost actualizat din 1998. Primul fork al comunității, netqmail, a avut ultima sa lansare (1.06) în 2007. Succesorul modern activ este notqmail, care a lansat versiunea 1.09 în mai 2024 și continuă să ofere corecții de erori și patch-uri de compatibilitate cu sistemele moderne. Pentru servere de e-mail noi, majoritatea operatorilor aleg în schimb Postfix sau OpenSMTPD, ambele având suport TLS nativ și întreținut activ.

De ce pornește qmail-smtpd, dar nu oferă STARTTLS?

Trei cauze frecvente. În primul rând, variabila de mediu UCSPITLS nu este exportată în scriptul de rulare qmail-smtpd: setați UCSPITLS=”” (valoarea poate fi goală) înainte de linia qmail-smtpd și reporniți serviciul. În al doilea rând, binarul qmail-smtpd a fost construit fără patch-ul qmail-tls: confirmați cu strings /var/qmail/bin/qmail-smtpd | grep -i tls. În al treilea rând, /var/qmail/control/servercert.pem lipsește, nu poate fi citit de utilizatorul qmail-smtpd sau este malformat; verificați permisiunile și ordinea blocurilor PEM.

Cum verific certificatul după repornirea Qmail?

Conectați-vă la portul SMTP cu OpenSSL și citiți certificatul pe care Qmail îl prezintă prin STARTTLS:
openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null | openssl x509 -noout -issuer -subject -dates
Aceasta afișează subiectul, emitentul și datele de valabilitate. Pentru SMTPS prin stunnel pe portul 465, eliminați parametrul -starttls smtp. Confirmați că emitentul corespunde CA-ului dumneavoastră și că negocierea se încheie cu Verify return code: 0 (ok).

Economisește 10% la certificatele SSL în momentul plasării comenzii!

Eliberare rapidă, criptare puternică, încredere în browser de 99,99%, suport dedicat și garanție de returnare a banilor în 25 de zile. Codul cuponului: SAVE10

A detailed image of a dragon in flight

Autor cu experiență, specializat în certificate SSL. Transformă subiectele complexe despre securitatea cibernetică în conținut clar și captivant. Contribuie la îmbunătățirea securității digite prin narațiuni cu impact.