我正在配置 HAProxy,使其终止 SSL,这样就只有一个地方可以配置购买的 SSL 证书。但是,我希望与后端服务器的连接也使用 SSL 加密。
我发现的一个建议是在后端服务器上创建自签名证书,然后在每行服务器上设置“verify none”。... 因此,从浏览器到 HAProxy 的连接将使用官方购买的 SSL 证书,但从 HAProxy 到后端服务器的连接将使用自签名证书。自签名证书的好处是它们是免费的,不需要更新和维护(我可以将到期时间设置在很远的未来,避免每年安装新的证书)。然而,可以理解的是,这会使后端面临 MITM 攻击,我读过的一些资料并不推荐这样做。
我可以配置 HAProxy,以便可以在后端服务器上使用自签名证书,但也许以某种方式将自签名证书列入 HAProxy 服务器上的白名单?... 因此 HAProxy 到后端的连接将被加密,它不会受到 MITM 攻击,并且 HAProxy 会知道信任来自后端服务器的自签名证书。
我所描述的是否可行?我是 HAProxy SSL 终止的新手,因此任何建议都值得赞赏。
我的配置相关部分如下:
frontend www-in
bind *:80
bind *:443 ssl crt /etc/ssl-keys/my-public-ssl-key.pem no-sslv3
mode http
default_backend https-backend
# force redirect to https
redirect scheme https if !{ ssl_fc }
backend https-backend
balance leastconn
server web1 1.1.1.1:443 check ssl verify none
server web2 2.2.2.2:443 check ssl verify none
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
答案1
这个问题实际上与无关HAProxy
,而是与管理证书和证书颁发机构有关。
不确定您使用的是哪种操作系统,因为您没有说明,但如果它是某种 Linux 风格(尽管以下内容适用于Debian
和衍生产品):
确保您已经
ca-certificates
安装了该包。您正在使用自己的证书创建证书证书颁发机构(大约)。
将此
your ca root cert
ca 的 放入 内/usr/local/share/ca-certificates/name-of-your-ca/
。(您可能必须name-of-your-ca
自行创建文件夹。)确保your ca root cert
具有.crt
扩展名。(默认情况下,
/usr/local/share/ca-certificates/
由 拥有root:staff
,因此使用sudo
或root
来执行此操作。)执行
update-ca-certificates
(通过sudo
/ 作为root
)。执行后,应该有一个符号
/etc/ssl/cert/your-ca-root.pem
链接到的文件/usr/local/share/ca-certificates/name-of-your-ca/your-ca-root.crt
。启用验证
HAProxy
并获利。