Konfigurieren Sie mehrere SSL-Zertifikate in Haproxy

28

Meine Haproxy-Instanz bedient 2 Domänen (hauptsächlich, um XSS auf der Hauptseite zu vermeiden).

Die Regeln sehen ungefähr so ​​aus

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

Jetzt wird SSL /etc/ssl/haproxy.pemals Standardzertifikat verwendet. Dies ist das Zertifikat für example.comund nicht example.io.

Wie kann ich Zertifikate für mehrere Domainnamen angeben?

Erik Aigner
quelle

Antworten:

60

Sie können alle Ihre Zertifikate beispielsweise in Dateien verketten haproxy1.pemund haproxy2.pemSie können ein Verzeichnis angeben, das alle Ihre PEM-Dateien enthält.

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

Wie in den Haproxy-Dokumenten

Verwenden Sie dann in der Konfiguration etwa Folgendes:

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

Lesen Sie mehr über SNI

Denken Sie daran, dass sich die SSL-Unterstützung in der Entwicklungsphase für Haproxy befindet und anscheinend erhebliche Leistungseinbußen aufweist.

In diesem Thread werden andere Lösungen erörtert: https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites

Hoffe das hilft.

Rico
quelle
Ist die Zertifikats- / Schlüsselreihenfolge beim Verketten wichtig?
Erik Aigner
Ich denke nicht, dass es wichtig sein sollte, wenn Sie zum Beispiel ein Verzeichnis angeben, ist die Reihenfolge beliebig. Ich würde sicherstellen, dass Sie den passenden Schlüssel einschließen, wenn Sie ein Zertifikat einschließen.
Rico
Ich habe es so eingerichtet, wie Sie es vorgeschlagen haben, aber haproxy verwendet weiterhin das erste Zertifikat für jede Domain :(
Erik Aigner,
Auch crt-listmit dem gleichen Ergebnis versucht
Erik Aigner
1
Aaaah ja! Das hat den Trick gemacht!
Erik Aigner
9

Es ist nicht mehr erforderlich, eine Liste von Zertifikaten einzugeben oder anzugeben. Geben Sie einfach einen Ordner an:

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

Hinweis: Stellen Sie sicher, dass der Ordner nicht leer ist und gültige PEM-Dateien vorhanden sind. Andernfalls wird HAProxy nicht ausgeführt.

Tim
quelle