Un serveur proxy peut-il mettre SSL en cache? Sinon, le chiffrement du corps de réponse suffirait-il?

Un serveur proxy (//any) peut-il mettre en cache le contenu demandé par un client via https? Comme le serveur proxy ne peut pas voir la chaîne de requête ou les en-têtes http, je pense qu'ils ne peuvent pas.

J'envisage une application de bureau, gérée par un certain nombre de personnes derrière leur proxy d'entreprise. Cette application peut accéder à des services sur internet et je voudrais profiter de l'infrastructure de mise en cache Internet intégrée pour les "lectures". Si les serveurs proxy de mise en cache ne peuvent pas mettre en cache SSL livré contenu, le simple chiffrement du contenu d'une réponse serait-il une option viable?

Je considère toutes les requêtes GET que nous souhaitons mettre en cache sur http avec le corps crypté en utilisant un cryptage asymétrique, où chaque client a la clé de déchiffrement. Chaque fois que nous souhaitons effectuer un GET qui n'est pas cachable, ou une opération POST, il sera effectué sur SSL.

28
demandé sur imaginaryboy 2008-08-18 18:06:13

6 réponses

Le commentaire de Rory selon lequel le proxy devrait utiliser un certificat auto-signé s'il n'est pas strictement vrai.

Le proxy peut être implémenté pour générer un nouveau certificat pour chaque nouvel hôte SSL auquel il est demandé de traiter et de le signer avec un certificat racine commun. Dans le scénario de L'OP d'un environnement corporatif, le cert de signature commun peut assez facilement être installé en tant qu'autorité de certification de confiance sur les machines clientes et ils accepteront volontiers ces certs SSL "truqués" pour le trafic en cours de proxy car il n'y aura pas de discordance de nom d'hôte.

En fait, c'est exactement ainsi que des logiciels tels que Charles Web Debugging Proxy permettent d'inspecter le trafic SSL sans provoquer d'erreurs de sécurité dans le navigateur, etc.

22
répondu imaginaryboy 2008-08-23 00:19:47

Non, il n'est pas possible de mettre en cache https directement. Toute la communication entre le client et le serveur est cryptée. Un proxy se trouve entre le serveur et le client, afin de le mettre en cache, vous devez être capable de le lire, c'est-à-dire décrypter le cryptage.

Vous pouvez faire quelque chose pour le mettre en cache. Vous faites essentiellement le SSL sur votre proxy, interceptant le SSL envoyé au client. Fondamentalement, les données sont cryptées entre le client et votre proxy, elles sont déchiffrées, lues et mises en cache, et les données sont chiffré et envoyé sur le serveur. La réponse du serveur est également décryptée, lue et chiffrée. Je ne sais pas comment vous faites cela sur les principaux logiciels proxy (comme squid), mais c'est possible.

Le seul problème avec cette approche est que le proxy devra utiliser un certificat auto-signé pour le chiffrer au client. Le client sera en mesure de dire qu'un proxy au milieu a lu les données, puisque le certificat ne sera pas du site d'origine.

17
répondu 2008-08-18 14:24:39

Je pense que vous devriez simplement utiliser SSL et compter sur une bibliothèque client HTTP qui fait la mise en cache (Ex: WinInet sur windows). Il est difficile d'imaginer que les avantages de la mise en cache à l'échelle de l'entreprise valent la peine d'écrire un schéma de cryptage de sécurité personnalisé ou un certificat amusant sur le proxy. Pire, sur le schéma d'encyrption que vous mentionnez, faire des chiffrements asynmétriques sur le corps de l'entité sonne comme un énorme coup de poing sur le côté serveur de votre application; il y a une raison pour laquelle SSL utilise des chiffrements symétriques pour la charge utile de la connexion.

L'application concernée n'est pas une application de navigateur, c'est une application de bureau tirant des données sur internet. Ce qui va se passer, c'est que toutes les instances de l'application vont tirer le même morceau à peu près au même moment. Ces données doivent être sécurisées, mais j'espère augmenter perf en faisant en sorte que certaines instances de l'application obtiennent une version mise en cache du serveur proxy d'entreprise.

Les blocs de données sont petits, mais ils peuvent être demandés fréquemment. Essentiellement, toutes les instances d'application vont demander les mêmes données que les autres en même temps.

Le corps des données/messages côté serveur sera pré-chiffré et mis en cache dans une table de hachage distribuée en mémoire. Le chiffrement ne sera pas effectué sur une base par demande.

J'étudie également l'utilisation d'un bus de messages, tel que NServiceBus à la place.

1
répondu 2008-08-25 21:37:54

Vérifier www.bluecoat.com est un proxy commercial qui peut en fait faire l'interception https afin de bloquer les sites, restreindre le contenu, inspecter les virus et le contenu du cache (GETs)

1
répondu 2008-11-05 02:52:20

Je pense que vous devriez simplement utiliser SSL et compter sur une bibliothèque client HTTP qui fait la mise en cache (Ex: WinInet sur windows). Il est difficile d'imaginer que les avantages de la mise en cache à l'échelle de l'entreprise valent la peine d'écrire un système de cryptage de sécurité personnalisé ou un certificat amusant sur le proxy. Pire, sur le schéma de chiffrement que vous mentionnez, faire des chiffrements asymétriques sur le corps de l'entité sonne comme un énorme coup de poing sur le côté serveur de votre application; il y a une raison pour laquelle SSL utilise des chiffrements symétriques pour le charge utile réelle de la connexion.

1
répondu Ari Pernick 2016-03-26 17:56:47

Que diriez-vous de configurer un cache de serveur sur le serveur d'applications derrière le composant qui crypte les réponses https? Cela peut être utile si vous avez une configuration de proxy inverse.

Je pense à quelque chose comme ceci:

application server <---> Squid or Varnish (cache) <---> Apache (performs SSL encryption)
0
répondu Jesse Hallett 2010-05-18 21:26:12