El problema parece ser en gran medida dependiente de la versión. En Ubuntu 14.04 LTS, el nginx predeterminado es un 1.4 obsoleto. Primero necesitas instalar una versión basada en PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
muestra cómo hacer esto con:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
deberías terminar con:
nginx -v
nginx version: nginx/1.8.0
La configuración de @ xatr0z responde https://serverfault.com/a/636455/162693 que apunta a http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
no funciona:
propuesta que no funciona
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;
}
}
no funciona fuera de la caja con 1.8.0. Probablemente sea solo una pista y no se use como un archivo de configuración como tal o dependa de otra versión.
Estoy probando con un servidor backend A basado en apache2 con SSL y certificados de cliente autofirmados habilitados. Las SSLOptions de configuración de Apache están configuradas en:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
Esto facilita la depuración de la situación, ya que un script phpinfo () en el lado del servidor mostrará la información del lado del servidor y del cliente.
Para verificar esto, utilicé:
https: // backend / test / phpinfo
con el certificado SSL instalado en el navegador y obtengo secciones como: SSL_SERVER_S_DN_CN para el certificado del servidor y SSL_CLIENT_S_DN_CN para el certificado del cliente.
Como primer inicio, utilicé (complete las partes entre paréntesis) para configurar nginx en el servidor 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;
}
}
no comentar la parte específica del Certificado de cliente SSL solo para verificar que el proxy inverso funcione.
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
Ahora http: // frontend: 8080 / test / phpinfo.php funciona.
Se muestra SSL_SERVER_S_DN_CN para el certificado del servidor y SSL_CLIENT_S_DN_CN para el certificado del cliente (todavía) no se muestra
Ahora después de descomentar:
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;
}
}
y comprobando / reiniciando
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 funciona y
SSL_SERVER_S_DN_CN para el certificado de servidor se muestra y SSL_CLIENT_S_DN_CN del certificado de cliente se visualiza
así que ahora tenemos las cosas funcionando según lo solicitado.
Tenga en cuenta el error https://trac.nginx.org/nginx/ticket/872#ticket