A possível solução para o seu problema é descrita aqui
Você tem que fazer o downgrade para o OpenSSL 1.0.0 no sistema Nginx por causa de um bug.
Estou desenvolvendo um aplicativo em um serviço da Web https remoto. Durante o desenvolvimento, eu preciso de solicitações de proxy do meu servidor de desenvolvimento local (executando o nginx no Ubuntu) para o servidor da Web https remoto. Aqui está a configuração nginx relevante:
server {
server_name project.dev;
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass https://remote.server.com;
proxy_set_header Host remote.server.com;
proxy_redirect off;
}
}
O problema é que o servidor HTTPS remoto só pode aceitar conexões por SSLv3, como pode ser visto nas seguintes chamadas openssl
.
Não funciona:
$ openssl s_client -connect remote.server.com:443
CONNECTED(00000003)
139849073899168:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 226 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
Trabalhando:
$ openssl s_client -connect remote.server.com:443 -ssl3
CONNECTED(00000003)
<snip>
---
SSL handshake has read 1562 bytes and written 359 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : RC4-SHA
<snip>
Com a configuração atual, meu proxy nginx fornece um 502 Bad Gateway
quando eu me conecto a ele em um navegador. Ativando debug
no log de erros, posso ver a mensagem: [info] 1451#0: *16 peer closed connection in SSL handshake while SSL handshaking to upstream
.
Eu tentei adicionar ssl_protocols SSLv3;
à configuração do nginx, mas isso não ajudou.
Alguém sabe como posso configurar isso para funcionar corretamente?
Editar - informações solicitadas adicionais adicionadas:
Executando no Ubuntu 12.04 com a versão OpenSSL:
$ openssl version
OpenSSL 1.0.1 14 Mar 2012
A solução, fornecida por @Christopher Perrin abaixo, é fazer o downgrade de openssl para 1.0.0. Aqui estão os comandos que fizeram isso com sucesso para mim (no Ubuntu 12.04 rodando no AMD64):
wget http://launchpadlibrarian.net/81976289/openssl_1.0.0e-2ubuntu4_amd64.deb
sudo dpkg -i openssl_1.0.0e-2ubuntu4_amd64.deb
wget http://launchpadlibrarian.net/81976290/libssl1.0.0_1.0.0e-2ubuntu4_amd64.deb
sudo dpkg -i libssl1.0.0_1.0.0e-2ubuntu4_amd64.deb
A possível solução para o seu problema é descrita aqui
Você tem que fazer o downgrade para o OpenSSL 1.0.0 no sistema Nginx por causa de um bug.
Isso se deve ao fato de que, quando você tenta o Nginx compilado com a versão 1.0.1 do Openssl, em que eles introduziram o TLSv1.1 e o TLSv1.2 sempre que o Nginx está tentando se conectar ao servidor de backend, ele reconfigura a conexão com peer closed connection in SSL handshake
(54: Connection reset by peer) while SSL handshaking to upstream
em Nginx Debug Logs, o que significa que back-end não tem suporte para TLSv1.1 e TLSv1.2.
Se o Load Balancer estiver sendo usado, você / cliente precisará atualizar o seu Load Balancer Frimware.
Eu me deparei com um problema semelhante ao proxy reverso do Nginx para o IIS 6 no Windows 2003 após uma atualização recente que atualizou as bibliotecas openssl na caixa Nginx. O que funcionou para mim é mudar a diretiva Nginx:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
para
proxy_ssl_protocols TLSv1;
Tente forçar uma versão ssl sendo anunciada pelo servidor
ssl_prefer_server_ciphers on;
ssl_protocols SSLv3 TLSv1;
# Set the ciphers to use. You may have to fix formatting.
ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:\
EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:\
AES128-SHA:RC4-SHA:RC4-MD5;