web-dev-qa-db-fra.com

Qu'est-ce qu'un trou SNI?

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?

38
Stevoisiak

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.

37
Steffen Ullrich

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.

11
Xander

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.

1
Joshua