web-dev-qa-db-fra.com

SSL appliqué par la redirection mais comment prendre en charge les navigateurs non-SNI

J'aimerais que mon site Web soit uniquement SSL mais je suis confronté à un problème de non-prise en charge de la certification SSL sur les navigateurs plus anciens tels que IE8. Hôte, ou peut-être même php.

Ma redirection actuelle ressemble à ceci (veuillez noter que le serveur utilise le port 8080 et l'une des raisons pour lesquelles il utilise un request_scheme:

RewriteEngine on
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

Y at-il là seulement pour rediriger les navigateurs SNI utilisant htaccess ou similaire?

6
Simon Hayter

Tout d’abord, SNI est un paramètre de serveur et non de certificat.

Un peu de contexte ici pourrait aider:

Lorsqu'un navigateur se connecte à un site Web https, il convertit le nom du site Web en une adresse IP, puis initie une connexion SSL avec cette adresse IP ( sans l'adresse nom) et vérifie le certificat renvoyé par le serveur. Il envoie ensuite des requêtes Web chiffrées (y compris le nom de l'adresse cette fois-ci) à l'aide de ce certificat.

Le problème est que lorsque de nombreux sites sont hébergés sur la même adresse IP (comme cela arrive de plus en plus parce que nous manquons d'adresses IP IPv4), la connexion SSL initiale ne sait pas à quel site vous souhaitez vous connecter, comme cette connexion initiale a uniquement l'adresse IP et non le nom du site Web, elle renvoie donc le certificat par défaut qui, s'il ne correspond pas au nom du site Web que vous demandez, provoque le renvoi d'une erreur de certificat à l'utilisateur.

SNI (Server Name Indication) est une extension de la demande SSL qui inclut également le nom du serveur dans la connexion initiale. Le certificat approprié peut donc être renvoyé et la connexion SSL établie correctement.

Cependant, les navigateurs plus anciens (et notamment IE8 sur XP en tant que navigateur principal non-SNI toujours utilisé malgré le statut de fin de vie de XP) ne prennent pas en charge SNI.

Quoi qu'il en soit, revenons à votre question. Il semblerait que votre site soit hébergé par le nom de domaine ainsi que par ceux qui fournissent votre certificat. Apparemment, ils ne vous fournissent pas une adresse IP unique et vous devez donc utiliser SNI si vous souhaitez avoir un site https.

Il existe quelques solutions de contournement:

  1. Gandi pourrait fournir un certificat principal contenant votre nom d'hôte et l'utiliser comme certificat par défaut pour cette adresse IP. Ils sont peu susceptibles d’accepter cela et, même s’ils le faisaient, il n’aurait pas l’air très professionnel d’avoir un certificat partagé par plusieurs sociétés différentes et non liées. Sans parler du fait que vous partageriez la clé de certificat avec d'autres personnes. Ce n'est vraiment une option que si vous avez le contrôle total du serveur et que vous hébergez plusieurs sites connexes, tous sous votre contrôle, sur le même serveur.
  2. Vous pourriez simplement ne pas supporter les anciens navigateurs. Vous seul pouvez juger de l’impact d’une telle décision. XP les utilisateurs peuvent toujours utiliser un autre navigateur, mais pas IE8. Mais s’ils réalisent que c’est un argument valable.
  3. Vous pouvez demander à gandi si vous pouvez passer à un compte d’adresse IP dédié s’ils le font. Cela coûtera probablement plus cher que ce que vous payez actuellement.
  4. Vous pouvez déplacer votre site vers une autre société d'hébergement fournissant des adresses IP dédiées. Là encore, cela aura des conséquences en termes de coûts et de temps.
  5. Vous pouvez simplement vous en tenir à http uniquement.
  6. Vous pouvez avoir un site mixte (http et https sur le même site) et ne prendre en charge que https pour certains navigateurs comme vous le souhaitez.

Pour examiner la dernière option plus en détail, la seule façon de procéder consiste à utiliser http par défaut et à rediriger certains utilisateurs vers https en fonction du sniffing du navigateur, comme d'autres l'ont suggéré. Cependant, il y a plusieurs problèmes avec ceci:

  1. Cela ne fonctionnera correctement que si vous attrapez tous les agents de navigateur qui ne prennent pas en charge SNI, ce qui n'est pas une tâche triviale. Sinon, vous pouvez vous concentrer uniquement sur les problèmes principaux qui vous intéressent (par exemple, ne prenez en charge que cette solution de contournement pour XP/IE8).
  2. Cela ne fonctionnera pas en sens inverse - vous ne pouvez pas rediriger un appel https vers http car la négociation SSL est la première chose à faire avant que le contenu (c'est-à-dire le message de redirection) ne soit envoyé. Donc, si un utilisateur non-SNI clique sur un lien https, il obtiendra une erreur.
  3. Les moteurs de recherche pourraient ne pas explorer correctement le site (apparemment, Bing n’a commencé à prendre en charge que récemment et partiellement SNI: Bing et manque de prise en charge de SNI ).
  4. Les sites mixtes sont MAUVAIS pour un certain nombre de raisons: déroutant, difficile à gérer, plus facile à inclure accidentellement dans le contenu mélangé entraînant des alertes du navigateur pour l'utilisateur, exposer les cookies sensibles en texte clair lors de la visualisation de pages http, permettre des attaques MITM pouvant intercepter des demandes pour empêcher leur mise à niveau https, rendre le référencement plus difficile, etc. J'encourage fortement https partout (même en utilisant un en-tête HSTS) plutôt qu'un site mixte.

Bien que ne répondant pas directement à votre question, j'espère que cela vous donnera plus de détails pour vous aider à décider si vous devriez vraiment faire ce que vous demandez de faire.

4
Barry Pollard

C'est en fait une exigence plus courante que vous ne le pensez. Comme IE8 est le dernier navigateur disponible pour les utilisateurs de Windows XP, actuellement, 14,79% des utilisateurs dans le monde utilisent encore IE8, selon NetMarketShare.com .

Vous pouvez configurer une règle .htaccess pour que, si le navigateur Web (conformément à l’en-tête User-Agent, voir Liste des chaînes de l’agent utilisateur IE8 ) soit IE8, même s’ils cliquent sur un lien HTTPS dans moteur de recherche, l'utilisateur est redirigé côté serveur vers une version non SSL de votre site Web avant de charger une page avec un certificat SSL associé.

RewriteEngine on

# If web browser is IE8 then redirect to non-SSL version of website
RewriteCond %{HTTP_USER_AGENT} "MSIE 8.0" [OR]
RewriteCond %{HTTP_USER_AGENT} "OptimizedIE8"
RewriteRule ^(.*)$ http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

# Otherwise, if user trying to access non-SSL version, redirect them to SSL version
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
0
richhallstoke