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

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

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

有什么方法可以配置 Squid 或一般代理服务器来缓存 HTTPS 请求?

答案1

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

以下是具体操作方法。

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

注意事项:

  1. 您的用户会恨您。对该站点的每个 SSL 请求都会显示无效证书窗口。
  2. 你做了坏事,可能会让你面临诉讼。(律师)
  3. 由于 SSL 证书的 PKI 信任网的工作方式,您只能获得一个自签名证书。更不用说被盗用的根 CA 了。

我不会告诉你具体怎么做,因为A)我认为这有点不道德,而且b)你最好学着去做这件事。

我建议你研究一下隧道和中间人攻击是如何工作的。

答案2

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

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

答案3

不,没有:它们是加密的......解决方法可能是类似于中间人部署,但这将挫败背后的所有理由https

答案4

Zeus(现在是 Riverbed 的)ZTM Traffic Manager 可以做到这一点,因为它可以双向转换 http 和 https 流量并缓存未加密的内容 - 它可以工作,我们在使用它,但它的价格非常昂贵 - 就像每台服务器一辆保时捷的价格一样。

相关内容