bg-tutorials

Comment installer un certificat SSL sur Qmail

Ce tutoriel vous montre comment installer un certificat SSL/TLS sur Qmail, l’agent de transfert de courrier écrit à l’origine par D. J. Bernstein. Le processus est celui que Qmail utilise depuis des années : créer un seul fichier PEM contenant la clé privée, votre certificat serveur et la chaîne intermédiaire, le déposer dans /var/qmail/control/servercert.pem, puis redémarrer Qmail.

Avant de commencer : Qmail est un MTA hérité

Qmail lui-même n’a pas été mis à jour depuis la version originale qmail-1.03 de 1998. D. J. Bernstein a placé le code dans le domaine public en 2007 mais n’a pas repris le développement. Le fork communautaire bien connu netqmail a atteint sa version finale 1.06 en 2007 et n’est plus maintenu depuis plus d’une décennie. Le successeur moderne actif est notqmail (version actuelle 1.09, mai 2024), qui poursuit les corrections de bugs et la compatibilité avec les systèmes modernes tout en restant compatible avec l’original.

Tout aussi important pour ce guide : qmail de base n’a pas de prise en charge native du SSL/TLS. Le TLS est ajouté par l’une de ces deux voies tierces :

  • Le patch qmail-tls de Frederik Vermeulen, qui ajoute STARTTLS à qmail-smtpd et lit le certificat depuis un chemin codé en dur : /var/qmail/control/servercert.pem. La plupart des paquets qmail modernes (y compris les versions netqmail et notqmail, la distribution s/qmail, et de nombreux paquets fournis par les éditeurs) intègrent ce patch ou un équivalent.
  • stunnel devant qmail-smtpd pour envelopper la connexion en TLS sur le port 465 (SMTPS). Cela fonctionne avec n’importe quelle version de qmail car la terminaison TLS se fait en dehors de Qmail.

Si vous maintenez un déploiement qmail existant, les étapes ci-dessous s’appliquent toujours. Si vous créez un nouveau serveur de messagerie à partir de zéro, envisagez plutôt Postfix ou OpenSMTPD : les deux disposent d’une prise en charge TLS native, bien maintenue, et d’équipes de sécurité actives. Nous avons un tutoriel séparé sur comment installer un certificat SSL sur Postfix.

Générer un code CSR pour Qmail

Si vous avez déjà généré votre CSR et reçu les fichiers SSL de votre CA, passez directement à Installer le certificat SSL sur Qmail.

CSR signifie Certificate Signing Request (demande de signature de certificat) : un bloc de texte codé qui contient les détails de votre domaine et de votre organisation. Vous le soumettez à l’autorité de certification (CA) afin qu’elle puisse valider votre demande et émettre le certificat. La génération du CSR crée également la clé privée correspondante, qui reste sur votre serveur et est requise pour l’installation. Vous avez deux options :

Ouvrez le fichier CSR dans n’importe quel éditeur de texte brut et copiez l’intégralité du bloc, y compris les lignes BEGIN CERTIFICATE REQUEST et END CERTIFICATE REQUEST, dans le champ CSR de votre formulaire de commande. Conservez le fichier de clé privée en lieu sûr : vous le fusionnerez dans le fichier PEM à la section suivante.

Installer le certificat SSL sur Qmail

Après validation, la CA vous envoie par e-mail une archive ZIP contenant vos fichiers SSL : le certificat principal (serveur) et un ou plusieurs certificats intermédiaires (CA). Extrayez l’archive sur votre serveur, puis suivez les étapes ci-dessous.

Étape 1 : Combiner la clé, le certificat et la chaîne en un seul fichier PEM

Le patch qmail-tls (et les équivalents dans netqmail, notqmail et s/qmail) lit tout ce dont il a besoin pour terminer le TLS depuis un seul fichier PEM. Concaténez les fichiers dans cet ordre : votre clé privée en premier, puis votre certificat serveur, puis la chaîne intermédiaire (CA). Le certificat racine n’est pas requis (les clients lui font déjà confiance). Depuis le répertoire contenant vos fichiers extraits, exécutez :

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

Si votre CA a fourni les intermédiaires sous forme de fichiers séparés au lieu d’un seul .ca-bundle, listez chacun d’eux après le certificat serveur, feuille en premier et intermédiaire émetteur racine en dernier :

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

Ouvrez le fichier obtenu dans un éditeur de texte pour confirmer la structure. Il devrait ressembler à ceci, avec de vrais marqueurs à cinq tirets autour de chaque bloc :

