Server Name Indication (SNI) est une extension du protocole TLS qui permet à un client d'envoyer le nom d'hôte cible dans le message ClientHello au début de la poignée de main TLS, avant que le serveur n'envoie son certificat. Cela résout le problème de l'hébergement virtuel basé sur les noms pour HTTPS — plusieurs domaines avec des certificats différents peuvent désormais partager une seule adresse IP.
Sans SNI, un serveur ne pouvait pas savoir quel certificat présenter jusqu'après la lecture de la demande de poignée de main TLS ; avec SNI, le nom d'hôte est visible d'emblée en texte clair, le serveur sélectionne donc et retourne le certificat SSL correct pour ce domaine. Cela est devenu critique à mesure que l'adoption du HTTPS s'est généralisée et que les adresses IPv4 se sont raréfiées.
Exemple : Une adresse IP serveur héberge à la fois example.com et example.org. Quand un client se connecte à example.org, il inclut server_name = example.org dans le ClientHello. Le serveur lit ceci et répond avec le certificat pour example.org au lieu d'un certificat par défaut ou non correspondant.
WarningSNI est envoyé en texte clair dans le ClientHello — le nom d'hôte est visible pour les observateurs du réseau, les pare-feu et les FAI même si le reste de la session est chiffré. Cela permet la censure basée sur le nom d'hôte malgré le HTTPS. Encrypted Client Hello (ECH), une extension TLS proposée, vise à chiffrer SNI à l'avenir, mais l'adoption est encore en cours d'émergence.
Les anciens clients TLS (Windows XP, Android <2.3, ancien Java) ne supportent pas SNI et échoueront la validation du certificat sur l'hébergement multi-domaine à IP partagée. Les clients modernes, navigateurs et systèmes supportent SNI depuis le milieu des années 2000. SNI est défini dans RFC 6066 et porté inchangé dans TLS 1.3.