A questão parece ser amplamente dependente da versão. No Ubuntu 14.04 LTS, o nginx padrão é um 1.4 desatualizado. Primeiro você precisa instalar uma versão baseada em PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
mostra como fazer isso com:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
você deve terminar com:
nginx -v
nginx version: nginx/1.8.0
A configuração da resposta @ xatr0z https://serverfault.com/a/636455/162693 apontando para http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
não funciona:
proposta não útil
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;
}
}
não funciona imediatamente com 1.8.0. Provavelmente é apenas uma sugestão e não deve ser usado como um arquivo de configuração como tal ou depende de outra versão.
Estou testando com um servidor back-end A baseado em apache2 com SSL e certificados de cliente autoassinado ativados. As SSLOptions de configuração do Apache estão definidas para:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
Isso facilita a depuração da situação, pois um script phpinfo () no lado de back-end mostra as informações do lado do servidor e do cliente.
Para verificar isso, usei:
https: // back-end / test / phpinfo
com o certificado SSL instalado no navegador e recebo seções como: SSL_SERVER_S_DN_CN para o certificado do servidor e SSL_CLIENT_S_DN_CN para o certificado do cliente.
Como primeira inicialização, usei (preencha as partes entre colchetes) para configurar o nginx no servidor front-end 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;
}
}
desassociando a parte específica do Certificado de Cliente SSL apenas para verificar se o próprio proxy reverso funciona.
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
Agora, o http: // frontend: 8080 / test / phpinfo.php funciona
SSL_SERVER_S_DN_CN para o certificado do servidor é exibido e SSL_CLIENT_S_DN_CN para o certificado do cliente (ainda) não é exibido
Agora, depois 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;
}
}
e verificando / 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 e
SSL_SERVER_S_DN_CN para o certificado do servidor é exibido e SSL_CLIENT_S_DN_CN para o certificado do cliente é exibido
então agora temos as coisas funcionando conforme solicitado.
Observe o bug https://trac.nginx.org/nginx/ticket/872#ticket