Server Name Indication (SNI) ist eine Erweiterung des TLS-Handshakes, mit der ein Client den vollqualifizierten Hostnamen, zu dem er sich verbinden möchte, schon zu Beginn des Handshakes mitteilt. Damit kann ein Server auf derselben IP-Adresse mehrere virtuelle Hosts mit unterschiedlichen Zertifikaten ausliefern und das jeweils passende Zertifikat präsentieren.
In der Praxis ist SNI Voraussetzung für nahezu jeden modernen TLS-Reverse-Proxy oder Load Balancer wie Nginx, HAProxy, Envoy oder Cloud-Dienste wie Azure Front Door und AWS Application Load Balancer. Ohne SNI müsste pro TLS-Endpunkt eine eigene IP-Adresse genutzt werden, was angesichts knapper IPv4-Adressen wirtschaftlich unattraktiv wäre.
Einsatzzweck ist die effiziente Mehrfachnutzung von IP- und Port-Ressourcen für TLS-Hosting. SNI hat das massive Wachstum von HTTPS überhaupt erst praktikabel gemacht, da Provider Millionen von Domains auf wenige IP-Adressen konsolidieren können.
SNI wurde in RFC 4366 (2006) eingeführt und in RFC 6066 (2011) konsolidiert. Es war zunächst als ein optionales Feature gedacht, hat sich aber innerhalb weniger Jahre zur Defacto-Voraussetzung für moderne Webhosting-Plattformen entwickelt.
SNI bleibt im klassischen TLS unverschlüsselt, was zu Datenschutzbedenken führte. Mit Encrypted Client Hello (ECH, früher ESNI), spezifiziert in einem IETF-Entwurf, wird SNI verschlüsselt – Browser wie Firefox und Chrome implementieren ECH bereits, Cloudflare und einige Hostingdienste unterstützen es serverseitig. Damit wird der bisher offen sichtbare Hostname endgültig privat.