Konfigurasikan beberapa sertifikat SSL di Haproxy

28

Contoh haproxy saya melayani 2 domain (kebanyakan untuk menghindari XSS di situs utama).

Aturannya terlihat seperti ini

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

Sekarang SSL menggunakan /etc/ssl/haproxy.pemsebagai sertifikat default, yang merupakan sertifikat untuk example.comdan bukan example.io.

Bagaimana saya bisa menentukan sertifikat untuk beberapa nama domain?

Erik Aigner
sumber

Jawaban:

60

Anda dapat menggabungkan semua sertifikat Anda menjadi file katakan haproxy1.pemdan haproxy2.pematau Anda dapat menentukan direktori yang berisi semua file pem Anda.

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

Sesuai dokumen haproxy

Kemudian pada konfigurasi gunakan sesuatu seperti ini:

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

Baca lebih lanjut tentang SNI

Ingatlah bahwa dukungan SSL sedang dalam tahap pengembangan untuk haproxy dan juga tampaknya memiliki kinerja yang luar biasa.

Ada solusi lain yang dibicarakan di utas ini: https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites

Semoga ini membantu.

Rico
sumber
Apakah cert / key order penting saat concatenating?
Erik Aigner
Saya tidak berpikir itu penting, misalnya jika Anda menentukan direktori pesanannya sewenang-wenang. Saya akan memastikan bahwa jika Anda menyertakan sertifikat maka Anda memasukkan kunci yang cocok.
Rico
Saya mengaturnya seperti yang Anda sarankan, tetapi haproxy terus menggunakan sertifikat pertama untuk setiap domain :(
Erik Aigner
Juga mencoba crt-listdengan hasil yang sama
Erik Aigner
1
Aaaah ya! Itu berhasil!
Erik Aigner
9

Tidak perlu menyatukan atau menentukan daftar sertifikat lagi, cukup tentukan folder:

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

Catatan: pastikan folder tidak kosong dan file PEM yang valid ada, jika tidak HAProxy tidak akan berjalan.

Tim
sumber