Configurar vários certificados SSL no Haproxy

28

Minha instância haproxy atende a 2 domínios (principalmente para evitar o XSS no site principal).

As regras são mais ou menos assim

bind :443 ssl crt /etc/ssl/haproxy.pem

acl is_static   hdr_end(Host) -i example.com
acl is_api      hdr_end(Host) -i api.example.com
acl is_files    hdr_end(Host) -i example.io

redirect scheme https if !{ ssl_fc } is_static is_api

Agora, o SSL usa /etc/ssl/haproxy.pemcomo o certificado padrão, que é o certificado para example.come não example.io.

Como posso especificar certificados para vários nomes de domínio?

Erik Aigner
fonte

Respostas:

60

Você pode concatenar todos os seus certificados em arquivos digamos haproxy1.peme haproxy2.pemou pode especificar um diretório contendo todos os seus arquivos pem.

cat cert1.pem key1.pem > haproxy1.pem 
cat cert2.pem key2.pem > haproxy2.pem

De acordo com os documentos haproxy

Em seguida, na configuração, use algo como isto:

defaults
  log 127.0.0.1 local0
  option tcplog

frontend ft_test
  mode http
  bind 0.0.0.0:443 ssl crt /certs/haproxy1.pem crt /certs/haproxy2.pem 
  use_backend bk_cert1 if { ssl_fc_sni my.example.com } # content switching based on SNI
  use_backend bk_cert2 if { ssl_fc_sni my.example.org } # content switching based on SNI

backend bk_cert1
  mode http
  server srv1 <ip-address2>:80

backend bk_cert2
  mode http
  server srv2 <ip-address3>:80

Leia mais sobre SNI

Lembre-se de que o suporte a SSL está no estágio de desenvolvimento para haproxy e também que aparentemente apresenta um desempenho considerável.

Existem outras soluções mencionadas neste tópico: /programming/10684484/haproxy-with-multiple-https-sites

Espero que isto ajude.

Rico
fonte
O pedido de certificado / chave é importante ao concatenar?
precisa
Eu não acho que isso importe, por exemplo, se você especificar um diretório, a ordem é arbitrária. Eu garantiria que, se você incluir um certificado, inclua a chave correspondente.
12133 Rico
Eu configurei da maneira que você sugeriu, mas o haproxy continua usando o primeiro certificado para todos os domínios :(
Erik Aigner
Também tentei crt-listcom o mesmo resultado
Erik Aigner 12/12
1
Aaaah sim! Isso fez o truque!
precisa
9

Não é mais necessário concat ou especificar uma lista de certificados, basta especificar uma pasta:

frontend public
    bind *:443 ssl crt /etc/haproxy/ssl/

Nota: verifique se a pasta não está vazia e se há arquivos PEM válidos, caso contrário, o HAProxy não será executado.

Tim
fonte