Plus tôt dans la journée, Lone Learner a demandé Pourquoi n'y a-t-il pas d'erreur de certificat lors de la visite de google.net alors qu'il présente un certificat délivré à google.com?
Le réponse acceptée explique que le problème est dû à un trou SNI .
Vous êtes tombé dans un "trou SNI". Google présentera un certificat différent si aucune "indication de nom de serveur" n'est donnée dans la partie de négociation TLS du client.
- StackzOfZtuff
Le résultat de recherche supérieur pour "Qu'est-ce qu'un trou SNI" est la page de question pour Quelles sont les implications sur la sécurité de l'activation d'un trou SNI sur un serveur Web ?, ce qui n'est pas très utile pour ceux qui ne connaissent pas le terme.
Qu'est-ce qu'un trou SNI exactement?
SNI ( Server Name Indication ) est une extension TLS (Transport Layer Security) dans laquelle le client présente au serveur le nom de domaine de la cible à laquelle il souhaite accéder dans le protocole TLS. Il est utilisé dans les cas où il existe plusieurs serveurs virtuels avec des certificats différents sur la même adresse IP, afin que le serveur puisse présenter le bon certificat.
Dans la mesure où il est similaire à l'en-tête de l'hôte HTTP dans la demande HTTP, qui est utilisé pour sélectionner la configuration d'hôte virtuel correspondant - seul l'en-tête de l'hôte ne peut pas être utilisé pour sélectionner le certificat car il est envoyé à l'intérieur la requête HTTP. (c'est-à-dire une fois la prise de contact TLS terminée).
L'extension SNI TLS étant facultative, certains clients peuvent ne pas envoyer cette extension. C'est le cas avec openssl s_client
sans le -servername
argument, mais aussi avec de nombreuses bibliothèques TLS dans différents langages de programmation. Et tandis que tous les navigateurs modernes utilisent SNI, les navigateurs plus anciens comme IE8 sur XP ne l'utilisent pas.
Si un tel client se connecte à un serveur qui a plusieurs certificats, le serveur ne sait pas de quel certificat le client a réellement besoin, c'est-à-dire que le client tombe dans le "trou SNI" en n'utilisant pas l'extension SNI. Dans ce cas, le serveur renvoie généralement une erreur (ou parfois ferme simplement la connexion) ou utilise un certificat par défaut configuré explicitement ou implicitement à cet effet.
Un trou SNI est lorsque vous avez un site par défaut configuré pour une adresse IP qui ne nécessite pas la présence de SNI pour établir une connexion HTTPS.
C'est, en fait, comment toutes les connexions HTTPS fonctionnaient, avant l'existence de SNI. Chaque site HTTPS nécessitait une adresse IP routable, pas seulement un nom d'hôte. Ainsi, lors de la configuration de cette manière, toute demande de port 443 vers cette adresse IP sera résolue vers ce site, même si vous avez de nombreux sites HTTP (port 80) utilisant des noms d'hôte virtuels. Il s'agissait d'un problème permanent pour les personnes qui réutilisaient des serveurs Web pour un certain nombre de sites, puis ont décidé de configurer SSL/HTTPS pour un. Si vous exécutez http://example.com
et http://contoso.com
sur le même serveur, puis configurez HTTPS pour example.com, les résultats pour http://contoso.com
fonctionnera toujours correctement, mais les demandes de https://contoso.com
renverra les résultats de https://example.com
, mais avec une erreur de certificat.
Ce que vous voyez ici est effectivement la même chose. Si vous n'envoyez pas l'extension SNI indiquant aux serveurs de Google le nom d'hôte auquel vous essayez de vous connecter, la valeur par défaut pour les adresses IP du serveur Web Google est le google.com
site, donc quel que soit le nom d'hôte auquel vous essayez de vous connecter, ce sera google.com
qui répondra.
Vous avez contacté un serveur SNI qui possède en réalité plusieurs domaines SSL avec un client non SNI. Le serveur s'est trompé.
Même histoire de base lorsque vous contactez un serveur HTTP/1.1 avec un client HTTP/1.0. Le serveur devine.