我在这个问题中也描述了同样的场景。我有一个客户端连接到一个具有多个后端服务的nginx反向代理,并且需要设置证书。
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但是,从答案中我不清楚的是,每个证书中列出的DNS名称和in应该是什么。
我的理解是:
如果以上两件事是真的,那么后端服务的证书中应该列出的DNS名称和in是什么?客户端需要在证书中看到代理的主机名/IP,对吗?但是代理应该看到他们真正的IP?
这就是我困惑的地方。
发布于 2023-05-10 11:20:54
其中一种方法是终止Nginx上的HTTPS通信,然后转到example1、example2和example3。在这种情况下,客户端将验证它从Nginx获得的证书,因此,当您连接到https://example1.com时,它将检查CN=example1.com是否匹配,以及它是否有效,并由可信CA签名。客户端将看到Nginx与Nginx传递给的服务之间是如何进行检查的。
问题是,此示例包含与客户端应该连接到的相同的侦听地址和通信量应该代理的地址。这应该是不同的,因此,例如,在连接到https://example1.com时,应该将该通信量转发给https://example1-something.com (以避免循环)。
Nginx可以向代理服务验证证书,这里是服务器错误中的另一个问题。您也可以忽略证书,但这完全取决于您如何处理它。从客户端的角度来看,重要的是它用有效的、可信的证书连接到服务器,这超出了给定的范围。
我自己从来没有这样做过,但从技术上讲,您可以尝试制作一个TCP代理,而不是HTTP,然后您将不得不终止代理机器上的证书,但是我认为这个想法有点像样板一样,第一种方法更容易实现。
https://serverfault.com/questions/1130817
复制相似问题