Haproxy 具有多个 CA 配置

ara*_*een 5 ssl haproxy ssl-certificate amazon-web-services aws-api-gateway

这里是 SSL 新手,使用 haproxy 1.8,遇到这样的情况:我有 2 个 aws API 网关指向同一个代理服务器,并且 api 网关本身生成的 2 个客户端证书为每个网关分配了一个证书。

现在我有一个 haproxy 服务器,我正在尝试将其配置为仅允许从这 2 个 api 网关进行访问。

当我仅针对 api 网关执行此操作时,这意味着我仅将 ca 文件设置为包含 1 个客户端证书的文件,它按预期工作正常,但我不知道如何设置允许的两个客户端证书。

所以我设置了这些文件:

  • haproxy.pem其中包含
    • 服务器证书由godaddy颁发
    • 私钥
    • 去爸爸证书
  • api-gw.pem从 api 网关复制的第一个客户端证书
  • api-gw2.pem从 api 网关复制的第二个客户端证书
  • client-certs.crt是api-gw.pemapi-gw2.pem的串联版本

当我像下面这样为客户端证书绑定 ssl 时,它工作得很好:

bind :443 ssl crt /etc/haproxy/haproxy.pem verify required ca-file /etc/haproxy/api-gw.pem
Run Code Online (Sandbox Code Playgroud)

或者

bind :443 ssl crt /etc/haproxy/haproxy.pem verify required ca-file /etc/haproxy/api-gw2.pem
Run Code Online (Sandbox Code Playgroud)

对于上面的每个绑定,只有正确的 api 网关可以访问代理,而另一个则不能。

但是当我执行以下操作以允许两者访问代理服务器时,它只允许第一个客户端证书,即使该文件包含两者:

bind :443 ssl crt /etc/haproxy/haproxy.pem verify required ca-file /etc/haproxy/client-certs.pem
Run Code Online (Sandbox Code Playgroud)

由于我对证书和 ssl 的了解有限,我不确定将多个客户端证书放入一个文件中是否可行,但从我在互联网上读到的内容来看,建议这样做......我仍然不这样做不知道为什么它不起作用。

编辑 我迈克尔建议,我使用以下命令将两个客户端证书放在一起

cat api-gw.pem api-gw2.pem > api-gw-combo.pem
Run Code Online (Sandbox Code Playgroud)

组合文件如下所示:

-----BEGIN CERTIFICATE-----
.....cert content for api-gw
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
.....cert content for api-gw2
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

但与我的初始文件相同client-certs.crt,haproxy 仍然只接受第一个证书。

Jac*_*ack 1

您的配置(关于 SSL 客户端授权的一个文件中的两个客户端 CA 证书)对我来说工作正常:

bind 1.2.3.4:443 ssl crt /etc/haproxy/ssl/my-domain.pem ca-file /etc/haproxy/ssl/my_client_CA_bundle.crt verify required
Run Code Online (Sandbox Code Playgroud)

但也许它在特定情况下有效:

  • HaProxy 2.2.X,
  • my_client_CA_bundle.crt文件中我们有两个用于客户端验证的根CA,
  • 但我们用于客户端验证的两个 CA 都是使用相同的私钥创建的(也许这与您的问题有重要区别?)。

此配置用于在旧客户端的 CA 耗尽时平稳过渡到新客户端的 CA。