Il problema sembra dipendere in gran parte dalla versione. Su Ubuntu 14.04 LTS il nginx predefinito è un 1.4 obsoleto. Innanzitutto è necessario installare una versione basata su PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
mostra come farlo con:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
dovresti finire con:
nginx -v
nginx version: nginx/1.8.0
La configurazione da @ xatr0z risponde https://serverfault.com/a/636455/162693 che punta a http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
non funziona:
proposta non operativa
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;
}
}
non funziona con la versione 1.8.0. Probabilmente è inteso solo come suggerimento e non può essere utilizzato come file di configurazione in quanto tale o dipende da un'altra versione.
Sto testando con un server back-end A basato su apache2 con SSL e certificati client autofirmati abilitati. Le impostazioni SSLO di configurazione di Apache sono impostate su:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
Ciò semplifica il debug della situazione poiché uno script phpinfo () sul lato backend mostrerà le informazioni sul lato server e client.
Per verificarlo ho usato:
https: // backend / test / phpinfo
con il certificato SSL installato nel browser e ottengo sezioni come: SSL_SERVER_S_DN_CN per il certificato del server e SSL_CLIENT_S_DN_CN per il certificato client.
Come primo avvio ho usato (compilare le parti tra parentesi) per configurare nginx sul server frontend 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;
}
}
decomprimere la parte specifica del certificato client SSL solo per verificare che il proxy inverso stesso funzioni.
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
Ora http: // frontend: 8080 / test / phpinfo.php funziona
SSL_SERVER_S_DN_CN per il certificato del server viene visualizzato e SSL_CLIENT_S_DN_CN per il certificato client non viene (ancora) visualizzato
Ora dopo il commento:
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;
}
}
e controllo / riavvio
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 funziona e
SSL_SERVER_S_DN_CN per il certificato del server viene visualizzato e SSL_CLIENT_S_DN_CN per il certificato del client viene visualizzato
così ora abbiamo fatto funzionare le cose come richiesto.
Si prega di notare bug https://trac.nginx.org/nginx/ticket/872#ticket