我正在尝试让 HAproxy 1.5.x 信任计算机信任库中已有的任何证书颁发机构 ( /etc/ssl/certs
),而无需明确指定ca-file
要信任的单个根颁发机构证书。我想避免出现这样的情况:给定的后端服务器使用由其他颁发机构颁发的证书,并导致中断,因为该后端服务器不再受信任——尽管 CA 位于计算机信任库中。
在backend
该haproxy.cfg
文件的给定部分中,该server
行有一个名为的选项ca-file
。此选项指示 HAproxy 使用提供的权限来验证后端服务器证书的权限。问题是,这指向单个 CA。
我找到了这个选项。除非我弄错了,否则这只是一个快捷方式,可以避免在每个声明中ca-base
指定完整路径。ca-file
答案1
我最近在 1.5.6 中遇到了这个问题,我收到了错误消息
默认情况下启用验证,但未指定 CA 文件。如果您在确定信任服务器证书的 LAN 上运行,请在“服务器”行上设置明确的“验证无”语句,或在全局部分中使用“ssl-server-verify none”默认禁用服务器端验证。
这与未指定ca 文件,您无法在默认服务器级别指定(根据文档)。同样,我也不想考虑如果后端端点的证书由另一个 CA 重新颁发,服务会中断。
我通过指向 Linux 发行版打包并为您精心维护的组合 CA 证书文件解决了这个问题。在 Debian 上,此文件是/etc/ssl/certs/ca-certificates.crt
,对您来说可能也一样。(在 RHEL7 上,检查/etc/ssl/certs/ca-bundle.crt
)
global
ca-base /etc/ssl/certs # debian
frontend f1
use_backend b1
backend b1
server s1 something.com:443 ssl verify required ca-file ca-certificates.crt
答案2
我认为你误解了的意义ca-file
。
CA 用于授权客户,而不是您自己的后端服务器。
据我所知,HAproxy 不会与其后端建立 SSL 连接 - 没有握手,也没有 HAproxy 需要验证的证书。
如果您或您的客户端设置了 PKI 以仅允许来自受信任客户端的安全 SSL 连接,则需要 CA 文件。您(或客户端)将自行生成 CA 证书,并使用它来签署客户端证书。
即使在极少数情况下,同一项服务需要多个 CA,似乎也可以将它们捆绑在一个 PEM 文件中。