HAProxy - cadeia ca do cliente ssl não pode ser verificada

2

Situação:

Eu quero que isso funcione: solicitações vêm de clientes e vai para haproxy através da porta 443 (ssl) e, em seguida, ele deve ir para backend na porta 80.

Eu tenho certificado de servidor dado por ca médio (ca1), certificado ca1 e certificado de cliente. Mas eu não encontrei solução para solicitar certificado de servidor correto da autoridade de certificação do Windows para o servidor haproxy (Ubuntu). pode ser causa de modelos. Eu solicitei o certificado do servidor Windows e copiei para o haproxy.

E O PROBLEMA ESTÁ O log HAProxy tem esse erro "A cadeia ca do cliente SSL não pode ser verificada"

config haproxy:

frontend https_frontend

bind 192.168.14.167:443 ssl crt /etc/haproxy/cert/request/server.pem ca-file /etc/haproxy/cert/request/ca1-certificate.pem verify optional crt-ignore-err all no-sslv3

mode http

log /dev/log local7

option httplog

use_backend web_server_1 if { ssl_fc_has_crt }

default_backend web_server_2

backend web_server_1

mode http

option httplog

server w7 192.168.11.109:80 check

backend web_server_2

mode http

option httplog

server xp 192.168.13.205:80 check

este esquema não funciona.

informações adicionais: log do winXP, onde eu corri opennssl

C: \ OpenSSL-Win32 \ bin > openssl s_client -connect haproxy2: 443 -cert client.pem -CAfile  ca1-certificate.pem -state -showcerts

316: erro: 14094418: rotinas SSL: SSL3_READ_BYTES: alerta tlsv1 desconhecido ca:. \ ssl \ s3_pkt.c: 1275: número de alerta SSL 48

316: erro: 140790E5: rotinas SSL: SSL23_WRITE: falha de handshake SSL:. \ ssl \ s23_lib.c: 184: ... cer info ... Verifique o código de retorno: 20 (não é possível obter o certificado do emissor local)

(desculpe pelo meu inglês, se for ruim) Eu li muitos posts sobre isso, mas não encontrei solução.

    
por legeech 26.09.2014 / 13:51

1 resposta

2

Os arquivos server.pem e client.pem devem ter 3 seções e devem ficar assim:

-----BEGIN RSA PRIVATE KEY-----
<lots of base64 encoded data>
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<lots of base64 encoded data>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<lots of base64 encoded data>
-----END CERTIFICATE-----

A chave privada pode não ser RSA, mas deve ser a primeira. O primeiro certificado é o certificado do servidor assinado. O segundo certificado deve ser o certificado de CA. Você pode copiar e colar cada seção usando um editor de texto. Para verificar seu certificado, execute isto.

$ openssl verify -CAfile ca1-certificate.pem server.pem
server.pem: OK
    
por 07.02.2015 / 01:35