Налаштуйте кілька сертифікатів 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.

Як я можу вказати certs для кількох доменних імен?

Відповіді:


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

Сподіваюся, це допомагає.


Чи важливий порядок cert / key при об'єднанні?
Ерік Айгнер

Я не думаю, що це має мати значення, наприклад, якщо ви вказуєте каталог, порядок є довільним. Я би переконався, що якщо ви включите cert, то ви включите відповідний ключ.
Ріко

Я налаштував це так, як ви запропонували, але haproxy просто продовжує використовувати перший сертифікат для кожного домену :(
Erik Aigner

Також спробував crt-listз тим же результатом
Ерік Айгнер

1
Ааах так! Це зробив трюк!
Ерік Айгнер

9

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

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

Примітка: переконайтеся, що папка не порожня, і присутні дійсні файли PEM, інакше HAProxy не запуститься.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.