Forcer la totalité du site https sans rediriger http vers https

14

Il y a eu beaucoup de discussions pendant que je cherchais comment rendre mon site https entier. La plupart des réponses ont consisté à rediriger http vers https (fichier .htaccess), ce qui n'est pas bon, car il n'est pas bon de faire deux fois le même travail (deux requêtes). De plus, "l'homme au milieu" prend d'abord http, et je veux que mon site passe directement sur https. Existe-t-il une autre façon de rendre votre site https entier, et comment le faire? Par exemple, lorsque l'utilisateur tape exemple.com, cet exemple.com passe automatiquement à https, sans rediriger depuis http ou autre chose en premier?

Marko Tamburic
la source
si vous ne voulez pas que les gens soient redirigés vers https, que voulez-vous qu'il se passe à la place?
Michael Hampton
@MichaelHampton Peut-être que je pose une question aux débutants, mais je veux pratiquement "supprimer" http, et cette seule chose qui existe est https. Ou si ce n'est pas possible, je pourrais simplement utiliser la redirection si elle est suffisante pour la sécurité. J'ai entendu dire que la redirection http-> https n'est pas très bonne car c'est toujours http et le trafic peut être intercepté pendant la redirection.
Marko Tamburic
La redirection permanente HTTP 301 est votre ami, n'oubliez pas de définir les expirations.
Marcel
Vous pouvez simplement supprimer http. Mais alors, l'utilisateur reçoit juste un message de refus de connexion, s'il n'entre pas le https: // Pour certains sites, c'est mieux, car la sécurité est plus élevée. S'il existe une version http disponible, il peut arriver que les cookies soient envoyés avec la première demande non cryptée. Pour des choses comme un système de messagerie d'entreprise https uniquement + la formation des utilisateurs est correcte, pour un site général, vous perdrez probablement beaucoup de visiteurs.
Josef dit Réintégrer Monica
Afaik c'est devenu possible avec HTTP2, mais cela n'évitera toujours pas l'attaque de striping ssl (décrite dans les réponses ci-dessous).
peterh

Réponses:

20

Non. Vous ne pouvez pas par magie faire en sorte que le navigateur du visiteur choisisse le bon protocole. Une redirection est le moyen de le faire.

Jenny D
la source
1
Pour développer davantage cette réponse, envisagez d'utiliser la réécriture d'URL et un code d'état 301 comme Mark Henderson le souligne ici: serverfault.com/questions/570288/…
Ryan Ries
22

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security permet à votre serveur d'indiquer que le domaine ne doit être accessible que via HTTPS. Cela ne s'applique qu'aux demandes suivantes, il y aurait donc une charge HTTP initiale, mais les demandes futures chargeraient HTTPS même si quelqu'un a explicitement tapé HTTP.

IE ne le prend pas encore en charge, mais toutes les autres majors le font.

ceejayoz
la source
Il ne protège toujours pas contre la première demande.
Jenny D du
3
@JennyD J'ai déjà dit exactement cela dans ma réponse.
ceejayoz le
@JennyD Qu'entendez-vous par «protéger»? Un MiM ne peut rien faire contre une redirection http -> https, à moins de jouer avec le DNS / routage local et de truquer tout votre domaine. Dans ce cas, peu importe ce que vous faites, car vos serveurs ne sont jamais accessibles.
Alerte rouge le
2
@JennyD Eh bien, HSTS est vraiment une meilleure solution que votre message, qui dit "une redirection est le moyen de le faire". Une redirection peut être MITMed à tout moment. Une redirection avec HSTS ne peut être MITMed qu'une fois par an par utilisateur + navigateur (ou quelle que soit la date d'expiration indiquée dans l'en-tête) - toutes les autres fois, elle n'est pas demandée.
ceejayoz le
1
@MarkoTamburic Aucune raison pour laquelle vous ne pouvez pas combiner les deux.
ceejayoz le
7

Comme d'autres l'ont dit, vous ne pouvez pas forcer les utilisateurs à choisir le bon protocole. Mais lorsque l'utilisateur essaie d'utiliser HTTP, que devez-vous faire? Une redirection est également insuffisante, car un attaquant assis entre vous et le client peut intercepter la redirection, de sorte que le client ne la voit jamais. Le client continuera d'envoyer du HTTP simple et l'attaquant supprimera la couche SSL du serveur ( attaque de suppression SSL ).

Le seul moyen sûr d'empêcher cela est de ne pas servir du tout HTTP . Ne répondez pas sur le port 80, sauf peut-être pour servir une page de texte brut demandant à l'utilisateur de réessayer avec HTTPS (mais sans fournir de lien, que l'attaquant pourrait manipuler). Cela forcera l'utilisateur à taper https://dans son navigateur, donc il initiera la connexion avec SSL et empêchera l'attaque MITM.

Andrew Schulman
la source
3
C'est un compromis, car la plupart des utilisateurs ne vont pas taper https://. Au lieu de cela, ils vont dire "hein, le site est cassé" et partir. Le meilleur scénario pourrait être d'avoir www.example.comrépondu à la fois à HTTP et HTTPS, mais à ce que l'application elle-même s'exécute sur quelque chose comme admin.example.comavec seulement HTTPS.
ceejayoz le
D'accord. En pratique, presque personne ne le fait.
Andrew Schulman
Je ne vois pas vraiment comment cela serait plus à l'épreuve des MiM. Si l'homme au milieu peut modifier votre lien hypertexte pour pointer ailleurs, cela signifie qu'il contrôle les paquets entrants de l'utilisateur. Il peut tout aussi facilement rediriger vers son site, ou ajouter le lien hypertexte qu'il souhaite, quel que soit le site censé ressembler.
Red Alert
Mais pas, en théorie, si le client initie la connexion avec SSL.
Andrew Schulman
3
c'est vrai - mais si le client démarre avec SSL, OP n'a aucun problème. Son problème est quand ils lancent sans SSL, et il n'y a aucun moyen de les envoyer de manière fiable à SSL s'il y a un MiM qui sabote activement cela.
Alerte rouge le
1

ceejayoz a la meilleure réponse pour empêcher l'attaque spécifiquement mentionnée ici, mais je tiens également à souligner ce que beaucoup de gens manquent ici, c'est essentiellement que HTTP a déjà compris l'autre partie. Vous souhaitez effectuer une redirection 301 permanente. Cela indique au client de faire d'autres demandes à la nouvelle adresse. Donc oui, si quelqu'un tape la mauvaise URL, il fera 2 demandes MAIS, à l'avenir, un bon client est censé détecter les demandes vers cette URL et faire la bonne demande à la place pour éviter d'autres gaspillages. Le problème est que ce n'est que pour cette URL exacte. HSTS améliore ce schéma en disant également: «pour les n secondes suivantes également, n'autorisez aucune connexion non sécurisée à partir de ce domaine».

Les utilisateurs ne doivent pas visiter des sites sensibles à des endroits non sécurisés. Ils ne devraient surtout pas s'inscrire pour eux dans des endroits peu sûrs. Ce sont des principes de base de la sécurité des utilisateurs qui devraient être enseignés comme «n'ouvrez pas les pièces jointes à partir de sources non fiables». Qui sont vraiment la meilleure réponse pour prévenir les attaques MiM pour les sites qui n'ont jamais été visités.

Par ailleurs, certains navigateurs améliorent cela en disant également que certains sites connus utilisent toujours HSTS. Malheureusement, vous ne pouvez pas simplement vous ajouter facilement à cette liste.

Pour en savoir plus: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

krowe
la source