Leiten Sie SSL-Verkehr und Authentifizierungszertifikate über HAProxy weiter

Leiten Sie SSL-Verkehr und Authentifizierungszertifikate über HAProxy weiter

Ich habe ein Nginx von meinem Client, wo ich erfolgreich POSTEN kann mit:

curl -v --cacert ca.crt --cert client.crt --key client.key -POST https://nginx:8443/api/ -H 'Content-Type: application/json' -H 'cache-control: no-cache' [email protected]

Jetzt habe ich einen Haproxy vor Nginx installiert und versuche auf die gleiche Weise einen POST auszuführen, ohne Erfolg:

curl -v --cacert ca.crt --cert client.crt --key client.key -POST http://haproxy:8443/api/ -H 'Content-Type: application/json' -H 'cache-control: no-cache' [email protected]

Fehler:

 <center>The plain HTTP request was sent to HTTPS port</center>
 <hr><center>nginx</center>

Hier ist meine Haproxy-Konfiguration:

global
  log         127.0.0.1 local2
  chroot      /var/lib/haproxy
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  user        haproxy
  group       haproxy
  daemon
  stats socket /var/lib/haproxy/stats

defaults
  mode                    tcp
  log                     global
  option                  tcplog
  option                  dontlognull
  option http-server-close
  option forwardfor       except 127.0.0.0/8
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000

frontend  main *:8443
  acl url_static       path_beg       -i /static /images /javascript /stylesheets
  acl url_static       path_end       -i .jpg .gif .png .css .js
  use_backend static          if url_static
  default_backend             app

backend static
  balance     roundrobin
  server      static 127.0.0.1:8443 

backend app
  mode       tcp
  balance     roundrobin
  server  nginx nginx01:8443            

Ich möchte SSL-Verkehr über HAProxy weiterleiten und die Zertifikate zur Authentifizierung an nginx übergeben. Ich weiß, dass es keinen Sinn ergibt, zwei LBs zu haben, aber ich kann nginx und den API-Server dahinter nicht ändern, aber die Clients werden intern sein. Wie Sie an diesem Punkt sehen, kann ich nginx erreichen, aber haproxy übergibt die Zertifikate und Schlüssel aus der Anfrage nicht an das nginx-Backend. Übersehe ich etwas? Ist das etwas, das ich erreichen kann?

PS: Wenn ich im Backend „SSL Verify None“ einstelle, erhalte ich die Meldung „Es wurde kein erforderliches SSL-Zertifikat gesendet“. Wenn ich im Backend „Send-Proxy“ einstelle, erhalte ich von Nginx die Meldung „400 Bad Request“.

Antwort1

Sie müssen die SSL-Konfiguration zu Haproxy hinzufügen und einige Header festlegen, die an Nginx weitergeleitet werden.

# your other config from above
 
backend app
  mode       tcp
  balance     roundrobin
  server  nginx nginx01:8443 ssl ca-file <The ca from nginx backend>

Antwort2

Die implementierte Lösung war mit SS/TLS-Passthrough vonhttps://www.haproxy.com/documentation/haproxy/deployment-guides/tls-infrastructure/ Indem ich sowohl das Frontend als auch das Backend auf den TCP-Modus eingestellt habe, konnte ich die Zertifikate übergeben, Nginx validieren und die Authentifizierung durchführen.

verwandte Informationen