Настройте несколько сертификатов SSL в Haproxy

28

Мой экземпляр haproxy обслуживает 2 домена (в основном, чтобы избежать XSS на основном сайте).

Правила выглядят примерно так

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 использует /etc/ssl/haproxy.pemв качестве сертификата по умолчанию, который является сертификатом для, example.comа не для example.io.

Как я могу указать сертификаты для нескольких доменных имен?

Эрик Айгнер
источник

Ответы:

60

Вы можете объединить все свои сертификаты в файлах сказать , haproxy1.pemи haproxy2.pemили вы можете указать каталог , содержащий все файлы PEM.

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

В соответствии с HAproxy документов

Затем в конфиге используйте что-то вроде этого:

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

Узнайте больше о SNI

Имейте в виду, что поддержка SSL находится в стадии разработки для haproxy, а также, что он, очевидно, имеет значительное снижение производительности.

В этой теме обсуждаются другие решения: /programming/10684484/haproxy-with-multiple-https-sites

Надеюсь это поможет.

Рико
источник
Важен ли порядок сертификатов / ключей при объединении?
Эрик Эйгнер
Я не думаю, что это должно иметь значение, например, если вы укажете каталог, порядок будет произвольным. Я хотел бы убедиться, что если вы включите сертификат, то вы включите соответствующий ключ.
Рико
Я настроил его так, как вы предлагали, но haproxy просто продолжает использовать первый сертификат для каждого домена :(
Эрик Эйгнер
Также пытался crt-listс тем же результатом
Эрик Aigner
1
Ааааа да! Это сделало трюк!
Эрик Эйгнер
9

Больше не нужно объединять или указывать список сертификатов, просто укажите папку:

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

Примечание: убедитесь, что папка не пуста и что имеются допустимые файлы PEM, иначе HAProxy не запустится.

Тим
источник