tbsLogo guillemet Adresse : 22 rue de Bretagne - 14000 CAEN - FRANCE
Tél. : 02 76 30 59 00 - E-mail : certs@tbs-internet.com
guillemet et filet Friday, 27-Apr-2018 01:08:38 UTC Recherche arc gauche
arc droit langue FR
Les certificats
Le comparatif
Navigateurs
Notre gamme
Partenaires
Laboratoire
Sécurité Email
Outlook et S/MIME
Chiffrement S/MIME
Signature électronique S/MIME
S/MIME sous Unix
FAQ
Forums
The Satellite
Encyclopedia
Consulting
filet vert

Sendmail 8.11 supporte TLS !

Introduction

La nouvelle mouture de Sendmail (8.11.0) est sortie et elle intègre enfin l'extension STARTTLS (RFC 2487) ! Sendmail 8.11 est basée sur le 8.10 qui apportait près de 150 nouvelles fonctionnalités (voir http://sendmail.net/?feed=allabout810), de quoi justifier une mise à jour de votre serveur.

Cette extension permet :

  • l'authentification forte des serveurs SMTP,

  • l'établissement d'une session TLS (chiffrée) entre 2 serveurs,

  • l'authentification forte des clients SMTP,

  • l'établissement d'une session TLS (chiffrée) entre le client et le serveur.

Ceci permet par exemple de faire circuler le courrier dans des canaux chiffrés entre les serveurs d'une même organisation (VPN SMTP), de forcer le mode chiffré vers des destinations identifiées, ou encore d'autoriser le relais après présentation d'une authentification TLS cliente. A terme cette extension permettra de ne plus transporter de courrier en clair.

On peut faire un parallèle entre cette extension STARTTLS et ce que HTTPS est à HTTP. La seule différence notable est que STARTTLS permet d'utiliser le même port (25) pour le chiffré et le non chiffré alors que HTTP utilise encore (pour des raisons historiques) un port différent.

Pour plus d'information générale en français sur STARTTLS pour SMTP, POP3 et IMAP, en particulier sur les autres logiciels supportant cette norme, y compris les UAs, voir : https://www.tbs-internet.com/ssl/email.html.

J'ai écris une petite doc qui ne demande qu'à s'étoffer pour faciliter la mise en route de cette extension pour sendmail. Voici :

Compilation

Pour mettre en route l'extension STARTTLS dans Sendmail 8.11.0 il convient de lire la documentation concernant la compilation : http://www.sendmail.org/~ca/email/tlscomp.html

Elle indique qu'il faut se procurer OpenSSL (la librairie cryptographique) et sfio 1999. La compilation est l'étape la plus complexe !

Commencez par installer OpenSSL avec la configuration standard ( ./config; make; make install ). Pour sfio, la doc ne dit pas comment décompresser l'archive sfio et ce n'est pas trivial !

mkdir sfio1999 ; cd sfio1999
cpio --extract -d -I ../sfio_1999.src.unix.cpio

Ensuite déplacez le sous-répertoire include

mv include /usr/local/include/sfio

