web-dev-qa-db-fra.com

Le SSL doit-il être résilié à un équilibreur de charge?

Lors de l'hébergement d'un cluster de serveurs d'applications Web, il est courant d'avoir un proxy inverse (HAProxy, Nginx, F5, etc.) entre le cluster et Internet public pour équilibrer la charge du trafic entre les serveurs d'applications. Afin d'effectuer une inspection approfondie des paquets, SSL doit être interrompu au niveau de l'équilibreur de charge (ou version antérieure), mais le trafic entre l'équilibreur de charge et les serveurs d'applications ne sera pas chiffré. La résiliation anticipée de SSL ne rendrait-elle pas les serveurs d'applications vulnérables au reniflage de paquets ou à l'empoisonnement ARP?

Faut-il décharger SSL? Dans l'affirmative, comment le faire sans compromettre l'intégrité des données servies? Ma principale préoccupation concerne une application Web où le chiffrement de la couche de message n'est pas une option.

99
Matt Goforth

Il me semble que la question est "faites-vous confiance à votre propre centre de données". En d'autres termes, il semble que vous essayez de tracer finement la ligne où se trouvent les réseaux non fiables, et où confiance commence.

À mon avis, la confiance SSL/TLS devrait se terminer au niveau du périphérique de déchargement SSL, car le département qui gère ce périphérique gère souvent également le réseau et l'infrastructure. Il y a là une certaine confiance contractuelle. Il ne sert à rien de chiffrer les données sur un serveur en aval, car les mêmes personnes qui prennent en charge le réseau y ont généralement également accès. (à l'exception possible dans des environnements multi-locataires ou des exigences métier uniques qui nécessitent une segmentation plus approfondie).

Une deuxième raison pour laquelle SSL doit se terminer au niveau de l'équilibreur de charge est qu'il offre un emplacement centralisé pour corriger les attaques SSL telles que CRIME ou BÊTE . Si SSL est interrompu sur une variété de serveurs Web, en cours d'exécution sur différents systèmes d'exploitation, vous êtes plus susceptible de rencontrer des problèmes en raison de supplémentairecomplexité . Restez simple et vous aurez moins de problèmes à long terme.

Cela étant dit

  1. Oui, terminez-vous à l'équilibreur de charge et déchargez SSL à cet endroit. Rester simple.
  2. L'équilibreur de charge Citrix Netscaler (par exemple) peut refuser l'accès non sécurisé à une URL. Cette logique de politique, combinée aux fonctionnalités de TLS, devrait garantir que vos données restent confidentielles et inviolables (étant donné que je comprends bien votre exigence d'intégrité)

Modifier:

Il est possible (et courant) de

  • Externaliser l'équilibreur de charge (Amazon, Microsoft, etc.)
  • Utilisez un CDN tiers (Akamai, Amazon, Microsoft, etc.)
  • Ou utilisez un proxy tiers pour empêcher les attaques DoS

... où le trafic de ce tiers serait envoyé à vos serveurs via des liens réseau que vous ne gérez pas. Il se peut donc que vous ne fassiez pas confiance à ces liens non chiffrés. Dans ce cas, vous devez rechiffrer les données, ou tout au moins faire en sorte que toutes ces données transitent par un VPN point à point.

Microsoft propose un tel produit VPN et permet une externalisation sécurisée du périmètre.

78
goodguys_activate

Oui, je dirais que TLS devrait être déchargé. J'ai fait tout ce que je mentionne ci-dessous spécifiquement avec Citrix Netscaler, mais je pense que F5 devrait pouvoir faire les mêmes choses.

Tout d'abord, vous devez toujours vous assurer que vous rechiffrez de l'autre côté de l'équilibreur de charge, mais le dispositif de décryptage TLS devrait être en mesure d'inspecter ce qui se passe du point de vue de la sécurité. L'intégrité des données ne doit pas être compromise par cette approche.

Beaucoup de gens m'ont dit que le recryptage sur le back-end le rend tout aussi coûteux en calcul, mais ce n'est pas vrai. Les dépenses avec TLS sont la construction et la fermeture de la connexion, que le déchargeur TLS gère. Sur le backend, vous avez une connexion plus persistante aux serveurs, et donc les ressources requises sont beaucoup plus faibles.

De plus, si vous n'avez pas de déchargement TLS, même une petite attaque DDoS via TLS anéantirait complètement vos serveurs. Je connais très bien cette situation et le déchargement TLS est une aide incroyable d'un point de vue informatique, et vous permet également de bloquer les attaques plus haut dans la chaîne. Pour les attaques DDoS extrêmement importantes, vous pouvez même diviser votre stratégie d'atténuation entre votre déchargeur TLS et vos serveurs.

18
JZeolla

Pour inspecter les données qui vont dans une connexion SSL, alors l'une ou l'autre de ces conditions doit être vraie:

  • Le tunnel se termine sur la machine qui effectue l'inspection, par ex. votre "équilibreur de charge".
  • Le système d'inspection connaît une copie de la clé privée du serveur et la connexion SSL n'utilise pas l'éphémère Diffie-Hellman (c'est-à-dire que le serveur n'autorise pas les suites de chiffrement qui contiennent "DHE" en leur nom).

Si vous suivez la première option, les données circuleront non chiffrées entre le système d'inspection (l'équilibreur de charge) et les clusters, sauf si vous les rechiffrez avec un autre tunnel SSL: la connexion SSL principale est entre le navigateur client et l'équilibreur de charge, et la charge balancer maintient une liaison SSL (ou une autre technologie de chiffrement, par exemple un VPN avec IPsec ) entre lui-même et chacun des nœuds du cluster.

