Desabilitando o RC4 no conjunto de criptografia SSL de um servidor Apache

15

Por favor, veja as seções EDIT na minha própria resposta; eles contêm uma explicação para esse enigma .

Estou tentando desabilitar o RC4 para um servidor Apache 2.2.9 em execução no CentOS 6.5 VPS e não consigo ter sucesso.

Um certificado validado para empresas recém-adquirido está instalado e as conexões SSL estão funcionando bem, mas eu queria configurar as coisas da melhor maneira possível, para "endurecer a segurança", como dizem alguns tutoriais.

Verificando a configuração com o Qualys SSL Labs, a página de resultados mostra "Este servidor aceita a cifra RC4, que é fraca. Nota limitada a B".

No entanto, coloquei isso no ssl.conf:

 SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3

Salvei o script fornecido na resposta a this question em um arquivo chamado test-ssl-ciphers.sh e alterou o endereço IP para um endereço de loopback. Este é o resultado de ./test-ssl-ciphers.sh | grep -i "RC4" :

Testing ECDHE-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing AECDH-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing PSK-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-MD5...NO (no ciphers available)
Testing EXP-ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-KRB5-RC4-SHA...NO (no ciphers available)
Testing EXP-KRB5-RC4-MD5...NO (no ciphers available)

Cada uma dessas linhas contém "NO", que, de acordo com o script, significa que o servidor não suporta a combinação de criptografia especificada.

Além disso, o comando grep -i -r "RC4" /etc/httpd me fornece apenas o arquivo ssl.conf acima mencionado.

Além disso, a execução de openssl ciphers -V no meu conjunto de cifras não mostra nenhuma cifra RC4, o que faz sentido, dada a cadeia de configuração.

Estou, portanto, de alguma forma perdendo por que os sites de verificação de SSL estão me dizendo que "o servidor aceita RC4". Eles até listam as seguintes cifras como sendo aceitas:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

Alguém tem uma explicação possível? O que estou fazendo algo errado? Talvez haja outro lugar onde esse suporte de RC4 ou "aceitação" seja configurado?

Obrigado.

[ EDIT ] Usando um CentOS 6.6 em uma máquina virtual em casa, executei o script novamente no meu VPS usando seu nome de domínio em vez do endereço de loopback. Essa configuração implica que a lista de cifras é fornecida pela instância openssl na VM: ainda não tenho RC4 entre as cifras que produzem YES.

    
por AbVog 19.01.2015 / 18:50

5 respostas

15

Durante a instalação do certificado renovado, descobri que o problema foi causado pela especificação (para o domínio e para cada subdomínio) no ISPConfig de todo o conjunto de dados necessários para HTTPS: certificado, chave privada, cadeia CA, etc.

Colocado de maneira diferente, remover o conjunto de dados levou ao teste Qualys para classificar o domínio A e, ao mesmo tempo, remover os avisos sobre o RC4. Colocar os detalhes de volta leva às advertências retornando e a nota sendo tapada em B novamente, o que não deixa lugar para dúvidas quanto ao elo de causalidade.

É como se dar os detalhes de cada vhost de alguma forma criasse um novo ambiente no qual alguns padrões tivessem sobrescrito o conjunto de criptografia que eu especifiquei no ssl.conf. Estranho.

A solução é adicionar a especificação SSLCipherSuite na área de texto Apache Directives para cada vhost. Isso é o que eu tenho na configuração que me dá uma nota A:

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# Compression is disabled by default on my distribution (CentOS 6)
# SSLCompression off 
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

EDIT (2017-05-16): Uma descoberta adicional sobre esse problema: a especificação de SSLCipherSuite é obrigatória. Não consigo entender por que essa diretiva específica, embora especificada no nível do servidor, não se aplica automaticamente a configurações de host virtual . Estou executando o Apache 2.2.15 no CentOS 6.9.

EDIT (2018-06-18): Mais informações. Acabei de descobrir que a diretiva SSLCipherSuite pode ser especificada apenas uma vez e será aplicada a todos os hosts virtuais: no arquivo de configuração base mod_ssl (no CentOS 6, o arquivo encontra-se em /etc/httpd/conf.d/ssl.conf ), basta configurá-lo fora do virtualhost padrão. A documentação do Apache 2.2 afirma que o valor padrão desta diretiva é SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP . Eu acho que é daí que vem a cifra RC4: na ausência de qualquer especificação, que era o meu caso, já que nenhuma especificação estava no contexto "global", o valor padrão se aplica. Esse entendimento acaba com o que tem sido um mistério para mim. Ironicamente, estou prestes a mudar para o CentOS 7 quando encontrar essa explicação! HTH.

    
por 02.01.2016 / 10:34
5
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
                                                                    ^^^^^^^

Má ideia. Desativar todas as cifras SSLv3 resulta na desativação das cifras utilizáveis com TLS1.0 e TLS1.1 e deixa apenas algumas cifras recentemente introduzidas com o TLS1.2 (se o seu servidor suportar o TLS1.2)

I am therefore somehow lost as to why the SSL check websites are telling me that "the server accepts RC4". They even list the following ciphers as being accepted:

Certifique-se de que os testes locais e externos acessem o mesmo servidor (endereço IP). Já vi muitos sites em que example.com está em um host diferente de www.example.com e, portanto, os testes são diferentes.

    
por 19.01.2015 / 19:04
2

Qualys SSL labs parece muito sensível aos hosts padrão, etc. Verifique se TODOS os seus HTTPSHatHosts naquele endereço IP usam exatamente as mesmas configurações (além dos arquivos de certificado), tive um problema similar em alguns dos testes Qualys testados VirtualHost alvejado e alguns dos testes pareciam pegar um VirtualHost padrão. Meu vhost alvo tinha apenas uma única cifra ativada, mas a Qualys estava encontrando uma lista muito maior do vhost padrão.

Eu também encontrei um script mais bonito aqui que fornece informações mais completas sobre os testes SSL.

    
por 27.01.2015 / 02:37
2

Estava apenas procurando por um dos meus sites. Com base na resposta do @ AbVog, descobri que minhas diretivas estavam na verdade apenas dentro do vhost padrão. Quando mudei as diretivas para o contexto global, tudo foi bom.

Como um aparte, eu também encontrei o link que tem uma boa lista de configurações de SSL para vários pacotes diferentes. A recomendação atual para o apache da seguinte forma:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 
    
por 31.03.2016 / 15:56
0

No meu Fedora 25 com cifras Apache / 2.4.25 são tratadas pelas políticas de criptografia (veja / etc / cryptopolicies / backends). A configuração padrão tem o RC4 completamente desabilitado, portanto não há necessidade de adulterar cifras na configuração do Apache. Exceto para garantir que você use o ssl.conf mais recente, pois ele não é instalado por padrão, mas é deixado como ssl.conf.rpmnew no diretório conf.d.

Para configurar o SSL, precisei apenas especificar os certificados, ServerName e DocumentRoot. Para o Squirrelmail, isto é.

SSLCertificateFile /etc/letsencrypt/live/mail.xxxx.dk/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.xxxx.dk/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mail.xxxx.dk/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/mail.xxxx.dk/fullchain.pem
ServerName mail.xxxx.dk:443
DocumentRoot "/usr/share/squirrelmail"
    
por 25.01.2017 / 08:14