@localhost: Je n'ai pas lu la page Wikipedia, mais ce n'est pas tout a fait ça.
SNI permet de résoudre le problème d'un serveur avec une seule adresse IP hébergeant plusieurs domaines différents (toto.fr, tata.fr, etc. ayant forcément des certificats différents). Typiquement, avec Apache, plusieurs hôtes virtuels basés sur les noms.
Dans ce cas le souci c'est que le serveur ne sait qu'il doit utiliser l'hôte virtuel toto.fr que lorsque une requête vers toto.fr est faite. Or la requête vers toto.fr n'est connue qu
'après avoir établi la connexion TLS (problème du serpent qui se mord la queue). Le serveur Apache établit donc la connexion TLS et sert le premier hôte virtuel par défaut pour l'adresse IP. Il est donc certain que l'un ou l'autre site sera servi avec le mauvais hôte virtuel (et donc le mauvais certificat).
SNI permet au client d'inclure la requête vers toto.fr lors de la « poignée de main » TLS. Apache sait donc immédiatement quel hôte virtuel utiliser et le problème ne se pose plus…
Sauf que tous les clients ne prennent pas en charge SNI (Internet Explorer sur XP, Andoid 2.3, IOS3, par exemple). Si on veut être compatible avec les anciens navigateurs ce n'est donc pas utilisable et il faut alors utiliser une IP différente (ou un port différent) pour chaque hôte virtuel.
Ce que je décrit n'est qu'une transcription approximative : de
https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI