web-dev-qa-db-fra.com

Configurer plusieurs certificats SSL dans Haproxy

Mon instance haproxy dessert 2 domaines (principalement pour éviter XSS sur le site principal).

Les règles ressemblent à ceci

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

SSL utilise désormais /etc/ssl/haproxy.pem comme certificat par défaut, qui est le certificat pour example.com et pas example.io.

Comment puis-je spécifier des certificats pour plusieurs noms de domaine?

30
Erik Aigner

Vous pouvez concaténer tous vos certificats dans des fichiers, par exemple haproxy1.pem et haproxy2.pem ou vous pouvez spécifier un répertoire contenant tous vos fichiers pem.

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

Selon les documents haproxy

Ensuite, dans la configuration, utilisez quelque chose comme ceci:

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

En savoir plus sur SNI

Gardez à l'esprit que le support SSL est en cours de développement pour haproxy et qu'il a apparemment des performances considérables.

Il existe d'autres solutions abordées dans ce fil: https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites

J'espère que cela t'aides.

61
Rico

Plus besoin de concaténer ou de spécifier une liste de certificats, il suffit de spécifier un dossier:

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

Remarque: assurez-vous que le dossier n'est pas vide et que des fichiers PEM valides sont présents, sinon HAProxy ne s'exécutera pas.

9
Tim

vous pourriez peut-être vérifier cela aussi:

/etc/ssl/private/crt-list.txt:

/etc/ssl/private/mydomain.pem
/etc/ssl/private/myotherdomain.pem

haproxy.cfg:

frontend https-in:
  bind *:443 ssl crt-list /etc/ssl/private/crt-list.txt

réfs: https://github.com/msimerson/Mail-Toaster-6/wiki/How-to-for-Multiple-Domain-SSL-Certificates-with-HaProxy

3
zx1986