HAProxy 和中间 SSL 证书问题

Sam*_*m K 6 ubuntu ssl haproxy amazon-web-services

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

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

  1. 将haproxy升级到最新的1.5.3
  2. 创建了一个包含所有证书(站点、中间、w/ 和 w/out 根)的串联“.pem”文件
  3. 向 haproxy.cfg 文件中的“bind”行添加了一个明确的“ca-file”属性。

“.pem”文件使用 openssl 验证是否正常。各种中间证书和根证书已安装并显示在 /etc/ssl/certs 中。但是支票仍然带有不完整的链条。

任何人都可以建议我们可以检查的其他任何内容或我们可以尝试解决此问题的任何其他更改吗?

提前谢谢了...

更新:来自 haproxy.cfg(我相信)的唯一相关行是这个:

bind *:443 ssl crt /etc/ssl/domainaname.com.pem
Run Code Online (Sandbox Code Playgroud)

更新 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
Run Code Online (Sandbox Code Playgroud)

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

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-----
Run Code Online (Sandbox Code Playgroud)

小智 7

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

-----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

这对我有用。


Sam*_*m K 1

FWIW,我设法弄清楚了这一点。问题是我在文件中用于各种证书的分隔符.pem

分隔符必须准确无误-----BEGIN/END CERTIFICATE------ 不能是“INTERMEDIATE”或“ROOT”或其中任何一个。

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