Định cấu hình nhiều chứng chỉ SSL trong Haproxy


28

Ví dụ haproxy của tôi phục vụ 2 tên miền (chủ yếu là để tránh XSS trên trang web chính).

Các quy tắc trông giống như thế này

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

Bây giờ SSL sử dụng /etc/ssl/haproxy.pemlàm chứng chỉ mặc định, là chứng chỉ cho example.comvà không example.io.

Làm cách nào tôi có thể chỉ định certs cho nhiều tên miền?

Câu trả lời:


60

Bạn có thể ghép tất cả các chứng chỉ của bạn thành các tệp nói haproxy1.pemhaproxy2.pemhoặc bạn có thể chỉ định một thư mục chứa tất cả các tệp pem của bạn.

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

Theo tài liệu haproxy

Sau đó, trên cấu hình sử dụng một cái gì đó như thế này:

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

Tìm hiểu thêm về SNI

Hãy nhớ rằng hỗ trợ SSL đang trong giai đoạn phát triển cho haproxy và cũng có vẻ như nó có hiệu suất đáng kể.

Có các giải pháp khác được nói đến trong chủ đề này: https://stackoverflow.com/questions/10684484/haproxy-with-multipl-https-sites

Hi vọng điêu nay co ich.


Là thứ tự cert / key quan trọng khi nối?
Erik Aigner

Tôi không nghĩ nó quan trọng, ví dụ nếu bạn chỉ định một thư mục thì thứ tự là tùy ý. Tôi sẽ đảm bảo rằng nếu bạn bao gồm một chứng chỉ thì bạn bao gồm khóa khớp.
Rico

Tôi thiết lập nó theo cách bạn đề xuất, nhưng haproxy chỉ tiếp tục sử dụng chứng chỉ đầu tiên cho mọi miền :(
Erik Aigner

Cũng đã thử crt-listvới kết quả tương tự
Erik Aigner

1
Vâng, vâng! Điều đó đã lừa
Erik Aigner

9

Không cần phải nối hoặc chỉ định một danh sách các chứng chỉ nữa, chỉ cần chỉ định một thư mục:

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

Lưu ý: đảm bảo thư mục không trống và có tệp PEM hợp lệ, nếu không HAProxy sẽ không chạy.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.