Connexions TLS avec certificat sur le serveur IMAP

Je pars du principe que vous disposez déjà d'un serveur Dovecot fonctionnel avec connexions en clair. L'activation des connexions TSL est très simple et bien documentée sur le site de Dovecot.

1. Créez un certificat cryptographique pour le serveur de messagerie. Vous pouvez utiliser celui créé lors de l'installation de Dovecot (voir /etc/ssl/certs/dovecot.pem et /etc/ssl/private/dovecot.pem), générer un certificat de serveur autosigné, ou créer un certificat d'autorité de certification (CA) que vous utilisez ensuite pour produire et signer des certificats de serveur. L'opération est détaillée dans un autre document.

2. Dans le fichier de configuration de Dovecot, /etc/dovecot/dovecot.conf, modifiez les paramètres suivants :

Désactivation de l'envoi des mots de passe en clair, sauf lorsque la connexion est chiffrée avec SSL/TLS.

disable_plaintext_auth = yes

Paramètres SSL :

ssl_disable = no
ssl_cert_file = /chemin/mail.exemple.net-cert.pem
ssl_key_file = /chemin/mail.exemple.net-key.pem
# Pour diagnostiquer
verbose_ssl = yes

Je ne définis pas un port distinct pour les connexions chiffrées, car j'utilise le port par défaut. La connexion commence en clair et passe en chiffré avant l'envoi du mot de passe (STARTTLS).

3. Redémarrez Dovecot et essayez de vous connecter en TLS à l'aide d'un client de messagerie. Dans Thunderbird, choisissez Tools > Accoung Settings > Server Settings > Use secure connection : TLS. Ne cochez pas la case Use secure authentication, qui concerne l'envoi d'un mot de passe chiffré (SASL).

Dans le journal du système, vous devriez voir des lignes du type :

Jan  8 13:02:39 p400 dovecot: imap-login: 
Login: user=<toto>, method=PLAIN, 
rip=192.168.0.5, lip=192.168.0.2, TLS

A ce stade, le mot de passe est envoyé en clair par une connexion chiffrée TLS.

Si le certificat de serveur n'a pas été signé par une autorité "reconnue" (et payante), un message d'avertissement devrait apparaître dans le client de messagerie. Importez dans ce dernier le certificat (c'est-à-dire la clé publique) de l'autorité de certification (CA) maison qui a signé le certificat du serveur : dans Thunderbird, choisissez Tools > Options > Certificates > View Certificates > Authorities > Import.

Activation des certificats de client

Ces certificats, produits et signés par l'autorité de certification (CA) que nous avons créée précédemment, permettent d'authentifier les clients qui se connectent au serveur IMAP.

1. Créez des certificats clients signés avec le certificat du CA. Cette étape est décrite dans un autre document.

2. Importez le certificat de client dans un logiciel de messagerie (dans Thunderbird : Tools > Options > Certificates > View Certificates > Your certificates > Import).

3. Dans le fichier de configuration de Dovecot, /etc/dovecot/dovecot.conf, modifiez les paramètres suivants :

ssl_ca_file = /chemin/exemple-ca-cert.pem
ssl_verify_client_cert = yes

Ajoutez également le paramètre ssl_require_client_cert = yes dans la section "auth default" :

auth default {
  (...)
  ssl_require_client_cert = yes
  (...)
}

Redémarrez Dovecot et testez dans le client de messagerie.

Il est possible que la connexion aboutisse, mais qu'un message du type "Invalid certificate: unable to get certificate CRL" apparaisse dans le journal du système. Effectivement, comme l'expliquent les commentaires du fichier de configuration, le paramètre ssl_ca_file doit désigner un fichier contenant le certificat du CA, mais également la liste de révocation (CRL).

Générez une liste de révocation (voir ce document), puis ajoutez-là à un fichier contenant le certificat :

cp exemple-ca-cert.pem exemple-ca-cert+crl.pem
cat exemple-ca-crl.em >> exemple-ca-cert+crl.pem

Mettez à jour le fichier de configuration de Dovecot :

ssl_ca_file = /chemin/exemple-ca-cert+crl.pem

Redémarrez Dovecot, connectez-vous au serveur IMAP à l'aide d'un client de messagerie et consultez le journal du système. Vous devrez voir des lignes du type :

Jan  8 13:52:32 p400 dovecot: imap-login: Valid certificate: 
/O=Nom/OU=Info/emailAddress=machin@exemple.net/
L=Ville/ST=Département/C=FR/CN=Nom de l'autorité

Jan  8 13:52:32 p400 dovecot: imap-login: Valid certificate: /
C=FR/ST=Département/O=Nom/OU=Info/CN=Nom du client

Jan  8 13:52:32 p400 dovecot: imap-login: 
fingerprint: 7K:8F:30:45:4A:5F:5C:6B:9N:34:39:06:20:3E:KC:39

Chiffrement des mots de passe avec SASL

Tant qu'à faire, on va également activer l'envoi de mots de passe chiffré (CRAM-MD5). Avec SASL, les mots de passe sont chiffrés même si le reste de la connexion a lieu en clair.

Dans le fichier de configuration de Dovecot, modifiez la section auth default de la manière suivante :

auth default {
  mechanisms = cram-md5

  passdb passwd-file {
    args = /etc/cram-md5.pwd
  }
}

On crée ensuite le fichier cram-md5.pwd, qui va contenir le nom des utilisateurs et les mots de passe chiffrés. Pour générer un mot de passe chiffré, utilisez dovecotpw.

dovecotpw -s cram-md5
Enter new password: test
Retype new password: test
{CRAM-MD5}e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6

Placez ces infos dans le fichier cram-md5.pwd de la manière suivante :

utilisateur:{CRAM-MD5}e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6

Attention : la partie {CRAM-MD5} doit figurer dans le fichier, sinon ça ne marche pas et les messages d'erreur sont assez sybillins ("Requested CRAM-MD5 scheme, but we have only CRYPT").

Redémarrez Dovecot, activez l'authentification sécurisée dans un client de messagerie (dans Thunderbird : Tools > Accoung Settings > Server Settings > Use secure authentication) et consultez le journal du système. Vous devriez voir des lignes du type :

Jan  8 14:35:26 p400 dovecot: imap-login: 
Login: user=<toto>, method=CRAM-MD5, 
rip=192.168.0.5, lip=192.168.0.2, TLS

Derniers points, les paramètres auth_verbose et auth_debug de Dovecot peuvent être utiles pour diagnostiquer les problèmes d'authentification.

Documentation