Server Name Indication (SNI)
Server Name Indication is een uitbreiding van SSL en TLS die aan het begin van het handshaking proces aangeeft met welke hostname de client verbinding zoekt. Dit maakt het mogelijk voor de server om meerdere certificaten te presenteren, en daardoor aan één IP-adres en poort (poort 443) verschillende websites met SSL beveiliging te verbinden. Door gebruik van SNI vervalt de noodzaak voor het gebruik van aparte IP-adressen voor iedere website met SSL beveiliging op een webserver.
Achtergrond van het probleem
Bij het maken van een SSL / TLS-verbinding vraagt de client een digitaal certificaat van de server. Zodra de server het certificaat verzendt, vergelijkt de client de naam waarmee het probeerde te verbinden met de naam opgenomen in het certificaat. Als er een overeenkomst wordt gevonden verloopt de verbinding normaal. Als er geen overeenkomst wordt gevonden kan de gebruiker worden gewaarschuwd voor de discrepantie en de verbinding verbroken worden. De mismatch kan namelijk wijzen op een poging tot een man-in-the-middle-aanval.
Met Name-based virtual hosting kunnen meerdere DNS-hostnames worden gehost door een server (meestal een webserver) op hetzelfde IP-adres. Hiervoor gebruikt de server een hostname verkregen van de client als onderdeel van het protocol (voor HTTP is de naam opgenomen in de host-header). Echter bij het gebruik van HTTPS vindt de SSL / TLS-handshake plaats voordat de server HTTP-headers ziet. Daarom is het niet mogelijk voor de server om de informatie van de HTTP-host-header te gebruiken om te beslissen welk certificaat te tonen. Domeinnamen met hetzelfde IP-adres moeten daardoor gebruik maken van hetzelfde certificaat.
Server Name Indication (SNI), een uitbreiding van TLS, pakt dit probleem aan door het sturen van de naam van het virtuele domein als onderdeel van de TLS-onderhandelingen. Hierdoor kan de server het juiste virtuele domein selecteren en het juiste certificaat aan de browser presenteren. Daarom kan met de clients en servers die ondersteuning bieden voor SNI een enkel IP-adres, met verschillende certificaten, worden gebruikt voor verschillende domeinnamen.
Ondersteuning
Om SNI te gebruiken moet de SSL / TLS library die gebruikt wordt door een applicatie SNI ondersteunen en moet de applicatie de hostname doorgeven aan de SSL / TLS-bibliotheek. Een nadeel is dat de SSL / TLS library kan worden verzonden als onderdeel van de aanvraag en als onderdeel van het besturingssysteem. Hierdoor ondersteunen sommige browsers SNI op alle operating systems en andere alleen op specifieke operating systems. Vanaf 2011 hebben de meeste webbrowsers en SSL-libraries ondersteuning voor SNI geïmplementeerd, maar er zijn nog steeds een groot aantal gebruikers die een combinatie van browser en besturingssysteem hebben die het niet ondersteunt.
De volgende combinaties bieden geen ondersteuning voor SNI:
Client Side
- Internet Explorer (elke versie) op Windows XP
- Safari op Windows XP
- BlackBerry Browser
- Windows Mobile tot en met 6.5
- Android standaard browser op Android 2.x
Server Side
- IBM HTTP Server
De volgende combinaties bieden wel ondersteuning voor SNI:
Client Side
- Internet Explorer 7 of later, op Windows Vista of hoger. Werkt niet onder Windows XP, ook niet in Internet Explorer 8.
- Mozilla Firefox 2.0 of later
- Opera 8.0 of later (het TLS 1.1 protocol moet ingeschakeld worden)
- Opera Mobile ten minste versie 10.1 bèta op Android
- Google Chrome (Vista of later. XP op Chrome 6 of nieuwer)
- OS X 10.5.7 of hoger op Chrome 5.0.342.1 of nieuwer)
- Safari 2.1 of later (Mac OS X 10.5.6 of hoger en Windows Vista of hoger)
- Konqueror/KDE 4.7 of later
- MobileSafari in Apple iOS 4.0 of later
- Android default browser op Honeycomb of nieuwer
- Windows Phone 7
- MicroB op Maemo
Server Side
- Apache 2.2.12 of later door het gebruik van mod_ssl
- F5 Networks Local Traffic Manager met version 11.1 of later
- LiteSpeed 4.1 of later
- Pound 2.6 of later
- Apache Tomcat op Java 7 of later
- Microsoft Internet Information Server IIS 8
- PageKite tunneling reverse proxy
Om gebruik van SNI te maken, moet uw browser TLS 1.0 ondersteunen en zorgen dat deze actief is. Volg de volgende stappen om TLS 1.0 te activeren in uw browser:
FireFox: Tools→ Options→ Advanced→ Encryption→ Use TLS 1.0
Internet Explorer: Tools→ Internet Options→ Advanced→ Use TLS 1.0
Safari: Safari→ Preferences→ Security icon→ Enable Plug-ins, Enable Java, Enable JavaScript