Desativando o SSLv3, mas ainda suportando o SSLv2Hello no Apache

12

Muitos clientes SSL, principalmente o JDK 6, usam o protocolo SSLv2Hello para fazer handshake com o servidor. O uso deste protocolo não significa que você esteja usando SSL 2.0 ou 3.0 para esse assunto; é apenas um aperto de mão para determinar qual protocolo usar. [ http://tools.ietf.org/html/rfc5246#appendix-E.2]

No entanto, no Apache, se você desativar o suporte ao SSLv3, isso aparentemente removerá o suporte ao protocolo SSLv2Hello. O Apache Tomcat possui suporte explícito ao SSLv2Hello; ou seja, você pode habilitar isso, mas não o SSLv3.

Existe alguma maneira de fazer isso no Apache?

[Atualizar]

Esta é a minha configuração de protocolo:

  SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv3
Matt Hughes
fonte
However, in Apache, if you disable SSLv3 support, this apparently removes support for the SSLv2Hello protocol. Estou executando o Apache 2.2 SSLProtocol all -SSLv2 -SSLv3e o handshake SSL 2 funciona. Qual configuração você está executando exatamente que está tendo um problema. A única maneira de saber desativar o SSL 2 Handshake é ativar o modo FIPS.
Chris S
1
Que dor para lidar com esse suporte legado em 2014 :( É hora para que todos possam bombardeá SSLv2 & SSLv3 e fazer extensões apoio universal (por exemplo SNI)..
Xavier Lucas
2
@XavierLucas Em vez de executar todos os -SSLv2, -SSLv3, especifiquei os protocolos TLS compatíveis. Não vejo por que isso seria diferente, mas vou testar.
Matt Hughes
@ChrisS Tentei os dois: SSLProtocol + TLSv1 + TLSv1.1 + TLSv1.2 -SSLv3 e todos os -SSLv3 -SSLv2. Isso está sendo executado com o Apache 2.4.10. Nenhuma das configurações aparece para permitir o handshake SSL 2. E eu não toquei no modo FIPS; o padrão é que ele esteja desativado.
Matt Hughes

Respostas:

7

Aparentemente, o mod_ssl mudou nos últimos anos (não encontrei o commit exato na fonte, mas encontrei o "problema"). A fonte agora faz isso:

If SSLProtocol only includes only one Protocol:
    Handshake = That Protocol's Handshake Only
Else
    Handshake = SSLv2 Handshake

Não há substituição para essa configuração. A única coisa que você pode fazer é editar a fonte, recompilar sua própria versão. Eu criei um diff para forçar a compatibilidade do SSLv2 Handshake se você deseja compilar o seu.

Chris S
fonte
1
Posso confirmar, que o patch do Chris ajuda - o curl (e programas que usam o libcurl, como o git) agora pode falar com o nosso servidor novamente, apesar do SSLv3 ter sido desativado - sem sslscansinalizar nenhuma vulnerabilidade. Mas o patch parece um pouco invasivo e eu gostaria de pedir ao Chris para enviá-lo ao projeto Apache para revisão o mais rápido possível. Eu mesmo vou registrar uma multa, se Chris não :-) Muito obrigado, Chris!
28414 Mikhail T.
1
Seria uma idéia melhor adicionar uma diretiva separada para forçar o modo de compatibilidade. Se eu tiver algum tempo livre, escreverei isso, mas não acho que esse "patch" seja uma boa idéia a longo prazo.
Chris S
Sim, isso parece ser o que os desenvolvedores do Apache estão considerando. Veja a [thread] [1] eu comecei lá ... [1] mail-archives.apache.org/mod_mbox/httpd-dev/201410.mbox/...
Mikhail T.
1

Acontece que esse não foi um problema o tempo todo. O Apache aceitará o handshake SSLv2 com qualquer uma das configurações postadas acima. Fui enganado por um erro de aperto de mão ao pensar que esse era o problema; era realmente apenas um problema de configuração em que o servidor não confiava na autoridade de certificação do cliente.

Matt Hughes
fonte