STARTTLS est une commande per­met­tant de lancer une com­mu­ni­ca­tion chiffrée à l’aide de TLS (Transport Layer Security), sans changer de port. On parle aussi de « TLS op­por­tu­niste ».

Comment fonc­tionne StartTLS ?

En tant qu’extension du protocole TLS, StartTLS permet d’ajouter une couche de chif­fre­ment tout en restant com­pa­tible avec les clients qui ne prennent pas TLS en charge. Il présente ainsi moins de problèmes de com­pa­ti­bi­lité. Si un serveur ne prend pas en charge TLS, le client doit alors décider comment traiter les données. Autre avantage : la né­go­cia­tion du chif­fre­ment s’effectue au­to­ma­ti­que­ment entre le client et le serveur, sans né­ces­si­ter d’in­ter­ven­tion manuelle, même en cas de défaut de com­mu­ni­ca­tion.

Avec StartTLS, la connexion débute toujours en clair, sur le port nor­ma­le­ment utilisé pour les com­mu­ni­ca­tions non chiffrées. Ce n’est qu’après l’exécution de la commande STARTTLS que le chif­fre­ment est négocié avec le client, sans qu’il soit né­ces­saire d’établir une nouvelle connexion. Même en cas d’échec de la né­go­cia­tion, aucun chan­ge­ment de port n’est requis : le client peut sim­ple­ment relancer la procédure StartTLS proposée par le serveur de mes­sa­ge­rie.

Image: Graphique récapitulatif du fonctionnement de StartTLS
Lors de la com­mu­ni­ca­tion entre deux serveurs, StartTLS chiffre les échanges si les deux le prennent en charge.

Exemple avec un email

StartTLS est utilisé pour intégrer fa­ci­le­ment le chif­fre­ment dans le flux de com­mu­ni­ca­tion normal. Vous trouverez gé­né­ra­le­ment cette option dans la con­fi­gu­ra­tion du compte ou dans les pa­ra­mètres de votre client de mes­sa­ge­rie.

Une fois l’email envoyé, la com­mu­ni­ca­tion démarre :

  1. Le client envoie une requête EHLO pour demander les méthodes de chif­fre­ment.
  2. Le serveur de mes­sa­ge­rie répond 250-STARTTLS pour indiquer qu’il accepte la procédure StartTLS.
  3. Le client envoie STARTTLS pour démarrer le chif­fre­ment.
  4. Le serveur répond avec le code d’état 220 OK ; ce code signale que le serveur est prêt à établir une connexion chiffrée.
Adresse email pro­fes­sion­nelle
Découvrez une nouvelle façon de traiter vos emails
  • Adresse email à votre nom
  • Fonctions d'IA pour rédiger des emails parfaits (en option)
  • Mes­sa­ge­rie sécurisée avec pro­tec­tion anti-spam

Domaines d’ap­pli­ca­tion de StartTLS

StartTLS est une extension de protocole prin­ci­pa­le­ment utilisée dans la com­mu­ni­ca­tion par email pour les pro­to­coles SMTP, IMAP et POP. HTTP dispose de son propre procédé (spécifié dans la RFC 2817), qui est très similaire à StartTLS. De nos jours, l’uti­li­sa­tion de HTTPS (RFC 2818) est toutefois plus courante. Outre les pro­to­coles de mes­sa­ge­rie élec­tro­nique men­tion­nés, StartTLS peut initier le processus de chif­fre­ment avec les pro­to­coles suivants :

Chez les four­nis­seurs d’accès Internet, StartTLS est désormais de loin le procédé de chif­fre­ment d’emails le plus populaire. En effet, il permet d’utiliser de nombreux domaines et cer­ti­fi­cats dif­fé­rents sur un seul serveur. Toutefois, StartTLS présente certaines failles de sécurité. Par exemple, des in­for­ma­tions sensibles comme l’adresse IP sont ini­tia­le­ment trans­mises sans être chiffrées, ce qui ouvre la porte à des attaques de l’homme du milieu. Un attaquant peut ainsi bloquer la commande STARTTLS, forçant la connexion à rester non chiffrée, sans que ni l’uti­li­sa­teur ni le four­nis­seur ne s’en aperçoive.

