鉴于 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 后运行它时,输出是两个单独的值。根据该站点,如果它们匹配,则只会返回一个哈希值。
哇。我省略的一个细节是我们通过经销商(Namecheap)购买/重新颁发我们的证书。我今天要求重新颁发证书3 次,因为我认为我在做一些时髦的事情。我打电话给 GeoTrust 并询问了我的要求。电话那头检查了我发送的所有 3 个 CSR,所有 3 个都与我今天发送的 CSR 文件不同。他建议我们尝试直接通过 GeoTrust 重新发行。果然,它起作用了,模数检查返回一个值并匹配!然后我从 CRT/Intermediate CA CRT/Private Key 生成了新的 PEM,HAProxy 现在启动没有任何问题!
他认为这可能是一个问题,Namecheap 从我们帐户的先前实例中发送了不正确的 CSR(他之前已经看到过)。