哪些 SSL 证书在反向代理上用于哪里? - nginx

哪些 SSL 证书在反向代理上用于哪里? - nginx

需要澄清 nginx 反向代理服务器上的上游 SSL

我一直在阅读 nginx 文档关于反向代理保护与上游服务器的 SSL 连接但我仍然对哪些 SSL 证书应该放在哪里感到困惑。我发现的许多示例都有 nginx 代理本地主机,但我的情况是端点位于不同的服务器、端口和物理位置。

我想在 nginx 服务器上解析多个域名。每个域名在其当前服务器上都有其实际域名的 SSL 证书。

现在,我让每台服务器在其自己的网络位置和物理位置上运行,但我希望有一个单点来管理这些端点。

我的最终结果应该是

                             client
                               |
                             nginx
                       https://example1.com
                       https://example2.com 
                       https://example3.com
                             x.x.x.x
                               |
               -----------------------------------------
               |                |                      |
https://example1.com    https://example2.com    https://example3.com
   a.b.c.d:1234             e.f.g.h:5678            i.j.k.l:9012

现在https://example1.com解析为 abcd:1234,它已安装自己的 SSL 证书。因为我需要向客户端表示 nginx 服务器正在为域 example1.com 提供服务,所以我认为我需要将 example1.com SSL 移至前端运行的 nginx 服务器,对吗?如果我这样做,我应该在 abcd:1234 上使用什么 SSL 证书来维护安全的上游连接?

nginx 文档中提到了 client.crt 和 server.crt,但 CA 使用域来注册它们。在反向代理情况下,客户端和服务器是什么?对我来说,客户端是发出请求的浏览器。

哪些 SSL 证书在反向代理上去往何处?

编辑:

我已经知道,只需将基于 URL 的证书放在代理服务器上,就可以让连接看起来安全。我希望知道在后端服务器上放置哪些 SSL 证书。只需重复使用各自的证书?可以example1.com.crt同时在代理服务器和后端服务器上使用吗?

答案1

域名证书应发送到客户端“看到”的地方,因此,就您而言,如果您只希望 nginx 服务器可从互联网访问,则所有公共证书都应发送到 nginx 服务器。

如果您想要保护后端连接,您可以在这些服务器上使用任何您想要的证书。您甚至可以使用自签名证书,并禁用 nginx 服务器上的证书检查,但创建自己的 CA 并将证书分发给后端可能更明智。

您的配置看起来与您绘制的完全一样,只是后端服务器有一个与其“内部”名称匹配的内部证书:

                                                 client
                                                   |
                                                 nginx
                                           (https://example1.com)
                                           (https://example1.com)
                                           (https://example1.com)
                                                    |
            +---------------------------------------+-----------------------------------+
            |                                       |                                   |
            |                                       |                                   |
https://example1.internal.local/   https://example2.internal.local/   https://example3.internal.local/
       a.b.c.d                                  e.f.g.h                               i.j.k.l

如果后端服务器可以从互联网访问,那么您可能需要防火墙保护它们的 https 端口,以便只有 nginx 服务器可以连接它们。

关于您关于客户端和服务器的问题:在网络中,客户端是发起连接的一方。因此,在您的设置中,浏览器是客户端,而 nginx 服务器同时是客户端和服务器:它是浏览器的服务器,但它是后端服务器的客户端。

答案2

有很多可能性,以下列举两种:

  1. 您的反向代理上有 1 个证书,其中包含您使用的所有域存储区域网络
  2. 重定向将每个域名从你的 nginx 复制到其对应的服务器,重写 URL

要么让你的客户端仅与你的反向代理 (1) 通信,然后 nginx 将处理与上游服务器的连接,要么让 nginx 告诉你的客户端连接到其他服务器 (2),而这些服务器需要他们自己的公共 IP / DNS / 证书。

您还可以(也许应该)使用证书加密反向代理和上游服务器之间的流量,具体取决于您的网络布局。为此,您仍然需要为每个上游服务器提供证书,但它们也可以是自签名的(但不应该)。

如果您正在使用 Let's Encrypt 之类的程序,那么在证书上生成 SAN 现在非常容易,因此我通常选择选项 1。

相关内容