鉴于 Heartbleed 漏洞,我请求重新颁发 GeoTrust 证书。我们正在启用HAProxy 1.5-dev22
OpenSSL。我已在所有受影响的实例上更新了 OpenSSL。
HAProxy 所需的 PEM 是证书、中间证书和私钥的连接版本:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
我可以使用 OpenSSL 验证此 PEM:
$ openssl verify -CAfile my_app.pem my_app.pem
my_app.pem: OK
然后配置HAProxy:
...snip...
bind *:443 ssl crt /etc/ssl/certs/my_app.pem ca-file /etc/ssl/certs/my_app.pem
...snip...
然后启动 HAProxy
$ sudo service haproxy start
* Starting haproxy haproxy
[ALERT] 098/142005 (13287) : parsing [/etc/haproxy/haproxy.cfg:16] : 'bind *:443' : inconsistencies between private key and certificate loaded from PEM file '/etc/ssl/certs/my_app.pem'.
[ALERT] 098/142005 (13287) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 098/142005 (13287) : Proxy 'secure': no SSL certificate specified for bind '*:443' at [/etc/haproxy/haproxy.cfg:16] (use 'crt').
[ALERT] 098/142005 (13287) : Fatal errors found in configuration.
...fail!
我已经重新发行了两次现在和两次 OpenSSL 都可以验证 PEM。但是,HAProxy 似乎无法读取此 PEM。我还用以下代码重新编译了 HAProxy:最新来源但问题仍然存在。
如果我回到以前的 PEM, HAProxy启动无错误。
暂时不考虑 HAProxy,根据本网站,我可以验证证书/私钥是否匹配:
(openssl x509 -noout -modulus -in my_app.crt | openssl md5 ; openssl rsa -noout -modulus -in my_app.key | openssl md5) | uniq
当我从 GeoTrust 下载 CRT 后运行它时,输出是二单独的值。根据该网站,如果它们匹配,则仅返回一个哈希值。
答案1
哇。我忽略了一个细节,那就是我们通过经销商(Namecheap)购买/重新颁发证书。我曾请求重新颁发证书3次今天,我以为我做了一些奇怪的事情。我打电话给 GeoTrust 询问我的请求。电话里的那个人检查了我发送的所有 3 个 CSR,然后这 3 个文件都与我今天发送的 CSR 文件不同。他建议我们尝试直接通过 GeoTrust 重新发布。果然,它成功了,模数检查返回一个值并匹配!然后我从 CRT/Intermediate CA CRT/Private Key 生成了新的 PEM,HAProxy 现在启动时没有任何问题!
他认为这可能是 Namecheap 从我们帐户的先前实例发送了错误的 CSR 的问题(他以前见过这种情况)。