La deuxième option est un peu plus légère, car l'inspecteur de paquets ne fait que déchiffrer les données mais n'a pas à les rechiffrer. Cependant, cela implique que tous les nœuds de cluster sont capables de faire le SSL complet avec le client, c'est-à-dire de connaître une copie de la clé privée du serveur. De plus, ne pas prendre en charge DHE signifie que vous n'obtiendrez pas la fonctionnalité astucieuse de Perfect Forward Secrecy (ce n'est pas fatal, mais PFS a l'air vraiment bien dans les audits de sécurité, c'est donc une bonne chose à avoir).

Dans les deux cas, le nœud qui effectue une inspection approfondie des paquets doit avoir un accès privilégié au tunnel SSL, ce qui le rend plutôt critique pour la sécurité.

7
Tom Leek

Je recommanderais de mettre fin à SSL sur l'équilibreur de charge (que ce soit sur votre réseau, ou chez un fournisseur CDN ou autre). Cela signifie que le LB peut inspecter le trafic et peut faire un meilleur travail d'équilibrage de charge. Cela signifie également que votre équilibreur de charge est responsable du traitement des clients lents, des implémentations SSL cassées et de la fragilité générale d'Internet. Il est probable que votre équilibreur de charge dispose de meilleures ressources pour ce faire que vos serveurs principaux. Cela signifie également que les certificats SSL que le monde voit sont tous sur l'équilibreur de charge (ce qui, espérons-le, les rend plus faciles à gérer).

L'alternative ici est simplement d'équilibrer la charge des connexions TCP des clients vers vos serveurs principaux. Comme le LB ne peut pas inspecter ce qui se passe de cette façon, il ne peut pas répartir la charge uniformément sur les serveurs principaux et les serveurs principaux doivent gérer toute la fragilité d'Internet. Je n'utiliserais cette méthode que si vous ne faites pas confiance à votre équilibreur de charge, à votre fournisseur CDN ou autre.

Le fait de rechiffrer ou non à partir de l'équilibreur de charge vers vos serveurs principaux est une question de choix personnel et de circonstance. Si vous traitez avec des cartes de crédit ou des transactions financières, vous êtes probablement réglementé par le (s) gouvernement (s) et devrez donc rechiffrer. Vous devriez probablement également rechiffrer si le trafic entre l'équilibreur de charge et les serveurs principaux circule sur des réseaux non approuvés. Si vous hébergez simplement le site Web de votre entreprise, vous pourrez peut-être éviter les frais supplémentaires du recryptage, si vous ne vous souciez pas vraiment des aspects de sécurité.

Le recryptage n'ajoute pas autant de charge que vous ne le pensez. Habituellement, l'équilibreur de charge sera en mesure de maintenir des connexions persistantes vers les serveurs, de sorte que le coût SSL sera assez faible pour ce "saut" sur le réseau.

La dernière chose à penser est l'application sur les serveurs principaux. Si tout le trafic qui y arrive est HTTP, il ne peut pas prendre de décisions en fonction du protocole utilisé par le client. Il ne peut pas alors dire "vous essayez d'accéder à la page de connexion via HTTP, je vais donc vous rediriger vers la version HTTPS de la page", par exemple. Vous pouvez demander à l'équilibreur de charge d'ajouter un en-tête HTTP pour dire "cela vient de HTTPS", mais cet en-tête aurait besoin d'une gestion spéciale dans l'application. Selon votre situation, il peut être plus facile de rechiffrer et de laisser l'application fonctionner à sa manière "par défaut" plutôt que d'avoir besoin d'une modification spécifique au site.

En résumé, je dirais: terminer à l'équilibreur de charge et rechiffrer sur vos serveurs principaux. Si vous faites cela et que vous constatez un problème, vous pouvez effectuer des ajustements si nécessaire.

6
Ralph Bolton

Vous pouvez choisir de chiffrer le trafic interne avec un certificat de clé inférieure. Et il est également conseillé de positionner votre équilibreur de charge le plus près possible de vos serveurs pour éviter les reniflements ou les attaques man-in-middle. La terminaison SSL peut être effectuée au niveau de l'équilibreur de charge pour décharger les tâches gourmandes en ressources processeur loin des serveurs Web. Si la marque LB que vous avez choisie peut effectuer certaines fonctions telles que l'inspection des connexions de protocole mal formées, détecter le comportement DDoS, etc.

1
Davis