Qu'est-ce que le SNI ?
Les hôtes virtuels permettent à plusieurs noms de domaine de partager une seule adresse IP, ce qui contribue à pallier la pénurie d'adresses IPv4. Un serveur achemine les requêtes vers différents noms de domaine (hôtes virtuels) en fonction du champ host présent dans la requête du client.
Cette approche pose problème pour les serveurs HTTPS qui hébergent plusieurs noms de domaine sur une unique adresse IP. Avant la fin de la négociation TLS, le serveur ignore le nom de domaine demandé par le client et ne peut pas présenter le certificat approprié pour l'hôte virtuel cible.
Le Server Name Indication (SNI) résout ce problème en exigeant que le client indique le nom de domaine cible durant la négociation TLS. Le serveur sélectionne alors le certificat adéquat pour finaliser la négociation et établir une connexion TLS.
Proposé pour la première fois en 2004, le SNI est pris en charge par la plupart des navigateurs, serveurs et outils de test modernes.
Pourquoi Anti-DDoS Proxy et Web Application Firewall exigent-ils la prise en charge du SNI par les clients ?
Anti-DDoS Proxy et Web Application Firewall (WAF) agissent comme des proxys inverses pour les services HTTPS. Vous devez importer un certificat et sa clé privée lors de la configuration de la protection HTTPS. Étant donné que le nombre d'adresses IP d'Anti-DDoS Proxy et de serveurs WAF est limité, les clusters de services hébergent plusieurs noms de domaine sur les mêmes serveurs. Par conséquent, les clients doivent prendre en charge le SNI pour interagir correctement avec Anti-DDoS Proxy et WAF.
Si un navigateur incompatible avec le SNI accède à un site web protégé par Anti-DDoS Proxy ou WAF, le service ne peut pas identifier le nom de domaine demandé. Il utilise alors un certificat par défaut intégré, ce qui entraîne l'affichage d'un avertissement « server certificate not trusted » dans le navigateur.
Même si le serveur réel ne possède qu'un seul nom de domaine et ne partage pas son adresse IP, le client doit toujours prendre en charge le SNI, car Anti-DDoS Proxy ou WAF agit en tant que proxy inverse. Le client doit d'abord établir une connexion avec Anti-DDoS Proxy ou WAF.
Solutions
Server-side
Configurez votre serveur pour qu'il prenne en charge le SNI.
Client-side
Si vos clients ne prennent pas en charge le SNI, appliquez l'une des solutions suivantes :
Invitez les utilisateurs à adopter un navigateur moderne, tel que Google Chrome ou Firefox.
-
Ne configurez pas la protection de site web de couche 7 dans le service Anti-DDoS Proxy. Optez plutôt pour une protection de site web via la redirection de port de couche 4.
RemarqueLa protection des ports de couche 4 ne protège pas contre les attaques CC.
SNI compatibility
Le SNI est compatible avec TLS 1.1 et versions ultérieures, mais il ne l'est pas avec le protocole SSL.
-
Navigateurs de bureau pris en charge :
Chrome 5 et versions ultérieures
Chrome 6 et versions ultérieures
Firefox 2 et versions ultérieures
Internet Explorer 7 et versions ultérieures (uniquement sur Windows Vista, Windows Server 2008 et systèmes d'exploitation ultérieurs. Aucune version d'Internet Explorer sous Windows XP ne prend en charge le SNI.)
Konqueror 4.7 et versions ultérieures
Opera 8 et versions ultérieures
Safari 3.0 et versions ultérieures (uniquement sur Windows Vista, Windows Server 2008 et versions ultérieures, ou sur Mac OS X 10.5.6 et versions ultérieures.)
-
Navigateurs mobiles pris en charge :
Android 3.0 Honeycomb et versions ultérieures
iOS 4 et versions ultérieures
Windows Phone 7 et versions ultérieures
-
Serveurs pris en charge :
Apache 2.2.12 et versions ultérieures
Apache Traffic Server 3.2.0 et versions ultérieures
Cherokee
HAProxy 1.5 et versions ultérieures
IIS 8.0 et versions ultérieures
Lighttpd 1.4.24 et versions ultérieures
LiteSpeed 4.1 et versions ultérieures
Nginx 0.5.32 et versions ultérieures
-
Outils en ligne de commande pris en charge :
cURL 7.18.1 et versions ultérieures
wget 1.14 et versions ultérieures
-
Bibliothèques prises en charge :
GNU TLS
JSSE (Oracle Java) 7 et versions ultérieures (en tant que client uniquement)
libcurl 7.18.1 et versions ultérieures
NSS 3.1.1 et versions ultérieures
OpenSSL 0.9.8j et versions ultérieures
OpenSSL 0.9.8f et versions ultérieures (nécessite une configuration via des indicateurs)
Qt 4.8 et versions ultérieures