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:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
Sie sollten am Ende haben mit:
nginx -v
nginx version: nginx/1.8.0
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
backend {
server some-ip:443;
}
server {
listen 80;
location / {
proxy_ssl_certificate certs/client.crt;
proxy_ssl_certificate_key certs/client.key;
proxy_pass https://backend;
}
}
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:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
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:
server {
listen 8080;
server_name <frontend>;
location / {
proxy_buffering off;
proxy_pass https://<backend>;
#proxy_ssl_certificate certs/<SSL Client Certificate>.crt;
#proxy_ssl_certificate_key certs/<SSL Client Certificate>.key;
}
}
Deaktivieren des bestimmten Teils des SSL-Client-Zertifikats, um zu überprüfen, ob der Reverse-Proxy selbst funktioniert.
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
nginx stop/waiting
nginx start/running, process 8931
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:
server {
listen 8080;
server_name <frontend>;
location / {
proxy_buffering off;
proxy_pass https://<backend>;
proxy_ssl_certificate certs/<SSL Client Certificate>.crt;
proxy_ssl_certificate_key certs/<SSL Client Certificate>.key;
}
}
und Überprüfen / Neustarten
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
nginx stop/waiting
nginx start/running, process 8931
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