Forçando um protocolo SSL específico para um servidor proxy nginx

5

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

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
    
por vitch 10.10.2012 / 11:26

4 respostas

1

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.

    
por 10.10.2012 / 15:00
4

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.

    
por 05.11.2012 / 20:15
1

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;
    
por 19.10.2017 / 16:42
0

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;
    
por 10.10.2012 / 14:49