StartTLS

La commande StartTLS (également connue sous le nom de STARTSSL, StartSSL ou TLS opportuniste) est une extension du protocole TLS permettant le cryptage d’informations grâce à au protocole Transport Layer Security. StartTLS en tant qu’extension du protocole est utilisé principalement pour la communication par email avec les protocoles SMTP, IMAP et POP. HTTP met en œuvre sa propre procédure (définie dans la RFC 2871), qui toutefois ressemble beaucoup à StartTLS. De nos jours, HTTPS (RFC 2818) est devenu le protocole le plus courant. En dehors des protocoles d’email ci-dessus, StartTLS peut également au moins lancer le cryptage avec les protocoles suivants :

  • LDAP (RFC 4511)
  • FTP (RFC 4217)
  • XMPP (RFC 6120)
  • NNTP (RFC 4642)

Chez les fournisseurs d’accès, StartTLS est devenu, et de loin, le procédé de cryptage des emails favori, pour la raison qu’il est compatible avec de nombreux domaines et certificats différents dans un même serveur. Il n’est pourtant pas irréprochable, car il transmet sous une forme d’abord non cryptée des données personnelles, comme l’adresse IP, et les attaques de l’homme du milieu (HDM) restent possibles étant donné que StartTLS peut être écrasé sans que le fournisseur ne le remarque.

Comment fonctionne StartTLS ?

En tant que commande supplémentaire pour SSL/TLS, StartTLS a le grand avantage que le cryptage ne fait pas obstacle à la communication avec les clients qui ne supportent pas la méthode. Avec StartTLS, on a par conséquent beaucoup moins de problèmes de compatibilité. Si toutefois un serveur refuse TLS, un programme d’email (client) doit savoir quoi faire des données. Autre avantage, la gestion du cryptage se fait des deux côtés, grâce à quoi, en cas de défaut de communication, des processus automatisés rendent inutile l’intervention de l’administrateur ou de l’utilisateur.

Avec StartTLS, une connexion commence toujours sans cryptage, et ce au port prévu pour le texte non crypté. Ce n’est qu’après l’exécution de la commande StartTLS que le protocole négocie le cryptage avec le client, et ce sans avoir à établir de nouvelle connexion. Grâce à StartTLS, en cas de défaut dans la communication, il n’y a pas besoin de contacter le port : le client peut se contenter de recourir à la procédure StartTLS fournie par le serveur.

StartTLS présente des inconvénients du point de vue des logiciels de sécurité. Les pare-feu doivent analyser le procédé au niveau de l’application pour faire la différence entre les données cryptées, et non cryptées. Il en va à peu près de même pour les serveurs relais, qui travaillent de préférence avec des ports séparés, alors qu’avec StartTLS, on ne change pas de port. Cela rend le stockage en mode cache difficile, voire impossible.

En matière de protection des données, StartTLS est loin d’être parfait. La plupart des programmes d’email utilisent l’option « TLS si possible », ce qui fait que l’utilisateur ne sait pas si la liaison avec le serveur mail est cryptée ou non. On note également une augmentation du risque d’attaque de l’homme du milieu lorsque l’exploitant du réseau élimine tout simplement par filtrage l’extension TLS, ce qui lui permet de participer au protocole d’échange des données. En effet, si la commande StartTLS n’est pas exécutée, les données sont transmises sans être cryptées, et sans non plus, le plus souvent, que l’utilisateur ne l’apprenne.

Conseil

Consultez notre article sur les les attaques de l’homme du milieu pour découvrir le fonctionnement de cette méthode d’espionnage.

C’est pourquoi il y a lieu 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 communication cryptée échoue, c’est le signe d’un problème extérieur.

Exemple : email

Il s’agit de crypter un email par la procédure TLS. On choisit le protocole StartTLS pour pouvoir intégrer la méthode de cryptage sans difficulté dans le fonctionnement normal. L’option correspondante se trouve normalement dans la configuration du compte, ou dans les réglages de compte de votre client email. Après l’envoi de l’email, la communication commence :

  1. Le client demande au serveur email, par « 250-STARTTLS », s’il accepte la méthode de cryptage.
  2. Si le retour est positif (« go ahead »), la connexion cryptée est mise en place.
  3. Le client relance la connexion. À partir de là, la connexion pour l’email se fait sous forme cryptée.

Comment tester StartTLS ?

Les protocoles TLS utilisent différents ports selon les fournisseurs. Étant donné que StartTLS s’intègre très simplement dans la communication, rendant un changement de port inutile, on peut tester la procédure de cryptage à partir d’une console adéquate. On voit ainsi quel port chaque fournisseur utilise pour StartTLS. La commande suivante permet de contrôler (p. ex. dans NetCat) si un serveur email accepte StartTLS comme méthode de cryptage en fonctionnement normal :

$ nc smtp.test.server smtp
220 Mailserver ESMTP Exim 4.69 Wed, 18 Jul 2018 12:19:15 +0200
ehlo test
250-Mailserver Hello ionos [10.1.2.73]
250-SIZE 78643200
250-PIPELINING
250-STARTTLS
220-go ahead
250 HELP
Quit
221 Mailserver closing connection

On devrait trouver ici la commande « STARTTLS » pour activer le cryptage. On peut aussi voir que les données personnelles, comme l’adresse IP, sont transmises non cryptées.

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

$ openssl s_client -host mail.test.server-port 25 -starttls smtp
CONNECTED(00000003)
[...]
250 HELP
ehlo test
250-Mailserver Hello ionos [10.1.2.73]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN
250 HELP

Avec SMTP, en revanche, l’authentification 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ération 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. Cela fait, les autres commandes d’exécution de l’email peuvent s’effectuer.

Conseil

Pour tester StartTLS avec des serveurs ou des protocoles qui ne sont pas compatibles avec OpenSSL, on peut avoir recours à l’outil gnuts-cli du paquet gnuts-bin.