这是一个可能很奇怪而且可能也是错误地被问到的问题。
我有以下网络结构/计划...:
这个想法是,负责/授权网络 1 和 domain1.com 的人拥有自己的 Rev. Proxy,他们负责管理和保管 SSL 证书。这同样适用于网络 2。
问题是,这真的可能吗?不幸的是,我对 SSL 和代理不是很熟悉。我怀疑持有 SSL 证书的 Rev. Proxy 一定是前端。如果是这样的话,它可能无论如何都行不通。那么问题是还有其他方法吗?一种基于 http/https 的 NAT?听起来有点不对劲……但我认为这个想法很清晰。
如果基本可行,那么问题就是 HaProxy->Nginx 的顺序是否正确?以及是否有人可以给我一些关于如何正确配置前端代理的提示或链接。
非常感谢您的回答。
更新: 对于那些有类似想法的人,haproxy 配置:
# Automaticaly generated, dont edit manually.
# Generated on: 2024-10-07 20:55
global
maxconn 1000
stats socket /tmp/haproxy.socket level admin expose-fd listeners
uid 80
gid 80
nbthread 1
hard-stop-after 15m
chroot /tmp/haproxy_chroot
daemon
tune.ssl.default-dh-param 2048
server-state-file /tmp/haproxy_server_state
frontend Front
bind your_public_ip:80 name your_public_ip:80
bind your_public_ip:443 name your_public_ip:443
mode tcp
log global
timeout client 30000
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
acl app1 req_ssl_sni -m end domain1.de
acl app2 req_ssl_sni -m end domain2.de
use_backend Domain1_ipvANY if app1
use_backend Domain2_ipvANY if app2
backend Domain1_ipvANY
mode tcp
id 100
log global
timeout connect 30000
timeout server 30000
retries 3
load-server-state-from-file global
stick-table type binary len 32 size 30k expire 30m
acl clienthello req_ssl_hello_type 1
acl serverhello rep_ssl_hello_type 2
tcp-request inspect-delay 5s
tcp-request content accept if clienthello
tcp-response content accept if serverhello
stick on payload_lv(43,1) if clienthello
stick store-response payload_lv(43,1) if serverhello
server ProxyMan 192.168.7.1:8443 id 102 check inter 1000
backend Domain2_ipvANY
mode tcp
id 100
log global
timeout connect 30000
timeout server 30000
retries 3
load-server-state-from-file global
stick-table type binary len 32 size 30k expire 30m
acl clienthello req_ssl_hello_type 1
acl serverhello rep_ssl_hello_type 2
tcp-request inspect-delay 5s
tcp-request content accept if clienthello
tcp-response content accept if serverhello
stick on payload_lv(43,1) if clienthello
stick store-response payload_lv(43,1) if serverhello
server ProxyMan 192.168.8.1:8443 id 103 check inter 1000
可以在多个阶段为同一个域拥有证书,如果各个阶段之间的传输是通过不受信任的网络进行的,这种情况尤其常见,因此应该受到保护。
一个典型的例子是像 cloudflare 这样的内容分发网络 (CDN),它终止其网站上的 TLS,然后将流量转发到互联网上其他地方的客户系统,该系统具有自己的证书来保护 cloudflare 和最终服务器之间的通信。
由于每个服务器/代理都需要证书和私钥,并且私钥不应共享,这通常意味着代理和服务器具有不同的证书。从公共客户端的角度来看,只有初始代理需要具有客户端信任的证书,即通常来自公共 CA(如 Let's Encrypt)的证书。其他每个阶段只需要前一阶段信任的证书,该证书可能由某个内部非公共 CA 颁发,甚至可能是自签名的。
请注意,您也可以在 HA 代理中使用基于域的路由而不终止 TLS,方法是根据TLS 握手中可见的服务器名称进行路由(只要未设置ECH)。由于在这种情况下 HA 代理不会终止 TLS,因此它也不需要证书。