Haproxy:带有自签名证书的 SSL 加密后端

Joe*_*e J 6 ssl nginx load-balancing haproxy

我正在努力配置 HAProxy,以便它将终止 SSL,因此只有一个地方可以配置购买的 SSL 证书。但是,我更希望与后端服务器的连接也使用 SSL 加密。

我发现的一个建议是在后端服务器上创建自签名证书,然后在每个服务器行上设置“验证无”。... 所以从浏览器到 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 }
Run Code Online (Sandbox Code Playgroud)

gf_*_*gf_ 5

问题实际上与HAProxy,而是与管理证书和证书颁发机构有关。

不确定您使用的是哪个操作系统,因为您没有说明这一点,但如果它是某种 Linux 风格(尽管以下适用于Debian和衍生产品):

  • 确保您已ca-certificates安装该软件包。

  • 您正在使用自己的证书颁发机构(ca)创建证书。

  • 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,因此请使用sudoroot来执行此操作。)

  • 执行update-ca-certificates(通过sudo/ as root)。

  • 执行后,应该有一个/etc/ssl/cert/your-ca-root.pem符号链接到/usr/local/share/ca-certificates/name-of-your-ca/your-ca-root.crt.

  • 启用验证HAProxy并获利。