
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.