我在 HAproxy 前面有一个使用 STunnel 工作的 SSL 终端。
最近,有人向我提出了添加对 HTTP/2 的支持的问题。使用 HAProxy 很容易,但作为一个限制,STunnel 必须保留。
STunnel 需要保留的原因是大约有 17000 行 SNI,并且可以通过已经存在的 API 来管理它们。
我可以很好地为 HAProxy 添加一个包含 SNI 的证书列表,几个 greps 和 echo 就可以完成。
但是,我搜索了好久,还没发现有人把 HAProxy 放在 STunnel 前面。这是错误的方法吗?
以下是我已经开始研究的内容(其中还没有 SNI - 对于一篇文章来说 17000 个有点太多了):
HAProxy 前端(我需要添加 HTTP/2 支持)对 STunnel 进行加密:
listen frontend
bind 192.168.1.100:443 transparent
mode http
server stunnel 127.0.0.100:443 ssl verify none
隧道
[STunnel]
cert = /etc/ssl/certs/cert.pem
ciphers =
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256
-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA
256:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-
RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-
RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA
accept = 127.0.0.100:443
connect = 127.0.0.100:80
delay = yes
options = NO_SSLv3
options = NO_TLSv1
options = NO_TLSv1.1
options = NO_TLSv1.3
options = CIPHER_SERVER_PREFERENCE
options = DONT_INSERT_EMPTY_FRAGMENTS
renegotiation = no
protocol = proxy
local = 127.0.0.100
TIMEOUTclose = 0
HAProxy“后端”
listen Web
bind 127.0.0.100:80 transparent accept-proxy
mode http
balance leastconn
acl SSL-443 src 127.0.0.100
tcp-request connection expect-proxy layer4 if STunnel
option http-keep-alive
timeout http-request 5s
timeout tunnel 1h
option redispatch
option abortonclose
maxconn 40000
option httplog
server server1 192.168.1.98:80 check
server server2 192.168.1.99:80 check
我假设从 HAProxy 到 STunnel 需要加密,并且我需要考虑它们之间的任何协议不匹配。
HAProxy 的 STunnel 版本是什么tcp 请求连接,如果是 STunnel,则需要代理第 4 层将会?
非常感谢任何有关通过 STunnel 获取 HTTP/2 支持的帮助,以及得到“不要这样做,这是错误的”的帮助。
谢谢你,
答案1
haproxy
仅当证书具有解密 SSL 的权限时才可以看到(HTTP/2 协议)数据。意味着haproxy
需要与 相同的证书stunnel
。
如果这能以某种方式起作用,这将意味着对其进行解密haproxy
并再次对其进行加密stunnel
,然后让其再次解密。