我有一台 CentOS 7 服务器,前端是 HAProxy 1.6,后端是 Apache 2.4。
我正在尝试在 HAProxy 中加载 SSL 证书,但是它需要一个.pem
文件。
我从Comodo获得了以下文件:
- 卡本德
- 证书.crt
- 证书密钥
- 证书.p7b
并尝试合并certificate.crt
和certificate.key
:
cat certificate.crt certificate.key > haproxy1.pem
到目前为止,此方法有效,但是会出现常规Chain Issues
错误。还尝试将cabundle.crt
、certificate.crt
和合并certificate.key
为一个文件。但这会在 HAProxy 日志中.pem
显示。SSL handshake failure
如何让它正常工作?
文件内容
卡本德
-----BEGIN CERTIFICATE-----
hash
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
hash
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
hash
-----END CERTIFICATE-----
证书.crt
-----BEGIN CERTIFICATE-----
hash
-----END CERTIFICATE-----
证书密钥
-----BEGIN PRIVATE KEY-----
hash
-----END PRIVATE KEY-----
haproxy配置文件
frontend public
bind *:80
bind *:443 ssl crt /etc/ssl/certs/private/
答案1
通过执行以下操作解决了此问题:
如果我提供密码,我的 ISP 会给我一个解密的私钥,但这与我自己使用 openssl 解密时得到的结果不同。
因此我下载了加密版本并使用密码自行解密:
openssl rsa -in certificate.key -out rsa.key
-----BEGIN RSA PRIVATE KEY-----
这给了我一个以而不是-----BEGIN PRIVATE KEY-----
来自 ISP 开头的文件,并且具有不同的 base64 内容。
此外,显然其中cabundle.crt
包含一个根证书(第一个块),这是不必要的,所以我删除了这个。
接下来,我将这些文件合并在一起:
cat certificate.crt cabundle.crt rsa.key > domain.com.pem
还可以直接在文件中指定它haproxy.cfg
,以防止加载错误的文件:
frontend public
bind *:80
bind *:443 ssl crt /etc/haproxy/ssl/domain.com.pem
我仍然得到一个连锁问题:顺序错误SSLLabs 发出了警告,但是它仍然在运行,所以它并没有真正困扰我。