Intrigado por esse bug (e sim, eu consegui reproduzi-lo). Eu dei uma olhada no código-fonte para a última versão estável de mod_ssl
e encontrei uma explicação. Fique comigo, isso vai fazer um overflow de pilha amador:
Quando o SSLProtocol
foi analisado, isso resulta em um char
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 habilitados, e o char
acima será inspecionado usando algumas operações AND bit a bit para determinar quais protocolos devem ser desativados . Neste caso, onde o SSLv3 é o único protocolo que foi explicitamente habilitado, os 3 outros serão desativados.
O OpenSSL suporta uma configuração de protocolo para TLSv1.1, mas como o SSLProtocol
não considera essas opções, ele nunca é desabilitado. O OpenSSL v1.0.1 tem alguns problemas conhecidos com o TLSv1.2, mas se for suportado, suponho que o mesmo acontece com o TLSv1.1; não é reconhecido / manipulado por mod_ssl e, portanto, nunca desabilitado.
Código Fonte Referências 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 em pkg.sslmod/ssl_engine_init.c
, após o que protocolos específicos são desativados nas linhas subsequentes
Como desativá-lo então?
Você tem algumas opções:
- Desativar no arquivo de configuração do OpenSSL com:%
Protocols All,-TLSv1.1,-TLSv1.2
- Reescreva
mod_ssl
; -)