Configurer plusieurs certificats SSL dans Haproxy

28

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.pemle certificat par défaut, qui est le certificat pour example.comet non example.io.

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

Erik Aigner
la source

Réponses:

60

Vous pouvez concaténer tous vos certificats en fichiers disons haproxy1.pemet haproxy2.pemou 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 un impact considérable sur les performances.

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

J'espère que cela t'aides.

Rico
la source
L'ordre de certification / clé est-il important lors de la concaténation?
Erik Aigner
Je ne pense pas que cela devrait avoir d'importance, par exemple si vous spécifiez un répertoire, l'ordre est arbitraire. Je m'assurerais que si vous incluez un certificat, vous incluez la clé correspondante.
Rico
Je l'ai configuré comme vous l'avez suggéré, mais haproxy continue d'utiliser le premier certificat pour chaque domaine :(
Erik Aigner
Également essayé crt-listavec le même résultat
Erik Aigner
1
Aaaah oui! Ça a fait l'affaire!
Erik Aigner
9

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.

Tim
la source