La demande de sécurité dans les envois de
Voici ce que j'ai configuré sur mon serveur
J'ai créé une
/etc/ssl/misc/CA.pl -newca
et mis les fichiers (certificat de la CA, certificats signés, etc)
dans
Un utilisateur ordinaire peut ensuite, sur sa machine, générer une
openssl req -config /etc/ssl/openssl.cnf -new -nodes -keyout monserveur.key -out monserveur.csr -days 1000
Cette demande doit ensuite être signée par la CA pour être un
certificat valide :
openssl ca -config ../openssl.cnf -policy policy_anything -days 1000 -out certs/monserveur.crt -infiles ~/tmp/monserveur.csr
Ces fichiers sont ensuite copiés là où Postfix les attend. Si on a mis
dans le
smtpd_tls_key_file = /etc/postfix/postfix-key.pem
smtpd_tls_cert_file = /etc/postfix/postfix-cert.pem
on copie la clé en
On peut vérifier ses certificats avec :
openssl x509 -text -noout -in postfix-cert.pem
Il affichera en clair toutes les informations contenues dans le certificat.
On peut alors configurer Postfix. Le serveur prend typiquement les
paramètres suivants (notez que la configuration du serveur,
# TLS non obligatoire, a la demande du client
smtpd_tls_security_level = may
smtpd_tls_auth_only = no
# Emplacement des cles et certificats
smtpd_tls_key_file = /etc/postfix/postfix-key.pem
smtpd_tls_cert_file = /etc/postfix/postfix-cert.pem
# Facultatif:
#smtpd_tls_CAfile = /etc/postfix/cacert.pem
# Si on veut authentifier les autres, il faut indiquer ou trouver les certificats
# des CA :
#smtpd_tls_CApath = /etc/ssl/certs
# Enregistrer dans un en-tete Received
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
# Divers
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Le serveur, une fois rechargé, doit alors accepter les connexions
TLS. On peut le vérifier avec
% telnet munzer.example.org smtp
Trying 208.75.84.80...
Connected to munzer.example.org.
Escape character is '^]'.
220 munzer.example.org ESMTP Postfix
EHLO foo.bar.example
250-munzer.example.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
La ligne STARTTLS nous indique que le serveur est prêt à faire du
Pour configurer un
smtp_tls_security_level = may
smtp_tls_loglevel = 1
# Le client n'a pas forcement les memes certificats que le serveur
smtp_tls_cert_file = /etc/postfix/postfix-cert.pem
smtp_tls_key_file = /etc/postfix/postfix-key.pem
Désormais, en envoyant un message depuis ce client vers ce serveur, on
aura dans le journal l'information que TLS a été utilisé :
Feb 28 14:34:16 munzer postfix/smtpd[17374]: TLS connection
established from foobar.example.net[192.0.2.53]: TLSv1 with cipher ADH-AES256-SHA
(256/256 bits)
La même information se retrouve dans les en-têtes du message :
Received: from mail.example.com (foobar.example.net [192.0.2.53])
(using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
(No client certificate requested)
by munzer.example.org (Postfix) with ESMTP id CC60F8C021
for <stephane@bortzmeyer.org>; Wed, 28 Feb 2007 14:34:16 +0100
(CET)
Si on demande un certificat au client :
smtpd_tls_ask_ccert = yes
on obtient un en-tête Received ainsi :
; Thu, 1 Mar 2007 17:40:36 +0100 (CET)
]]>
et, dans le journal :
Mar 1 17:40:36 ariane postfix/smtpd[3356]: Verified: subject_CN=smtp.bortzmeyer
.eu, issuer=Stephane Bortzmeyer
Mar 1 17:40:36 ariane postfix/smtpd[3356]: TLS connection established from foobar.example.net [192.0.2.53]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 b
its)
À noter qu'on peut tester TLS en ligne de commande avec :
% openssl s_client -connect MYMAILSERVER:smtp -starttls smtp -cert /etc/postfix/postfix-cert.pem -key /etc/postfix/postfix-key.pem -CAfile /etc/postfix/cacert.pem
Attention, par défaut, il vérifie le certificat du serveur, il faut donc avoir une
chaîne de CA valides chez le client. Si on veut juste regarder le certificat, par exemple pour voir sa validité :
% openssl s_client -connect MYMAILSERVER:smtp -starttls smtp \
-cert /etc/postfix/postfix-cert.pem -key /etc/postfix/postfix-key.pem \
-CAfile /etc/postfix/cacert.pem & /dev/null | \
openssl x509 -noout -subject -startdate -enddate
Un autre outil de test est ssl-cert-check qui permet des choses comme :
% ssl-cert-check -s mail.bortzmeyer.org -p 25
Host Status Expires Days
----------------------------------------------- ------------ ------------ ----
mail.bortzmeyer.org:25 Valid Nov 10 2010 673
On trouvera beaucoup d'autres détails dans :
Vous pouvez tester votre serveur en ligne. Et, naturellement, pour un test complet, on peut utiliser les auto-répondeurs de courrier dont plusieurs acceptent TLS.