Si besoin, vérifiez les "include" des .h de ce répertoire (j'ai eu besoin de remplacer des <> par des "".

Ensuite décompressez le package Sendmail (ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.11.0.tar.gz) et créez un fichier devtools/Site/site.config.m4 avec (plus si affinité bien sur !) :

define(`confSTDIO_TYPE', `portable')
APPENDDEF(`confENVDEF', `-DSFIO')
APPENDDEF(`confLIBS', `-lsfio')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS')
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto -L/usr/local/ssl/lib')

Ensuite dans le répertoire sendmail, le fichier sfsasl.h ligne 16 a besoin d'une modification mineure (manquait le chemin d'accès) :

#  include <sfio/sfio.h>

Une fois ici, vous pouvez suivre les instructions normales d'installation (voir fichier INSTALL de Sendmail), ça doit marcher !

Installation

La configuration et l'utilisation de STARTTLS est documentée ici : http://www.sendmail.org/~ca/email/starttls.html

Cette doc n'est pas forcement hyper simple (elle se veut complète). Pour l'installation (Initial Setup) je recommande :

  • 1. Récupérer les racines des principales autorités de certification ici :
    https://www.TBS-internet.com/secure/ca/tbs-trusted-roots.tgz.

    - Placez le fichier allroots.pem qui se trouve dans cette archive dans : /usr/local/ssl/certs/
    (ou ailleurs si vous le souhaitez) et renseignez confCACERT avec le chemin complet vers ce fichier dans votre .mc

    Exemple :

define(`confCACERT', `/usr/local/ssl/certs/allroots.pem')dnl 
define(`confCACERT_PATH',`/usr/local/ssl/certs')dnl

Le confCACERT_PATH sert à indiquer où se trouvent les racines des autorités de certification qui seront utiliser pour vérifier le certificat client présenté par l'autre partie. Vous pouvez mettre plus de CA ici que dans le confCACERT, qui lui sert à indiquer quelles sont les racines indiquées comme acceptables dans la négociation TLS.

ATTENTION :
il convient de vérifier que la liste des CA fournies dans confCACERT
ne soient pas trop longue. Nous avons constaté que 55 certificats "sont trop" et
entrainent des échecs de négociation SSL3/TLS.
Notre fichier allroots.pem en contient 13 et ne pose pas de problème.

Si vous voyez des connexions entrantes avec des erreurs du style :
TLS: 19900:error:14094417:SSL routines:SSL 3_READ_BYTES:sslv3 alert illegal parameter:s3_pkt.c:964:SSL alert number 47
pensez à tester en réduisant le nombre d'entrées dans votre confCACERT.

Les racines des autorités de certification permettront d'authentifier les serveurs et clients qui viendront se connecter sur votre serveur.



  • 2. Obtenir un certificat SSL/TLS pour votre serveur. Ceci sera la carte d'identité électronique de votre serveur.

    Il y a 2 grandes façon de faire. Soit utiliser un certificat standard fournit par une autorité de certification (CA) soit créer votre propre autorité de certification (je n'aborde pas ce point ici, voir http://www.openCA.org/).

    Le plus simple pour démarrer consiste à utiliser un certificat de test d'un CA. Pour se faire, on utilise OpenSSL que l'on suppose installé dans /usr/local/ssl/ :
# 2.1: fabriquez une clef privée
# (remplacez "/var/log/messages" par un fichier de log quelconque (cela sert à
# initialiser le moteur random) et "smtp.toto.com" par le nom de votre serveur)
cd /usr/local/ssl/private
openssl genrsa -rand /var/log/messages 1024 > smtp.toto.com.key
# protégez et faites une sauvegarde de cette clef
chmod 400 smtp.toto.com.key
chown root smtp.toto.com.key


# 2.2: fabriquez une demande de certificat
cd /usr/local/ssl/certs
openssl req -new -key ../private/smtp.toto.com.key > smtp.toto.com.csr

# le système vous demande alors de renseigner les champs de votre certificat
# voilà comment renseigner les champs correctement!
# Le code ISO de votre pays
# => Country Name (2 letter code) [AU]:FR
# Le nom du département dans lequel vous êtes (exemple 92 = Hauts de Seine)
# => State or Province Name (full name) [Some-State]:Hauts de Seine
# La ville
# => Locality Name (eg, city) []:Nanterre
# le nom de votre entreprise/université/association
# => Organization Name (eg, company) [Internet Widgits Pty Ltd]:TOTO
# optionnel: le nom du service/division
# => Organizational Unit Name (eg, section) []:service technique
# Très important: le nom officiel du serveur (le nom en toutes lettres qui 
# figure dans la partie droite du record MX; exemple: "smtp.toto.com" dans 
# "toto.com. IN MX 0 smtp.toto.com."); ce champ est vérifié lors de 
# l'authentification
# => Common Name (eg, YOUR name) []:smtp.toto.com
# optionnel: ne rien mettre (valider) ou éventuellement postmaster@toto.com
# => Email Address []:
# ne rien mettre (valider)
# => A challenge password []:
# ne rien mettre (valider)
# An optional company name []:



2.3 : Demandez votre certificat

  • Obtenir ici un certificat Gratuit pour 30 jours

  • copier/coller votre fichier CSR (smtp.toto.com.csr) dans la grande boite "Certificate Signing Request"

  • Finissez le remplissage de la page (il faut rentrer des informations correctes, sinon l'audit sera impossible)

2.4 : Installez votre certificat

  • Faites un copier/coller du bloc résultat (avec les lignes commencant par ----- ) et placez cela dans un nouveau fichier smtp.toto.com.crt dans votre répertoire /usr/local/ssl/certs

    Notez que pour qu'un autre serveur Sendmail configuré voit votre certificat serveur comme "vérifié", il faut installer les racines de confiance dans le serveur. Vous pouvez déposer notre base: https://www.TBS-internet.com/secure/ca/tbs-trusted-roots.tgz) dans /usr/local/ssl/certs/.

3 : Renseignez le tout dans Sendmail

  • confSERVER_CERT et confCLIENT_CERT avec :
    /usr/local/ssl/certs/smtp.toto.com.crt

  • et
    confSERVER_KEY et confCLIENT_KEY :
    /usr/local/ssl/private/smtp.toto.com.key dans votre .mc

4 : Si votre OS n'a pas de /dev/urandom

  • Voyez la doc Sendmail

5 : Testez !

  • A ce stade votre Sendmail doit être compilé, avoir ses .mc et son .cf.

  • Lancez le démon et faites un "telnet localhost 25"

  • Tapez "EHLO toto" et vous devez voir en retour une ligne
    250-STARTTLS
    Si ce n'est pas le cas, vérifiez les logs, ajouter du debug, etc.

Usage

Pour tester avec un autre serveur maintenant, envoyez un mail à tag-ping@TBS-internet.com qui renverra votre message. Notre ligne "Received" contiendra "with XXX encrypted SMTP" si votre message a été reçu par nous en mode STARTTLS (notre serveur utilise un qmail avec STARTTLS). Votre Sendmail qui doit recevoir le retour indiquera dans son champ received un :
(using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify}) si il a reçu le message de notre serveur en mode TLS. A la réception du message il ne vous reste donc plus qu'à étudier les entêtes du message pour savoir si STARTTLS fonctionne bien dans les deux sens. Vous pouvez aussi envoyer un email à bounce@esmtp.org pour tester avec un serveur Sendmail.

Il ne vous reste plus maintenant qu'à configurer les autres options notamment l'autorisation de relais lors de présentation de certificats client (voir http://www.tbs-certificats.com/email-securise.html pour vous procurer un certificat client gratuitement) !

Conclusion

La mise en place de STARTTLS est certes un peu complexe (surtout avec Sendmail !) mais cela en vaut largement la peine !

N'hésitez pas à me fournir du feedback sur votre expérience directement par email (tag-ssl-feedback@TBS-internet.com) et/ou à rejoindre la liste de diffusion cryptox509 (voir https://www.tbs-internet.com/ssl/liste.html). Votre aide permettra d'améliorer cette doc et d'alimenter https://www.tbs-internet.com/ssl/email.html.




TBS est une société de conseil spécialisée dans les télécommunications spatiales, le conseil aux ISPs et la sécurité du commerce électronique. TBS-internet est courtier en certificats depuis 1996.

Sécurisation Outlook Express | Sécurisation Netscape Communicator | Sécurisation serveurs SMTP/POP/IMAP |
Autres documents sécurité TBS

blanc
blanc [Webmaster] [Crédits] [Les certificats] [The Satellite Encyclopedia] [Pitux] [Consulting] [Accueil]
© TBS Internet, tous droits réservés. Toute reproduction, copie ou mirroring interdit.
Dernière modification: 22 November 2016