-----BEGIN RSA PRIVATE KEY-----
(le texte de votre clé privée)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(le texte de votre certificat SSL principal)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(le texte du certificat CA intermédiaire)
-----END CERTIFICATE-----

Les clés plus récentes peuvent être étiquetées BEGIN PRIVATE KEY au lieu de BEGIN RSA PRIVATE KEY ; les deux conviennent. La clé ne doit pas être chiffrée avec une phrase secrète, car qmail-smtpd la charge au démarrage sans invite. Si votre CA a émis un certificat ECDSA, le bloc de clé sera BEGIN EC PRIVATE KEY ; rien d’autre ne change.

Étape 2 : Déplacer le fichier vers le répertoire de contrôle de Qmail

Le nom et le chemin du fichier sont fixés par le patch qmail-tls. Déplacez le fichier PEM combiné dans le répertoire de contrôle de Qmail et resserrez ses permissions, car il contient votre clé privée :

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

Le propriétaire et le groupe dépendent de l’utilisateur qui exécute qmail-smtpd sur votre système. Sur une installation netqmail ou notqmail standard, c’est généralement qmaild ou le groupe qmail, donc root:qmail avec le mode 600 fonctionne. Sur une configuration basée sur vpopmail, qmail-smtpd s’exécute en tant que vpopmail, donc utilisez :

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

Dans les deux cas, l’objectif est le même : le processus qmail-smtpd doit pouvoir lire le fichier, et rien d’autre ne le devrait.

Étape 3 : S’adapter aux versions personnalisées

La plupart des versions de qmail recherchent l’emplacement par défaut, mais quelques-unes utilisent plutôt des variables d’environnement. Adaptez-vous à votre version :

  • Qmail standard avec le patch qmail-tls (netqmail / notqmail / paquets fournis par les éditeurs) : aucune configuration supplémentaire n’est nécessaire. qmail-smtpd lit automatiquement /var/qmail/control/servercert.pem. Pour que qmail-smtpd annonce STARTTLS dans la réponse EHLO, la variable d’environnement UCSPITLS doit être définie dans le script d’exécution de qmail-smtpd (généralement /var/qmail/supervise/qmail-smtpd/run) : exportez UCSPITLS= » » avant la ligne qmail-smtpd. Pour exiger le chiffrement avant l’authentification, définissez également FORCE_TLS=1.
  • s/qmail avec ucspi-ssl : le chemin du certificat n’est pas codé en dur. Définissez ces variables d’environnement dans votre script d’exécution qmail-smtpd (ou dans le wrapper tcpserver / sslserver correspondant) : CERTFILE pour le certificat serveur, KEYFILE pour la clé privée (elles peuvent pointer vers le même fichier PEM combiné), et CERTCHAINFILE pour les intermédiaires. Consultez la documentation de s/qmail pour les noms exacts des directives dans votre version.
  • Frontal stunnel (SMTPS sur le port 465) : pointez la directive cert de stunnel vers /var/qmail/control/servercert.pem et faites en sorte que son exec lance qmail-smtpd. Cette voie n’a pas besoin du patch qmail-tls du tout ; le TLS se termine au niveau de stunnel.

Si vous ne savez pas avec quel patch votre qmail-smtpd a été compilé, vérifiez le binaire :

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

Si vous voyez des références à STARTTLS, servercert.pem, ou UCSPITLS, le binaire contient le patch qmail-tls compilé.

Étape 4 : Redémarrer Qmail

Qmail lit le certificat au démarrage du processus, un redémarrage de qmail-smtpd est donc nécessaire. Sur la plupart des installations utilisant les scripts de contrôle fournis :

sudo qmailctl restart

Si votre distribution encapsule Qmail dans un service systemd, utilisez plutôt :

sudo systemctl restart qmail

Sur une configuration daemontools / runit, envoyez plutôt un signal TERM à qmail-smtpd via svc :

sudo svc -t /service/qmail-smtpd

Surveillez le journal (généralement /var/log/qmail/smtpd/current) pour repérer les erreurs pendant le démarrage. Un PEM mal formaté ou une propriété incorrecte est la raison la plus courante pour laquelle qmail-smtpd refuse d’activer le TLS.

Testez votre installation SSL

Vérifiez que Qmail propose STARTTLS et sert le bon certificat avec OpenSSL. Remplacez mail.yourdomain.com par le nom d’hôte de votre serveur de messagerie :

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

La sortie devrait afficher le sujet de votre certificat (nom commun), l’émetteur (la CA) et les dates de validité. Si vous avez configuré SMTPS via stunnel sur le port 465 à la place, supprimez -starttls smtp et connectez-vous directement au port 465 :

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

