Solicitei a reemissão de um certificado GeoTrust à luz do bug Heartbleed. Estamos usando HAProxy 1.5-dev22
com o OpenSSL ativado. Atualizei o OpenSSL em todas as instâncias afetadas.
O PEM exigido pelo HAProxy é uma versão concatenada do certificado, dos certificados intermediários e da chave privada:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Eu posso validar este PEM com o OpenSSL:
$ openssl verify -CAfile my_app.pem my_app.pem
my_app.pem: OK
E, em seguida, configure o HAProxy:
...snip...
bind *:443 ssl crt /etc/ssl/certs/my_app.pem ca-file /etc/ssl/certs/my_app.pem
...snip...
E, em seguida, inicie o 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!
Eu fiz a reemissão duas vezes agora e em ambas as vezes o OpenSSL pode validar o PEM. No entanto, o HAProxy parece não conseguir ler este PEM. Eu também recompilei o HAProxy com a última fonte , mas o questões ainda persistem.
Se eu reverter para o PEM anterior , o HAProxy é iniciado sem erros .
Desconsiderando o HAProxy por um segundo, de acordo com este site , posso validar se um certificado Correspondência de chave privada:
(openssl x509 -noout -modulus -in my_app.crt | openssl md5 ; openssl rsa -noout -modulus -in my_app.key | openssl md5) | uniq
E quando eu o executo depois de baixar o CRT do GeoTrust, a saída é dois valores separados. De acordo com esse site, se eles correspondessem, somente um hash seria retornado.