有没有办法在代理服务器中缓存 HTTPS 请求?

Sup*_*tik 15 proxy https squid

我们在我们的环境中使用 Squid 代理服务器,我们想要缓存 HTTPS 请求。

有没有办法配置 Squid 或一般的代理服务器来缓存 HTTPS 请求?

Tom*_*nor 14

有一种方法可以做到这一点,但它从根本上违背了使用 HTTPS 的原因。

这是你的方法。

  1. 为要拦截和缓存请求的站点生成自签名 SSL 证书。
  2. 在您的代理服务器上安装并运行 stunnel,告诉它应该提供的证书是在第 1 阶段生成的证书。
  3. 让 stunnel 将解密的请求转发给鱿鱼。
  4. 您可能需要在另一端使用 stunnel 或 openssl_client 来重新加密对上游服务器的请求。

注意事项:

  1. 你的用户会讨厌你。对该站点的每个 SSL 请求都会显示一个无效的证书窗口。
  2. 您正在因做淘气的事情而面临潜在的诉讼。(IANAL)
  3. 由于 SSL 证书的 PKI 信任网络应该如何工作,您将只能获得为此工作的自签名证书。对受损的根 CA 一言不发。

我不会向您提供如何执行此操作的确切细节,因为a)我认为这有点不道德,并且b)最好学习如何执行此操作。

我建议您研究 stunnel 和中间人攻击的工作原理。

  • 实际上,如果您在域中,生成自己的 CA 并使用组策略为其部署公共证书要容易得多。 (3认同)

小智 8

只是为了解释为什么没有 MITM 就不能做到这一点 - 当使用加密的 HTTPS 时,代理只能看到您要连接的服务器的 DNS 名称。它看不到 URL,也看不到任何响应头。它无法确定您在站点上访问的单个资源、它是否可缓存,也无法确定其修改时间是多少。它所能看到的只是有人想要使用 HTTPS 从远程服务器获取某些东西。

这意味着缓存无法工作,因为代理不知道要提供什么缓存对象,或者首先如何获取它们。


yrk*_*yrk 5

不,没有:它们是加密的......一种解决方法类似于中间人部署,但这会打败https背后的所有原因。

  • 我不同意它会击败 https 背后的所有原因。如果您在家中执行此操作并且您拥有代理,则您的数据仍将在您的代理和网站之间使用 https。 (6认同)