Tout d’abord, à quoi sert le TLS ? à authentifier le client et le serveur avec des certificats, et surtout chiffrer les communications SMTP en SSL de manière à ne plus faire passer les données en clair.

la clé et le certificats seront installés dans /etc/postfix/tls

mkdir /etc/postfix/tls
cd /etc/postfix/tls

Commençons par générer notre clé :

openssl genrsa -rand /etc/hosts -out smtpd.key 1024

Puis le certificat :

openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Attention, lorsque vous générez les certificat, openssl va vous demander des informations comme votre pays, ville, nom d’organisation… vous pouvez mettre ce que vous voulez (mais c’est mieux d’être honnète et d’indiquer des vraies informations).
Par contre, lorsqu’il vous demande le « common name », il faut absolument renseigner le nom de votre serveur mail (par exemple mail.domaine.com).
C’est grâce à ce nom que le certificat est valide. On le retrouve normalement dans /etc/postfix/main.cf à la ligne « myhostname = mail.domaine.fr »

Et on édite le fichier /etc/postfix/main.cf pour y mettre ceci :

smtpd_use_tls=yes
smtpd_tls_security = may
smtpd_tls_key_file = /etc/postfix/tls/smtpd.key
smtpd_tls_cert_file = /etc/postfix/tls/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_loglevel = 1

Les lignes « log_level » servent surtout à afficher plus d’information sur les communications chiffrées… Donc pas obligatoire. A laisser activé au début pour vérifier que tout marche bien et à commenter ensuite.
la ligne « smtpd_tls_received_header = yes » sert à rajouter un header dans le mail afin d’indiquer que la session smtp s’est faite en TLS. donc pas obligatoire non plus.

Enfin on valide en relancant postfix :

/etc/init.d/postfix restart

Maintenant que notre postfix est configuré, il ne va pas forcément crypter toutes les communications. Pour que ça fonctionne, il faut que le serveur mail en face soit aussi configuré pour accepter le TLS.
Inversement, si quelqu’un vous envoie un email, et que son serveur mail supporte le TLS, alors il causera TLS à votre serveur