Configurar múltiples certificados SSL en Haproxy

28

Mi instancia de haproxy sirve 2 dominios (principalmente para evitar XSS en el sitio principal).

Las reglas se parecen a esto

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

Ahora SSL utiliza /etc/ssl/haproxy.pemcomo el certificado predeterminado, que es el certificado para example.comy no example.io.

¿Cómo puedo especificar certificados para múltiples nombres de dominio?

Erik Aigner
fuente

Respuestas:

60

Puede concatenar todos sus certificados en archivos dicen haproxy1.pemy haproxy2.pemo puede especificar un directorio que contiene todos los archivos PEM.

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

Según los documentos de haproxy

Luego, en la configuración, use algo como esto:

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

Leer más sobre SNI

Tenga en cuenta que el soporte SSL está en fase de desarrollo para haproxy y también que aparentemente tiene un impacto considerable en el rendimiento.

Hay otras soluciones mencionadas en este hilo: https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites

Espero que esto ayude.

Rico
fuente
¿Es importante el orden de certificado / clave al concatenar?
Erik Aigner
No creo que deba importar, por ejemplo, si especifica un directorio, el orden es arbitrario. Me aseguraría de que si incluye un certificado, incluya la clave correspondiente.
Rico
Lo configuré de la manera que sugirió, pero haproxy sigue usando el primer certificado para cada dominio :(
Erik Aigner
También probé crt-listcon el mismo resultado
Erik Aigner,
1
Aaaah si! Eso hizo el truco!
Erik Aigner
9

Ya no es necesario concat o especificar una lista de certificados, solo especifique una carpeta:

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

Nota: asegúrese de que la carpeta no esté vacía y que haya archivos PEM válidos; de lo contrario, HAProxy no se ejecutará.

Tim
fuente