【问题标题】:About proxy man-in-middle attack关于代理中间人攻击
【发布时间】:2017-09-04 18:48:33
【问题描述】:

我有一个在 H2O 代理下运行的网站,我们称之为服务器。后端是运行 EasyEngine 脚本的 WordPress 站点,我们称之为 B 服务器。

现在它像这样运行:

用户 --(让我们加密 SSL)--> A(H2O 代理) --(自签名 SSL )--> B(nginx 后端).

我想知道攻击者是否知道我的后端的 IP 地址,那么他是否可以解密或做有害的事情或查看用户向代理发送的内容?以及如何制定更好的策略?

我也想过设置 Let's Encrypt SSL 从 A 服务器到 B 服务器。但是我认为当 Let's Encrypt 只能在 A 服务器上更新证书时会出现问题,因为域指向 A 的 IP 地址。并且后端(B服务器)无法续订。

找到了这个答案,但我真的不知道该怎么做:https://serverfault.com/a/735977

【问题讨论】:

  • 如果您可以限制 B 只能从 A 访问,那么我不明白为什么这会是一个问题?
  • 我在没有通过代理的情况下运行了一些指向 B 的服务器的网站,所以我不认为限制连接是个好主意。
  • 代理的目的是为了促进与后端的通信,后端不暴露在互联网上。如果它 暴露于 Internet,则不需要代理。所以,不要将它暴露在互联网上:把它放在防火墙后面。问题解决了。
  • 让我解释一下。在我的后端运行 20 多个网站但彼此不相关,其中一些很重要,我需要在代理下运行(服务器:带 Varnish 缓存的 H2O)。其他的,直接从后端运行。
  • '重要的是我需要在代理下运行'为什么?

标签: ssl nginx proxy


【解决方案1】:

听起来你想要做的是将 LetsEncrypt 放在尽可能多的地方,可能会面临后端本身没有所需的完全限定域名的问题获取证书,尤其是自动续订。

但 LetsEncrypt 的全部和唯一目的是,它为您提供预期会被所有主要浏览器识别的证书,这样用户就不必手动验证您的证书并将其安装到他们各自的 cacert.pem 中。

但是,如果您只需要在自己的后端和前端服务器之间建立安全连接,那么您就不会面临同样的问题;因此,使用 LetsEncrypt 提供的额外保护很少(如果有的话)。您需要做的是在前端使用proxy_ssl_trusted_certificateproxy_ssl_verify 之类的东西,将后端的证书和/或证书颁发机构固定在前端,这将是一个数量级以上比在后端使用 LetsEncrypt 更安全(由于固定)。

【讨论】:

  • 是的,这就是我想要的。我希望我的后端和前端服务器之间更安全。现在我的 H2O 代理的 SSL 验证为假,并且我没有任何调用受信任证书的文件。如何创建它?
  • 就像创建一个自签名 SSL 并将该证书放到后端和前端进行验证?如果您有详细帖子的链接,那将非常有帮助。
  • @AnhTuan,基本上,您只需要查看您用于为后端创建原始证书的过程,并从中找到公共文件,然后将它们用作 CA 文件用于您的前端 H2O 代理。见mdoc.su/o/starttls;基本上,只需找到后端的公共证书,并将其用作前端代理的证书颁发机构(例如,在 starttls 的说明中引用为 ln -s /etc/ssl/mail.example.com.crt /etc/ssl/CAcert.pem)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 2018-08-31
  • 2012-09-21
  • 1970-01-01
  • 2021-08-09
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多