Le SNI, ou Server Name Indication, est une extension du 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 du handshake TLS, évitant ainsi les erreurs de correspondance de nom commun (« Common name mismatch »).
Cet article s'articule autour des points suivants :
Contenu associé
Le SSL, qu’est-ce que c’est ?
négociation SSL
Types de certificats SSL
Cryptographie à clé publique
Qu'est-ce qu'une clé de session ?
Abonnez-vous à theNET, le récapitulatif mensuel de Cloudflare des idées les plus populaires concernant Internet !
Copier le lien de l'article
Le SNI, revient un peu à envoyer un colis à un immeuble plutôt qu'à une maison. Lorsque vous envoyez un colis à la maison d'un particulier, l'adresse et le numéro dans la rue suffit pour acheminer le colis à la bonne personne. Mais quand un colis est adressé à un immeuble, il est nécessaire d'indiquer le numéro d'appartement en plus de l'adresse de la rue. Sinon, le colis pourrait ne arriver au bon destinataire ou ne pas être livré du tout.
De nombreux serveurs web ressemblent plus à des immeubles d'appartements qu'à des maisons : ils hébergent plusieurs noms de domaine, l'adresse IP seule ne suffit donc 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 l'impossibilité de livrer un colis à une adresse sans la signature du bon destinataire.
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 le handshake SSL/TLS se produit avant que le périphérique client n'indique via HTTP à quel site web il se connecte.
L'indication du nom du serveur (SNI) est conçu 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 handshake 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 pendant le handshake TLS plutôt qu'au moment de l'ouverture de la connexion HTTP après le handshake.
Plus simplement, le SNI permet à un appareil 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.
Le SNI empêche une erreur connue sous le nom de « common name mismatch » ou « erreur de non-concordance de nom commun » : lorsqu'un l'appareil client (l'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.
Le SNI a été ajouté en tant qu'extension au 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.
Bien que SNI corresponde à Server Name Indication, littéralement indication de nom de domaine du site web, ce que 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.
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 internautes 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 indique le site Web qu'il essaie d'atteindre dans une requête HTTP.
Mais en HTTPS, un handshake TLS a lieu en premier, avant que la conversation HTTP puisse commencer (HTTPS utilise toujours HTTP, il chiffre 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 handshake TLS, afin que le processus TLS atteigne le bon nom de domaine et reçoive le certificat SSL correct, permettant au reste du handshake TLS de se dérouler normalement.
Plus précisément, le SNI inclut le nom d'hôte dans le message Hello du client, ou la toute première étape d'un handshake TLS.
Un nom d'hôte est le nom d'un appareil qui se connecte à un réseau. Dans le contexte d'Internet, un nom de domaine, ou 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 qui 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.
SNI chiffré (ESNI) complète l'extension SNI en chiffrant la partie SNI du Client Hello.Cela empêche toute personne fouinant entre le client et le serveur de voir quel certificat le client demande, ce qui protège et sécurise davantage le client.Cloudflare et Mozilla Firefox ont lancé la prise en charge de l'ESNI en 2018.
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 , le certificat SSL et le fonctionnement de HTTPS, voir Qu'est-ce qu'un certificat SSL ? ou obtenir un certificat SSL gratuit auprès de Cloudflare.