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 SSLProtocol
linha 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 -/+TSLv1
e funciona como esperado. Mas +/-TLSv1.1
e +/-TLSv1.2
nã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.
Respostas:
Intrigado com esse bug (e sim, consegui reproduzi-lo), dei uma olhada no código fonte da última versão estável
mod_ssl
e encontrei uma explicação. Tenha paciência comigo, isso vai ficar empolgado por pilha de amador:Quando o
SSLProtocol
foi analisado, resulta emchar
algo parecido com isto: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
SSLProtocol
nã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 empkg.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.c
os protocolos específicos são desativados nas linhas subseqüentesComo desativá-lo, então?
Você tem poucas opções:
Protocols All,-TLSv1.1,-TLSv1.2
mod_ssl
;-)fonte
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.cnf
e no Windows 7 em%systemdrive%\openssl\openssl.cnf
.SSLProtocol
da 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.)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:
fonte
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:
E outra aqui: é possível definir um SSLProtocol no Apache para um único VirtualHost (poodle)? . De acordo com vallismortis:
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.
fonte