HAProxy 和中级 SSL 证书问题

HAProxy 和中级 SSL 证书问题

目前,我们在 Ubuntu AWS 集群上验证 Comodo SSL 证书时遇到了问题。浏览器可以正常显示网站/内容并显示所有相关证书信息(至少是所有我们已检查过的信息),但某些网络代理和在线 SSL 检查器显示我们的链不完整。

我们尝试了以下方法来解决这个问题:

  1. 升级 haproxy 到最新的 1.5.3
  2. 创建了一个包含所有证书(站点、中间、带根和不带根)的连接“.pem”文件
  3. 在我们的 haproxy.cfg 文件的“bind”行中添加了明确的“ca-file”属性。

使用 openssl 验证“.pem”文件无误。各种中间证书和根证书均已安装并显示在 /etc/ssl/certs 中。但检查结果仍显示证书链不完整。

有人能建议我们还可以检查什么或者做任何其他更改来尝试解决这个问题吗?

提前谢谢了...

更新:我相信,haproxy.cfg 中唯一相关的行是这一行:

bind *:443 ssl crt /etc/ssl/domainaname.com.pem

更新2:输出自openssl s_client

CONNECTED(00000003)
depth=0 OU = Domain Control Validated, OU = COMODO SSL, CN = www.domainname.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, OU = COMODO SSL, CN = www.domainname.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, OU = COMODO SSL, CN = www.domainname.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/OU=COMODO SSL/CN=www.domainname.com
   i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO SSL CA

以下是www.domainname.com.pem(在haproxy配置中引用)的内容。

Bag Attributes
    localKeyID: 01 00 00 00
    friendlyName: www.domainname.com
subject=/OU=Domain Control Validated/OU=COMODO SSL/CN=www.domainname.com
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO SSL CA
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
[...]
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
[...]
-----END RSA PRIVATE KEY-----

答案1

包含中间证书的正确顺序:

-----BEGIN PRIVATE KEY----- [Your private key] -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- [Your certificate] -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- [Intermidate#1 certificate] -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- [Intermidate#2 certificate] -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- [Root certificate] -----END CERTIFICATE-----

awk 1 ORS='\\n' ~/your_path/cert.pem

复制字符串

并粘贴docker-compose.yml如下:

proxy: image: tutum/haproxy ports: - "80:80" - "443:443" environment: - "DEFAULT_SSL_CERT=-----BEGIN PRIVATE KEY-----\nMIIEvQIBADA......" links: - webapp

这对我来说是工作。

答案2

无论如何,我设法弄清楚了这个问题。问题出在我.pem文件中用于各种证书的分隔符上。

分隔符必须准确-----BEGIN/END CERTIFICATE------ 没有“INTERMEDIATE”或“ROOT”或任何此类符号。

此外,HAProxy 的工作.pem包括我的链中的所有中间证书和根证书 - 这似乎是让它们全部获取的唯一方法。

答案3

我遇到过类似的问题,客户端身份验证应该根据中间证书进行验证。有效的设置:

bind *:11029 ssl crt server.pem ca-file client_trusted.pem ca-verify-file client_trusted.chains.pem verify required

关键点如下:

  • ca-file包含 API 网关验证客户端身份验证所需的所有中间证书
  • ca-verify-file包含以下证书的完整链:ca-file

相关内容