Ich habe zwei Server, beide haben Nginx. Server A hört 443 ab und ist für die Authentifizierung mit einem Client-SSL-Zertifikat konfiguriert.
Server B verfügt über einen internen Prozess, der über nginx mit Server A kommunizieren muss.
Ich möchte Nginx auf Server B konfigurieren, das 8080 (keine Verschlüsselung, da alles lokale Kommunikation ist) und proxy_pass an ServerA: 443 abhört.
Die Frage ist, wie ich ein Client-Zertifikat injiziere. Ich habe keine proxy_xxxx-Funktion gefunden, die das tun würde.
Ich weiß, wie man mit socat ein Äquivalent dazu macht, aber meine Anforderung ist, Nginx zu verwenden.
nginx
proxy
ssl-certificate
Bastien974
quelle
quelle
### Section 2: Unconverted directives ###
# Flag Description
# [S] Unsupported directives.
# In conf file: dummy.conf
# Line 32: SSLProxyMachineCertificateFile /path/to/cert (mod_ssl.c)
# [S] SSLProxyMachineCertificateFile: No relevant directive in Nginx.
Antworten:
Ist es ausreichend, die Client-Zertifikatdetails durchlaufen zu lassen?
Du kannst hinzufügen
zu Ihrer Konfiguration und dann stehen die Zertifikatinformationen Server B über einen X-SSL-Cert-Header zur Verfügung.
quelle
\t
mit\n
diesem Header einmal readed.$ssl_client_cert
Variable veraltet. Die$ssl_client_escaped_cert
Variable sollte stattdessen verwendet werden.Anscheinend ist dies das, wonach Sie suchen: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Verfügbar seit Version 1.7.8.
quelle
Das Problem scheint weitgehend versionabhängig zu sein. Unter Ubuntu 14.04 LTS ist der Standard-Nginx ein veralteter 1.4. Zuerst müssen Sie eine PPA-basierte Version installieren
https://leftshift.io/upgrade-nginx-to-the-latest-version-on-ubuntu-servers
zeigt, wie man das macht mit:
Sie sollten am Ende haben mit:
Die Konfiguration von @ xatr0z Antwort /server//a/636455/162693, die auf http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate verweist, funktioniert nicht:
nicht funktionierender Vorschlag
funktioniert nicht sofort mit 1.8.0. Es ist wahrscheinlich nur als Hinweis gedacht und darf nicht als Konfigurationsdatei als solche verwendet werden oder hängt von einer anderen Version ab.
Ich teste mit einem Apache2-basierten Backend-Server A mit aktiviertem SSL und selbstsignierten Client-Zertifikaten. Die Apache-Konfigurations-SSLOptions sind wie folgt festgelegt:
Dies erleichtert das Debuggen der Situation, da ein phpinfo () - Skript auf der Backend-Seite die Server- und Client-Seite-Informationen anzeigt.
Um dies zu überprüfen, habe ich verwendet:
https: // backend / test / phpinfo
Wenn das SSL-Zertifikat im Browser installiert ist, erhalte ich folgende Abschnitte: SSL_SERVER_S_DN_CN für das Serverzertifikat und SSL_CLIENT_S_DN_CN für das Clientzertifikat.
Als ersten Start habe ich (füllen Sie die Teile in Klammern aus) verwendet, um nginx auf dem Frontend-Server B zu konfigurieren:
Deaktivieren des bestimmten Teils des SSL-Client-Zertifikats, um zu überprüfen, ob der Reverse-Proxy selbst funktioniert.
Jetzt funktioniert http: // frontend: 8080 / test / phpinfo.php
SSL_SERVER_S_DN_CN für das Serverzertifikat wird angezeigt und SSL_CLIENT_S_DN_CN für das Clientzertifikat wird (noch) nicht angezeigt
Jetzt nach dem Kommentieren:
und Überprüfen / Neustarten
http: // frontend: 8080 / test / phpinfo.php funktioniert und
SSL_SERVER_S_DN_CN für das Serverzertifikat wird angezeigt und SSL_CLIENT_S_DN_CN für das Clientzertifikat wird angezeigt
Jetzt funktionieren die Dinge wie gewünscht.
Bitte beachten Sie den Fehler https://trac.nginx.org/nginx/ticket/872#ticket
quelle
Es gibt einen ziemlich ordentlichen Artikel über Nginx- und SSL-Client-Zertifikate. Es verwendet PHP mit FastCGI als Beispiel, aber ich denke, Sie können dies an ein Reverse-Proxy-Setup anpassen:
Quelle http://nategood.com/client-side-certificate-authentication-in-ngi
quelle
Es scheint, dass dieses SEnginx-Modul genau das ist, wonach Sie suchen: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
quelle