Como desativar o TLS 1.1 e 1.2 no Apache?

13

Eu tenho um servidor Ubuntu 12.04.2 LTS executando o Apache 2.2.22 com mod_ssl e OpenSSL v1.0.1.

Na minha configuração do vhosts (tudo dentro do qual se comporta como eu esperaria), tenho a SSLProtocollinha com -all +SSLv3.

Com essa configuração, o TLS 1.1 e 1.2 são ativados e funcionam corretamente - o que é contra-intuitivo para mim, pois eu esperaria que apenas o SSLv3 fosse ativado com essa configuração.

Posso ativar / desativar o TLSv1 com perfeição -/+TSLv1e funciona como esperado. Mas +/-TLSv1.1e +/-TLSv1.2não são opções de configuração válidas - por isso não posso desativá-las dessa maneira.

Quanto ao motivo pelo qual eu gostaria de fazer isso - estou lidando com um aplicativo de terceiros (sobre o qual não tenho controle) que tem algum comportamento de buggy com servidores habilitados para TLS e preciso desativá-lo completamente para avançar.

Kyle Lowry
fonte
só por curiosidade - posso perguntar por que você deseja desativar o TSL em primeiro lugar? pelo que reuni, é suposto ser mais seguro que o SSLv1 / 2/3, portanto, posso imaginar razões para querer permitir apenas a v1.2 e não a v1.1 (foi isso que me trouxe aqui), mas não para desativá-lo a favor do SSL, exceto talvez alguns problemas de compatibilidade com software mais antigo?
codeling
@codeling Trabalhando com software antigo de terceiros que possui bugs no TLS.
Kyle Lowry

Respostas:

23

Intrigado com esse bug (e sim, consegui reproduzi-lo), dei uma olhada no código fonte da última versão estável mod_ssle encontrei uma explicação. Tenha paciência comigo, isso vai ficar empolgado por pilha de amador:

Quando o SSLProtocolfoi analisado, resulta em charalgo parecido com isto:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

Ao iniciar um novo contexto de servidor, TODOS os protocolos disponíveis serão ativados e o acima charé inspecionado usando algumas operações AND bit a bit bacanas para determinar quais protocolos devem ser desativados . Nesse caso, onde o SSLv3 é o único protocolo que foi ativado explicitamente, os outros 3 serão desativados.

O OpenSSL suporta uma configuração de protocolo para o TLSv1.1, mas como o SSLProtocolnão conta para essas opções, ele nunca é desativado. O OpenSSL v1.0.1 tem alguns problemas conhecidos com o TLSv1.2, mas se for suportado, suponho que o mesmo vale para o TLSv1.1; não é reconhecido / manipulado por mod_ssl e, portanto, nunca desabilitado.

Referências do código fonte para mod_ssl:

SSLProtocolé analisado na linha 925 em pkg.sslmod/ssl_engine_config.c
As opções usadas na função acima são definidas na linha 444 em pkg.sslmod/mod_ssl.h
Todos os protocolos são ativados na linha 586, quando pkg.sslmod/ssl_engine_init.cos protocolos específicos são desativados nas linhas subseqüentes

Como desativá-lo, então?

Você tem poucas opções:

  1. Desative-o no arquivo de configuração do OpenSSL com:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. Reescrever mod_ssl;-)
Mathias R. Jessen
fonte
Parece uma resposta perfeita, basta verificar: qual / o que / onde o arquivo de configuração do OpenSSL?
Kyle Lowry
openssl.cnf- a localização depende da instalação. No aperto Debian eu encontrei em /etc/ssl/openssl.cnf, no OS X no /System/Library/OpenSSL/openssl.cnfe no Windows 7 em %systemdrive%\openssl\openssl.cnf.
Mathias R. Jessen
1
Estou vendo o arquivo de configuração agora; a sintaxe parece um pouco diferente do que eu esperaria com base na sua resposta, e não consigo encontrar nada online que indique explicitamente que você pode controlar os protocolos ativados / desativados nesse arquivo de configuração. Você tem alguma referência para isso? Obrigado.
Kyle Lowry
Outra opção - use: SSLProtocolda mesma maneira acima ( SSLProtocol All -TLSv1.1 -TLSv1.2(nenhuma vírgula deve ser necessária)), mas sob uma configuração global ou específica do Apache para 'substituir' qualquer configuração global SSL mencionada acima. (Se você não deseja alterar todos cifras SSL subjacentes -> Desde a cifra que você precisa é considerado fraco.)
bshea
2

O problema também é abordado nos comentários na página mod_ssl Apache: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136

Se o Ubuntu 12.04 tivesse o Apache 2.2.23, o problema não teria ocorrido. De acordo com os comentários, é possível ativar o TLSv1.1 e o TLSv1.2, mas o TLSv1.0 também é ativado:

SSLProtocol All -SSLv2 -SSLv3
Coanda
fonte
1

Primeiro, você deve identificar qual é o vhost padrão para a porta 443 em seu servidor (o primeiro vhost SSL carregado pelo Apache) e editar seu arquivo de configuração. A maioria dos usuários possui um arquivo ssl.conf em seus servidores, com um vhost para a porta 443 configurada lá. Como o nome desse arquivo começa com "s", ele será carregado antes dos vhosts configurados no vhosts.conf (que começa com "v"). Portanto, verifique se esse é o seu caso (a resposta é "sim" para praticamente todos) e altere os protocolos nesse arquivo . É o bastante!

Um problema semelhante foi publicado aqui: Como desativar o TLS 1.1 e 1.2 no Apache? . De acordo com HBruijn:

A menos que você tenha VirtualHosts IP, na prática, as configurações da primeira ocorrência da diretiva SSLProtocol são usadas para todo o servidor e / ou todos os VirtualHosts baseados em nome que suportam TLS

E outra aqui: é possível definir um SSLProtocol no Apache para um único VirtualHost (poodle)? . De acordo com vallismortis:

Você pode definir o SSLProtocol apenas para o primeiro VirtualHost no arquivo de configuração. Todas as entradas subsequentes do VirtualHost herdarão essa configuração da primeira entrada e ignorarão silenciosamente sua própria configuração devido a um bug do OpenSSL.

A propósito: o vhost padrão em um servidor, para uma determinada porta, é aquele que responde às solicitações dessa porta, que chegam ao servidor sem uma identificação de nome de servidor (ou com um nome de servidor errado). Exemplo: um IP digitado na barra de endereços do navegador ou um redirecionamento incorreto causado por uma tabela DNS incorreta.

aldemarcalazans
fonte