Desativar o TLS 1.0 no NGINX

18

Eu tenho um NGINX atuando como um proxy reverso para nossos sites e está funcionando muito bem. Para os sites que precisam de ssl eu segui raymii.org para ter certeza de ter como strong de uma pontuação SSLLabs possível. Um dos sites precisa ser compatível com o PCI DSS, mas com base na última verificação do TrustWave está falhando devido ao TLS 1.0 estar habilitado.

No nível http em nginx.conf eu tenho:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Para o servidor específico, tenho:

ssl_protocols TLSv1.1 TLSv1.2;

Alterei as cifras, movi as coisas para fora do nível http e para cada servidor de site ssl, mas não importa o que eu executo:

openssl s_client -connect www.example.com:443 -tls1

Eu recebo uma conexão válida para o TLS 1.0. O SSLLabs coloca a configuração do nginx para o site como um A , mas com o TLS 1.0, então acredito que o resto da minha configuração está correta, mas não desligará o TLS 1.0.

Pensamentos sobre o que eu poderia estar perdendo?

openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64

nginx -v
nginx version: nginx/1.8.0
    
por Shawn C. 08.07.2015 / 17:32

3 respostas

10

O problema aqui é que a parte Server name indication da negociação TLS é feita após a própria conexão ter sido negociada. E o protocolo é negociado durante a negociação de conexão.

Pode ser possível impingir nenhum TLS v1.0 para esse host virtual se você configurar esse host virtual para um endereço IP no servidor que não tenha outros hosts virtuais associados a ele. Portanto, o nginx saberia com base no endereço IP que nenhum TLS v 1.0 é permitido.

    
por 08.07.2015 / 17:50
12

Encontre um bloco de servidor que você deseja usar como seu modelo de negociação ssl "padrão". Encontre sua linha de audição

server {
    ...
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

e adicione default_server ao final da linha

server {
    ...
    listen 443 ssl default_server;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

Isso permite que o nginx tenha uma configuração quando estiver negociando qual versão do TLS usar. A desvantagem é que você só pode ter um servidor padrão por porta. Portanto, ter alguns domínios virtuais com o TLSv1 ativado e outros com ele desativados é um não.

    
por 05.10.2015 / 20:19
4

Se ainda for importante, desativei o TLSv1 na versão 1.8.1 do nginx. Você precisa atualizar o openssl para as versões 1.0.1g ou 1.0.1h. Em seguida, basta remover o 'TLSv1' da diretiva ssl_protocols:

ssl_protocols TLSv1.1 TLSv1.2

Em seguida, verifique a conexão via TLSv1 por comando:

openssl s_client -tls1 -connect example.com:443 < /dev/nul

Você deve conseguir algo assim:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1474531027
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
    
por 22.09.2016 / 10:29