L'initiative toute fraîche de l'Electronic Frontier Foundation baptisée STARTTLS EveryWhere est dans la lignée du mouvement lancé avec Let's Encrypt, permettant à tout un chacun de disposer de certificats SSL/TLS gratuits, et donc d'activer le fameux protocole HTTPS sur un site web. Le web n'est pas le seul concerné. L'e-mail aussi.
Si vous utilisez des services tiers tels que Yahoo, Gmail, tout est déjà pris en charge. Si vous disposez de votre propre serveur mail dédié pour tout ce qui est envoi (SMTP) ou boîte de réception (POP3, IMAP) ce n'est peut être pas encore le cas. C'est l'occasion de s'y intéresser. Pour sécuriser, fiabiliser vos échanges, vérifier l'identité du serveur et ne plus avoir à accepter de certificat auto-signé.
STARTTLS est le protocole permettant d'améliorer une connexion classique vers une sécurisée en utilisant TLS (Transport Layer Security). Vous connaissez déjà certainement le terme SSL (Secure Sockets Layer) qui a été développé par Netscape. C'est une longue histoire, mais l'IETF (Internet Engineering Task Force) a pris SSL 3 en main et l'a "renommé" TLS. Actuellement nous en sommes à la version 1.3 approuvée en mars 2018. Elle abandonne de vieux protocoles de chiffrement trop faibles tels que MD5, RC4, etc.
Vous pouvez utiliser l'outil de test de STARTTLS EveryWhere pour savoir si
- votre serveur supporte STARTTLS
- utilise une version sécurisée
- utilise un certificat valide
C'est le dernier point qui nous intéresse ici, avec comme exemple les serveurs Postfix pour SMTP et Dovecot pour POP3/IMAP. En ce qui concerne l'activation pure de STARTTLS dans la configuration et l'obtention d'un certificat, vous trouverez de la documentation à foison sur le web.
Ceci suppose bien entendu d'avoir un accès super-admin (root) sur la machine. Avant toute chose, sauvegardez votre configuration avant d'y toucher. Au besoin, commentez les lignes de configuration pour pouvoir immédiatement y revenir ensuite.
Obtenir un certificat
L'idéal est de se servir de certbot pour gérer l'acquisition automatique du certificat à partir du serveur, sa validation et surtout son renouvellement. Les fichiers délivrés par Let's Encrypt ne sont valables que 3 mois contrairement à un certificat payant qui peut durer une à plusieurs années.
Vous pouvez parfaitement utiliser un certificat déjà délivré et renouvelé pour votre site web en HTTPS (serveur Apache, etc). Jetez un oeil dans les répertoires mentionnés ci-dessous pour savoir si vous disposez déjà du nécessaire en fichiers pem à jour.
Le nom utilisé pour communiquer avec votre serveur est très important (FQDN : Fully Qualified Domain Name). Si vous utilisez un alias ou un nom erroné, le certificat pourra être considéré comme invalide car le nom du serveur ne correspondra pas à la connexion réelle.
Sur certaines distributions Linux on peut installer certbot avec un paquet, par exemple sous Ubuntu en passant par un repository PPA (Personal Package Archive).
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
Certbot doit pouvoir communiquer avec l'extérieur pour l'obtention du certificat, vous devez laisser passer les ports 80 et 443 si vous avez un firewall.
Une ligne de commande permettant d'obtenir un nouveau certificat ressemble à ceci, en présumant que le nom de domaine du serveur est mail.example.org :
sudo certbot certonly --standalone -d mail.example.org
Une ligne de commande permettant le renouvellement ressemble à ceci :
sudo certbot renew
Des fichiers sont alors générés dans le répertoire /etc/letsencrypt/live
suivi du nom du domaine. Vous pouvez y jeter un coup d'oeil avec sudo ls /etc/letsencrypt/live/mail.example.org
. Plusieurs fichiers de clés devraient s'y trouver (cert.pem, chain.pem, fullchain.pem, privkey.pem)... ou comme disait Beethoven : pem pem pem pem.
- Le fichier
privkey.pem
sera utile, c'est la clé privée. - Le fichier
fullchain.pem
sera également utile, contenant le certificat associé à d'autres certificats intermédiaires.
Si certbot est bien installé, il devrait avoir ajouté un fichier dans /etc/cron.d
pour le renouvellement périodique et automatique de ces fichiers (au moins tous les 3 mois) avec crontab, et une configuration pour chaque domaine dans /etc/letsencrypt/renewal/
. La documentation de certbot sur le renouvellement automatique vous donnera tous les détails.
Configurer Postfix
Le serveur SMTP le plus courant est Postfix. Si votre serveur l'utilise, sa configuration est stockée dans /etc/postfix/main.cf
. Editez ce fichier avec votre éditeur de code favori, par exemple vi
ou nano
.
Il faudra indiquer aux clés correspondantes les chemins complets vers les fichiers pem. Pensez à conserver les informations en commentaire pour les rétablir plus tard en cas de nécessité.
# smtpd_tls_cert_file = /etc/postfix/smtpd.cert
# smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.org/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.org/privkey.pem
smtpd_use_tls = yes
Il faudra redémarrer le service pour prendre en compte les changements. Par exemple sous Ubuntu/Debian :
service postfix restart
Configurer Dovecot
De la même façon, le serveur Dovecot est l'un des plus courants pour tout ce qui touche à POP3 et IMAP. Sa configuration se trouve dans /etc/dovecot/conf.d/
et plus précisément le fichier /etc/dovecot/conf.d/10-ssl.conf
pour tout ce qui touche à SSL/TLS.
Là aussi on indique les bons chemins.
ssl_cert = /etc/letsencrypt/live/mail.example.org/fullchain.pem
ssl_key = /etc/letsencrypt/live/mail.example.org/privkey.pem
N'oubliez pas de redémarrer le service :
service dovecot restart
Testez !
Testez avec votre client mail (pourquoi pas Thunderbird) la réception et l'envoi. Si cela ne fonctionne pas immédiatement, vous pouvez revenir à l'état précédent avec la configuration que vous aurez sauvegardée.
Un autre outil pratique est MXToolbox Supertool pour vérifier la bonne configuration externe de votre SMTP.
Commenter
Vous devez être inscrit et identifié pour utiliser cette fonction.
Connectez-vous (déjà inscrit)
Pas encore inscrit ? C'est très simple et gratuit.