Eu tenho dois servidores, ambos têm nginx. O servidor A está escutando 443 e está configurado para se autenticar com um certificado SSL do cliente.
O servidor B possui um processo interno que precisa se comunicar com o servidor A através do nginx.
Gostaria de configurar o Nginx no servidor B que ouvirá 8080 (sem criptografia, pois é toda a comunicação local) e proxy_pass para o ServerA: 443.
A questão é como injetar um certificado de cliente? Não encontrei nenhuma função proxy_xxxx que fizesse isso.
Eu sei como fazer um equivalente a isso com o socat, mas meu requisito é usar o nginx.
nginx
proxy
ssl-certificate
Bastien974
fonte
fonte
### Section 2: Unconverted directives ###
# Flag Description
# [S] Unsupported directives.
# In conf file: dummy.conf
# Line 32: SSLProxyMachineCertificateFile /path/to/cert (mod_ssl.c)
# [S] SSLProxyMachineCertificateFile: No relevant directive in Nginx.
Respostas:
É suficiente passar os detalhes do certificado do cliente?
Você pode adicionar
à sua configuração e as informações do certificado estão disponíveis para o servidor B por meio de um cabeçalho X-SSL-Cert.
fonte
\t
com\n
a partir deste cabeçalho uma vez readed.$ssl_client_cert
variável está obsoleta; a$ssl_client_escaped_cert
variável deve ser usada em seu lugar.Aparentemente, é isso que você está procurando: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Disponível desde a versão 1.7.8.
fonte
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:
você deve terminar com:
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
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:
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:
desassociando a parte específica do Certificado de Cliente SSL apenas para verificar se o próprio proxy reverso funciona.
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:
e verificando / reiniciando
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
fonte
Há um artigo bastante interessante sobre os certificados de cliente nginx e SSL; ele usa PHP com FastCGI como exemplo, mas acho que você pode adaptar isso a uma configuração de proxy reverso:
Fonte http://nategood.com/client-side-certificate-authentication-in-ngi
fonte
Parece que este módulo SEnginx é o que você está procurando: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
fonte