Wydaje się, że problem zależy w dużej mierze od wersji. W Ubuntu 14.04 LTS domyślnym nginx jest przestarzały 1.4. Najpierw musisz zainstalować wersję opartą na PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
pokazuje, jak to zrobić za pomocą:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
powinieneś skończyć z:
nginx -v
nginx version: nginx/1.8.0
Konfiguracja z @ xatr0z odpowiedź https://serverfault.com/a/636455/162693 wskazująca na http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
nie działa:
niedziałająca propozycja
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;
}
}
nie działa od razu z wersją 1.8.0. Prawdopodobnie jest to tylko wskazówka i nie może być używany jako plik konfiguracyjny jako taki lub zależy od innej wersji.
Testuję z serwerem zaplecza A opartym na Apache2 z włączonym SSL i samopodpisanymi certyfikatami klienta. Konfiguracje SSLOptions konfiguracji Apache są ustawione na:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
Ułatwia to debugowanie sytuacji, ponieważ skrypt phpinfo () po stronie zaplecza wyświetla informacje po stronie serwera i klienta.
Aby to sprawdzić, użyłem:
https: // backend / test / phpinfo
z certyfikatem SSL zainstalowanym w przeglądarce i otrzymuję sekcje: SSL_SERVER_S_DN_CN dla certyfikatu serwera i SSL_CLIENT_S_DN_CN dla certyfikatu klienta.
Jako pierwszy start użyłem (wypełnij części w nawiasach) do skonfigurowania nginx na serwerze frontonu B:
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;
}
}
odkomentowanie określonej części certyfikatu klienta SSL tylko po to, aby sprawdzić, czy działa samo odwrotne proxy.
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
Teraz http: // frontend: 8080 / test / phpinfo.php działa
SSL_SERVER_S_DN_CN dla certyfikatu serwera jest wyświetlany, a SSL_CLIENT_S_DN_CN dla certyfikatu klienta nie jest (jeszcze) wyświetlany
Teraz po odkomentowaniu:
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;
}
}
i sprawdzanie / restartowanie
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 działa i
SSL_SERVER_S_DN_CN dla certyfikatu serwera jest wyświetlana i SSL_CLIENT_S_DN_CN dla certyfikatu klienta jest wyświetlana
więc teraz mamy rzeczy działające zgodnie z wymaganiami.
Zwróć uwagę na błąd https://trac.nginx.org/nginx/ticket/872#ticket