Avantages et in­con­vé­nients de StartTLS

StartTLS présente des in­con­vé­nients du point de vue des logiciels de sécurité. Les pare-feux doivent analyser le procédé au niveau de l’ap­pli­ca­tion pour faire la dif­fé­rence entre les données chiffrées et non chiffrées. Il en va à peu près de même pour les proxys, qui tra­vail­lent de pré­fé­rence avec des ports séparés, alors qu’avec StartTLS, les ports ne sont pas modifiés. Cela rend la mise en cache difficile, voire im­pos­sible.

En matière de pro­tec­tion des données, StartTLS est loin d’être parfait. La plupart des pro­grammes d’email utilisent l’option « TLS si possible », ce qui fait que l’uti­li­sa­teur ne sait pas si la liaison avec le serveur email est chiffrée ou non. Il existe également une aug­men­ta­tion du risque d’attaques de l’homme du milieu, car un opérateur réseau mal­veil­lant peut tout sim­ple­ment filtrer l’extension StartTLS. Il peut alors in­ter­cep­ter les échanges de données. En effet, si la commande STARTTLS n’est pas exécutée, les données sont trans­mises en clair, sans que l’uti­li­sa­teur ne s’en aperçoive gé­né­ra­le­ment.

C’est pourquoi il est né­ces­saire de procéder à un test préalable soigneux afin de s’assurer que le serveur gère bien StartTLS. Ce n’est qu’à partir de là qu’on pourra utiliser le procédé par défaut. Si la com­mu­ni­ca­tion chiffrée échoue, c’est le signe d’un problème extérieur.

Comment tester StartTLS ?

Les pro­to­coles TLS utilisent dif­fé­rents ports selon les four­nis­seurs. Étant donné que StartTLS s’intègre très sim­ple­ment dans la com­mu­ni­ca­tion, rendant un chan­ge­ment de port inutile, on peut tester la procédure de chif­fre­ment à partir d’une console adéquate. Cela permet de dé­ter­mi­ner les ports utilisés par chaque four­nis­seur pour StartTLS. La commande suivante permet de contrôler (par exemple dans NetCat) si un serveur email accepte le protocole StartTLS comme méthode de chif­fre­ment en fonc­tion­ne­ment normal :

$ nc smtp.ionos.fr 587
220 mail.exemple.fr (mreue011) Nemesis ESMTP Service ready
ehlo test.local
250-mail.exemple.fr Hello test.local [80.187.86.70]
250-8BITMIME
250-SIZE 141557760
250 STARTTLS
STARTTLS
220 OK
bash

On devrait trouver ici la commande STARTTLS pour activer le chif­fre­ment. On peut aussi voir que les données per­son­nelles, comme l’adresse IP, sont trans­mises en clair sans chif­fre­ment.

Avec OpenSSL, la commande se présente comme suit :

$ openssl s_client -starttls smtp -connect smtp.ionos.fr :587
CONNECTED(00000005)
[…]
SSL handshake has read 4650 bytes and written 1659 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 3072 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
250 STARTTLS
bash

Avec SMTP, en revanche, l’au­then­ti­fi­ca­tion n’est pas aussi facile. Elle est rendue possible le plus souvent par la procédure AUTH PLAIN, qui réclame un codage des données d’accès en Base64. Cela consiste en la gé­né­ra­tion avec la commande en langage PERL '$ perl -MMIME::Base64 -e 'print encode_base64("\000user-ju\000secret")' d’un code qui est ensuite transmis au serveur SMTP (AUTH PLAIN [Code]). Si le serveur répond ensuite par Authentication succeeded (code inclus), le test pour StartTLS est réussi. Une fois l’au­then­ti­fi­ca­tion validée, les autres commandes SMTP peuvent être exécutées nor­ma­le­ment.

Conseil

Pour tester StartTLS avec des serveurs ou des pro­to­coles qui ne sont pas com­pa­tibles avec OpenSSL, vous pouvez aussi avoir recours à l’outil gnuts-cli du paquet gnuts-bin.

Aller au menu principal