Skonfiguruj wiele certyfikatów SSL w Haproxy

28

Moja instancja haproxy obsługuje 2 domeny (głównie w celu uniknięcia XSS na głównej stronie).

Zasady wyglądają mniej więcej tak

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

Teraz SSL używa /etc/ssl/haproxy.pemjako domyślnego certyfikatu, który jest certyfikatem, example.coma nie certyfikatem example.io.

Jak mogę określić certyfikaty dla wielu nazw domen?

Erik Aigner
źródło

Odpowiedzi:

60

Możesz połączyć wszystkie swoje certyfikaty w pliki, powiedz haproxy1.pemi haproxy2.pemlub możesz określić katalog zawierający wszystkie pliki pem.

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

Zgodnie z dokumentami haproxy

Następnie w konfiguracji użyj czegoś takiego:

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

Przeczytaj więcej o SNI

Należy pamiętać, że obsługa protokołu SSL jest w fazie projektowania dla haproxy, a także, że najwyraźniej ma znaczny spadek wydajności.

W tym wątku omówiono inne rozwiązania: /programming/10684484/haproxy-with-multiple-https-sites

Mam nadzieję że to pomoże.

Rico
źródło
Czy kolejność certyfikatu / klucza jest ważna podczas konkatenacji?
Erik Aigner,
Nie sądzę, że powinno to mieć znaczenie, na przykład jeśli podasz katalog, kolejność jest dowolna. Upewniam się, że jeśli podasz certyfikat, to dołącz odpowiedni klucz.
Rico,
I ustawić go tak, jak sugerowane, ale haproxy tylko trzyma przy użyciu pierwszego cert dla każdej domeny :(
Erik Aigner
Próbowałem także crt-listz tym samym rezultatem
Erik Aigner,
1
O tak! To załatwiło sprawę!
Erik Aigner,
9

Nie musisz już konkatować ani określać listy certyfikatów, po prostu określ folder:

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

Uwaga: upewnij się, że folder nie jest pusty i że obecne są prawidłowe pliki PEM, w przeciwnym razie HAProxy nie uruchomi się.

Tim
źródło