Recherchez Verify return code: 0 (ok) au bas de la négociation. Si vous voyez une erreur de chaîne, les certificats intermédiaires sont absents de servercert.pem : ajoutez-les et redémarrez qmail-smtpd. Pour un rapport complet sur le certificat, la chaîne et la prise en charge du protocole, exécutez notre SSL Checker sur le nom d’hôte de votre serveur de messagerie.

Questions fréquemment posées

Où Qmail lit-il le certificat SSL ?

Depuis le fichier /var/qmail/control/servercert.pem. Ce chemin est codé en dur dans le patch qmail-tls qui ajoute STARTTLS à qmail-smtpd, et le même chemin est utilisé par toutes les versions courantes de qmail (netqmail, notqmail, paquets fournis par les éditeurs). Le fichier doit contenir la clé privée, le certificat serveur et la chaîne intermédiaire, dans cet ordre. s/qmail avec ucspi-ssl fait exception : il lit plutôt les variables d’environnement CERTFILE, KEYFILE et CERTCHAINFILE.

Dans quel ordre dois-je placer les fichiers dans servercert.pem ?

D’abord la clé privée, puis le certificat serveur (feuille), puis le ou les certificats CA intermédiaires. Le certificat racine n’est pas requis, car les clients de messagerie lui font déjà confiance. Une construction en une ligne suffit :
cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Si l’ordre est incorrect, qmail-smtpd échouera à charger le certificat au démarrage et le TLS ne sera pas proposé. Vérifiez le journal sous /var/log/qmail/smtpd/ si vous soupçonnez ce problème.

Qmail standard prend-il en charge le TLS ?

Pas par lui-même. La version originale qmail-1.03 de 1998 ne prend pas en charge SSL ou TLS. Le TLS est ajouté soit par le patch qmail-tls (compilé dans le binaire qmail-smtpd, ajoute STARTTLS sur les ports 25 et 587), soit en exécutant stunnel devant qmail-smtpd pour SMTPS sur le port 465. Presque tous les paquets qmail modernes sont livrés avec le patch qmail-tls déjà appliqué, vous n’avez donc généralement pas besoin de patcher la source vous-même.

Qmail est-il encore maintenu ?

Le Qmail original (qmail-1.03) n’a pas été mis à jour depuis 1998. Le premier fork communautaire, netqmail, a publié sa dernière version (1.06) en 2007. Le successeur moderne actif est notqmail, qui a publié la version 1.09 en mai 2024 et continue de fournir des corrections de bugs et des correctifs de compatibilité avec les systèmes modernes. Pour de nouveaux serveurs de messagerie, la plupart des opérateurs choisissent plutôt Postfix ou OpenSMTPD, tous deux dotés d’une prise en charge TLS native et activement maintenue.

Pourquoi qmail-smtpd démarre-t-il sans proposer STARTTLS ?

Trois causes courantes. Premièrement, la variable d’environnement UCSPITLS n’est pas exportée dans le script d’exécution de qmail-smtpd : définissez UCSPITLS= » » (la valeur peut être vide) avant la ligne qmail-smtpd et redémarrez le service. Deuxièmement, le binaire qmail-smtpd a été compilé sans le patch qmail-tls : vérifiez avec strings /var/qmail/bin/qmail-smtpd | grep -i tls. Troisièmement, /var/qmail/control/servercert.pem est absent, illisible pour l’utilisateur qmail-smtpd, ou mal formé ; vérifiez les permissions et l’ordre des blocs PEM.

Comment vérifier le certificat après avoir redémarré Qmail ?

Connectez-vous au port SMTP avec OpenSSL et lisez le certificat que Qmail présente via STARTTLS :
openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null | openssl x509 -noout -issuer -subject -dates
Ceci affiche le sujet, l’émetteur et les dates de validité. Pour SMTPS via stunnel sur le port 465, supprimez l’option -starttls smtp. Vérifiez que l’émetteur correspond à votre CA et que la négociation se termine par Verify return code: 0 (ok).

Economisez 10% sur les certificats SSL en commandant aujourd’hui!

Émission rapide, cryptage puissant, confiance de 99,99 % du navigateur, assistance dédiée et garantie de remboursement de 25 jours. Code de coupon: SAVE10

Image détaillée d'un dragon en vol
Rédigé par

Rédacteur de contenu expérimenté spécialisé dans les certificats SSL. Transformer des sujets complexes liés à la cybersécurité en un contenu clair et attrayant. Contribuer à l'amélioration de la sécurité numérique par des récits percutants.