Server Name Indication (SNI) is een TLS-protocolextensie waarmee een client de doelhostnaam als onderdeel van het ClientHello-bericht aan het begin van de TLS-handshake kan versturen, voordat de server zijn certificaat verzendt. Dit lost het probleem van naamgebaseerde virtuele hosting voor HTTPS op — meerdere domeinen met verschillende certificaten kunnen nu één IP-adres delen.
Zonder SNI kon een server niet weten welk certificaat moet worden gepresenteerd totdat het de TLS-handshake-aanvraag had gelezen; met SNI is de hostnaam vooraf in duidelijke tekst zichtbaar, zodat de server het juiste SSL-certificaat voor dat domein selecteert en retourneert. Dit werd kritiek toen HTTPS-adoptie op schaal plaatsvond en IPv4-adressen schaars werden.
Voorbeeld: Één server-IP host zowel example.com als example.org. Wanneer een client verbinding maakt met example.org, voegt het server_name = example.org in de ClientHello in. De server leest dit en reageert met het certificaat voor example.org in plaats van een standaard of niet-overeenkomstig certificaat.
WarningSNI wordt in duidelijke tekst in de ClientHello verzonden — de hostnaam is zichtbaar voor netwerkobservers, firewalls en ISP's, ook al is de rest van de sessie versleuteld. Dit maakt hostname-gebaseerde censuur mogelijk ondanks HTTPS. Encrypted Client Hello (ECH), een voorgestelde TLS-extensie, is bedoeld om SNI in de toekomst te versleutelen, maar de adoptie is nog steeds opkomend.
Verouderde TLS-clients (Windows XP, Android <2.3, oud Java) ondersteunen SNI niet en zullen certificaatvalidatie op gedeelde-IP multi-domain hosting mislukken. Moderne clients, browsers en systemen ondersteunen SNI sinds het midden van de jaren 2000. SNI is gedefinieerd in RFC 6066 en ongewijzigd overgedragen naar TLS 1.3.