O problema 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
link
mostra como fazer isso com:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
você deve acabar com:
nginx -v
nginx version: nginx/1.8.0
A configuração de @ xatr0z responde link apontando para link
não funciona:
proposta não funcional
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 fora da caixa com 1.8.0. Provavelmente é apenas uma dica e não deve ser usado como arquivo de configuração como tal ou depende de outra versão.
Estou testando com um servidor backend baseado em apache2, com SSL e certificados de cliente autoassinados habilitados.
As configurações SSLOptions do Apache estão definidas para:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
Isso facilita a depuração da situação, pois um script phpinfo () no backend mostrará as informações do servidor e do cliente.
Para verificar isso eu usei:
link
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 primeiro começo eu usei (preencha as partes entre parênteses) para configurar o nginx no 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;
}
}
descomentando a parte específica do SSL Client Certificate 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 link funciona
O
SSL_SERVER_S_DN_CN para o certificado do servidor é exibido
e
SSL_CLIENT_S_DN_CN para o certificado de cliente não é (ainda) 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
link funciona e
SSL_SERVER_S_DN_CN para o certificado do servidor é exibido
e
SSL_CLIENT_S_DN_CN para o certificado de cliente é exibido
agora temos as coisas funcionando conforme solicitado.
Por favor, observe o bug link