Qu'est-ce que SNI ? Fonctionnement du Server Name Indication TLS

SNI, ou Server Name Indication, est un ajout au protocole de chiffrement TLS qui permet à un périphérique client de préciser le nom de domaine qu'il essaie d'atteindre dans la première étape de la mise en liaison TLS, évitant ainsi les erreurs de non-concordance de noms communs.

Share facebook icon linkedin icon twitter icon email icon

SNI

Objectifs d’apprentissage

Après avoir lu cet article, vous pourrez :

  • Expliquer ce qu'est un nom d'hôte virtuel
  • Comprendre pourquoi un serveur peut fournir le mauvais certificat SSL
  • Découvrez comment SNI résout ce problème

Qu'est-ce que SNI (Server Name Indication) ?

SNI, c'est un peu comme envoyer un colis à un immeuble plutôt qu'à une maison. Lorsque vous envoyez quelque chose à la maison de quelqu'un, l'adresse de rue suffit à elle seule pour acheminer le colis à la bonne personne. Mais quand un colis va dans un immeuble, il a besoin du numéro d'appartement en plus de l'adresse de la rue ; sinon, le colis pourrait ne pas aller à la bonne personne ou ne pas être livré du tout.

De

nombreux serveurs Web sont plus des immeubles d'appartements que des maisons : ils hébergent plusieurs noms de domaine, et donc l'adresse IP seule ne suffit pas pour indiquer le domaine qu'un utilisateur essaie d'atteindre. Cela peut conduire le serveur à indiquer le mauvais certificat SSL, ce qui empêche ou met fin à une connexion HTTPS ; tout comme un colis ne peut pas être livré à une adresse sans la signature de la bonne personne.

Lorsque plusieurs sites Web sont hébergés sur un serveur et partagent une seule adresse IP, et que chaque site Web a son propre certificat SSL, le serveur peut ne pas savoir quel certificat SSL afficher lorsqu'un périphérique client essaie de se connecter en toute sécurité à l'un des sites Web. Cela est dû au fait que la mise en liaison SSL / TLS se produit avant que le périphérique client n'indique via HTTP à quel site Web il se connecte.

Le Server Name Indication (SNI) est conçue pour résoudre ce problème. Le SNI est une extension du protocole TLS (anciennement connu sous le nom de protocole SSL) qui est utilisé dans HTTPS. Il est inclus dans le processus de mise en liaison TLS / SSL afin de s'assurer que les périphériques client sont en mesure de voir le certificat SSL correct du site Web qu'ils tentent d'atteindre. L'extension permet de préciser le nom d'hôte, ou nom de domaine du site Web lors de la mise en liaison TLS plutôt qu'au moment de l'ouverture de la connexion HTTP après la mise en liaison.

Plus simplement, SNI permet à un périphérique utilisateur d'ouvrir une connexion sécurisée avec https://www.example.com même si ce site Web est hébergé au même endroit (même adresse IP) que https: //www.something .com, https://www.another-website.com et https://www.example.io.

SNI empêche ce qui est connu comme une « erreur de non-concordance de nom commun » : lorsqu'un périphérique client (utilisateur) atteint la bonne adresse IP d'un site Web, mais que le nom sur le certificat SSL ne correspond pas au nom du site Web. Ce type d'erreur entraîne souvent un message d'erreur « Votre connexion n'est pas privée » dans le navigateur de l'utilisateur.

SNI a été ajouté en tant qu'extension à TLS / SSL en 2003 ; il ne faisait pas partie à l'origine du protocole. Presque tous les navigateurs, systèmes d'exploitation et serveurs Web le prennent en charge, à l'exception de certains des navigateurs et systèmes d'exploitation les plus anciens qui sont encore utilisés.

Qu'est-ce qu'un nom de serveur ?

Bien que SNI signifie Server Name Indication, ce que le SNI « indique » réellement est le nom d'hôte ou le nom de domaine d'un site Web, qui peut être distinct du nom du serveur Web qui héberge réellement le domaine. En fait, plusieurs domaines sont fréquemment hébergés sur un même serveur, auquel cas ils sont appelés noms d'hôte virtuels.

Un nom de serveur est simplement le nom d'un ordinateur. Pour les serveurs Web, ce nom n'est généralement pas visible pour les utilisateurs finaux, à moins que le serveur n'héberge qu'un seul domaine et que le nom du serveur soit équivalent au nom de domaine.

Que fait l'extension TLS SNI ?

Parfois, un serveur Web est responsable de plusieurs noms d'hôte ou noms de domaine (qui sont les noms de sites Web que les gens peuvent lire). Chaque nom d'hôte aura son propre certificat SSL si les sites Web utilisent HTTPS.

Le problème est que tous ces noms d'hôtes sur un serveur sont à la même adresse IP. Ce n'est pas un problème sur HTTP, car dès qu'une connexion TCP est ouverte, le client indiquera le site Web qu'il essaie d'atteindre dans une demande HTTP.

Mais dans HTTPS, une mise en liaison TLS a lieu en premier, avant que la conversation HTTP puisse commencer (HTTPS utilise toujours HTTP ; il crypte simplement les messages HTTP). Sans SNI, il n'y a donc aucun moyen pour le client d'indiquer au serveur à quel nom d'hôte il s'adresse. Par conséquent, le serveur peut produire le certificat SSL pour le mauvais nom d'hôte. Si le nom sur le certificat SSL ne correspond pas au nom que le client tente d'atteindre, le navigateur client renvoie une erreur et met généralement fin à la connexion.

SNI ajoute le nom de domaine au processus de mise en liaison TLS, afin que le processus TLS atteigne le bon nom de domaine et reçoive le certificat SSL correct, permettant au reste de la mise en liaison TLS de se dérouler normalement.

Plus précisément, SNI inclut le nom d'hôte dans le message Bonjour du client, ou la toute première étape d'une mise en liaison TLS.

Qu'est-ce qu'un nom d'hôte ? Qu'est-ce qu'un nom d'hôte virtuel ?

Un nom d'hôte est le nom d'un périphérique qui se connecte à un réseau. Dans le contexte d'Internet, un nom de domaine, ou le nom d'un site Web, est une sorte de nom d'hôte. Les deux sont distincts de l'adresse IP associée au nom de domaine.

Un nom d'hôte virtuel est un nom d'hôte qui n'a pas sa propre adresse IP et est hébergé sur un serveur avec d'autres noms d'hôte. Il est « virtuel » en ce qu'il n'a pas de serveur physique dédié, tout comme la réalité virtuelle n'existe que sur le plan numérique, pas dans le monde physique.

Que se passe-t-il si le navigateur d'un utilisateur ne prend pas en charge SNI ?

Dans ce cas rare, l'utilisateur sera probablement incapable d'accéder à certains sites Web, et le navigateur de l'utilisateur renverra un message d'erreur du genre « Votre connexion n'est pas privée. »

La grande majorité des navigateurs et des systèmes d'exploitation prennent en charge SNI. Seules les très anciennes versions d'Internet Explorer, les anciennes versions du système d'exploitation BlackBerry et d'autres versions de logiciels obsolètes ne prennent pas en charge SNI.

Pour en savoir plus sur le protocole TLS / SSL, les certificats SSL et le fonctionnement de HTTPS, voir Qu'est-ce qu'un certificat SSL ?