Eu tenho um NGINX atuando como um proxy reverso para nossos sites e está funcionando muito bem. Para os sites que precisam de ssl, segui o raymii.org para garantir uma pontuação o mais forte possível no SSLLabs. Um dos sites precisa estar em conformidade com o PCI DSS, mas com base na varredura TrustWave mais recente agora está falhando devido à ativação do TLS 1.0.
No nível http no nginx.conf, tenho:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Para o servidor específico, eu tenho:
ssl_protocols TLSv1.1 TLSv1.2;
Alterei as cifras, movi as coisas para fora do nível http e para cada servidor do site SSL, mas não importa o que eu execute:
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 nginx para o site como A, mas com o TLS 1.0, então acredito que o restante da minha configuração esteja correta, mas não desativará 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
Respostas:
O problema aqui é que a
Server name indication
parte da negociação do TLS é feita após a negociação da conexão. E o protocolo é negociado durante a negociação da conexão.Pode ser possível impor nenhum TLS v1.0 para esse host virtual se você configurar esse host virtual para um endereço IP no servidor que não possui outros hosts virtuais associados a ele. Portanto, o nginx saberia, com base no endereço IP, que nenhum TLS v 1.0 é permitido.
fonte
Server Name Indication
faz parte do TLSClientHello
. Está na primeira mensagem enviada pelo cliente e não é negociada posteriormente. Parece mais que o Nginx tem uma falha de design. parece que aceita a conexão e, em seguida, encaminha para o host virtual, certo ou errado. Em vez disso, o nginx deve analisar o nome do servidor, consultar o host virtual e, em seguida, rejeitar a conexão se ele não atender aos requisitos do host virtual. A falha de design provavelmente é digna de CVE, já que o TLS 1.0 é questionável às vezes. É claramente uma violação da C&A em algumas circunstâncias.Vá encontrar um bloco de servidor que você deseja usar como modelo de negociação SSL "padrão". Encontre sua linha de escuta
e adicione
default_server
no final da linhaIsso permite que o nginx tenha uma configuração ao negociar qual versão do TLS usar. A desvantagem é que você pode ter apenas um servidor padrão por porta. Portanto, ter alguns domínios virtuais com o TLSv1 ativado e outros desativados não é possível.
fonte
Desativei o TLSv1 no nginx versão 1.8.1. Você precisa atualizar o openssl para as versões 1.0.1g ou 1.0.1h. Em seguida, remova simplesmente 'TLSv1' da diretiva ssl_protocols:
Em seguida, verifique a conexão via TLSv1 pelo comando:
Você deve obter algo assim:
fonte