É possível definir um SSLProtocol no Apache para um único VirtualHost (poodle)?

13

Estou tentando testar um patch para a vulnerabilidade do poodle que envolve a desativação do SSLv3 em meu servidor da web. Para testar isso em um ambiente de não produção primeiro, estou configurando o SSLProtocol em um VirtualHost para um servidor de teste diferente. Minha configuração é algo como isto:

<VirtualHost *:443>
    SSLEngine On
    SSLProtocol All -SSLv2 -SSLv3
    ServerName test.mysite.com
    # bunch of other stuff omitted
</VirtualHost>

No entanto, mesmo depois de reiniciar o apache, meu site de teste ainda é considerado vulnerável. Espera-se que isso funcione? Eu estou querendo saber se eu tenho que configurá-lo na configuração ssl global ou se há algo mais sutil que está fazendo com que a configuração não tome e / ou funcione.

    
por Cory 16.10.2014 / 00:45

4 respostas

15

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

Existe um relatório de erros correspondente para mod_ssl , mas conforme descrito no relatório de erros, o problema precisa ser resolvido no OpenSSL (o certificado é herdado, mas não os protocolos).

Os conjuntos de cifras devem ser definidos independentemente para cada VirtualHost, caso contrário, você terá a lista padrão, incluindo muitas cifras inseguras. Além disso, esteja ciente de que os clientes mais antigos que não suportam a Indicação do Nome do Servidor (SNI) sempre usarão o host padrão (a menos que bloqueado usando SSLStrictSNIVHostCheck ), o que pode confundir seu teste.

Em suma, você deve ser capaz de especificar conjuntos de certificados e certificados personalizados para cada host virtual, mas até que o bug seja corrigido, não espere o comportamento correto com protocolos personalizados para cada host virtual.

Eu encontrei este problema com o Apache 2.4 e o modssl com o OpenSSL 1.0.1k, e espero que o Apache 2.2 esteja sujeito aos mesmos problemas.

Atualização (outubro de 2016): O bug do OpenSSL foi marcado como resolvido em 13 de outubro de 2016. No entanto, ele fazia parte de um fechamento em massa de problemas em aberto e embora uma 'correção parcial' fosse fornecida , o problema nunca foi totalmente resolvido.

Atualização (abril de 2018): o bug OpenSSL reenviado agora tem um patch disponível (a partir de 9 de abril de 2018). Este patch irá alterar o comportamento das instâncias do Apache configuradas com vários hosts virtuais SNI:

Reject connections not conforming to vhost SSLProtocol

This was developed and tested with 2.4.27 and in production with that version. The patch was modified for 2.4.33 and lightly tested.

This checks the version of the connection against the SSLProtocol configured for the virtual host that is matched based on the SNI. Because the connection is initially made with the SSLProtocol configured for the default host for the port, the default host must include all protocols that will be supported by any virtual host.

This patch adds an additional return status of APR_EMISMATCH to the init_vhost function so that the ssl_callback_ServerNameIndication callback registered with OpenSSL can return fatal alert SSL_AD_PROTOCOL_VERSION. This is intended to produce the same response to the ClientHello as having an SSLProtocol specified that does not include the version in question. Because the SNI callback is called during the processing of the ClientHello and before a response is produced, it seems to do exactly that.

Se, de repente, você vir mensagens do seguinte formato:

Rejecting version [version] for servername [hostname]

Em seguida, você deve verificar novamente seu SSLProtocol para seu host padrão.

    
por 12.06.2015 / 05:33
4

Você pode ter diferentes protocolos SSL para cada Vhost se eles estiverem ouvindo em um IP diferente.

Exemplo com um host específico que permite TLSv1 e todos os outros, permitindo apenas TLSv1.1 e TLSv1.2 - e um permitindo somente TLSv1.2:

<VirtualHost *:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3 -TLSv1
  ServerName test.mysite.com
  # bunch of other stuff omitted
</VirtualHost>

<VirtualHost 10.0.0.2:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ServerName test2.mysite.com
</VirtualHost>

<VirtualHost 10.0.0.3:443>
  SSLEngine On
  SSLProtocol TLSv1.2
  ServerName test2.mysite.com
</VirtualHost>
    
por 27.04.2016 / 09:30
0

Se você estiver usando a indicação do nome do servidor (SNI) com seu vhost, de fato, não poderá definir várias versões SSL.

No entanto, se você estiver usando um servidor dedicado, provavelmente poderá adicionar outro endereço IP ao seu servidor. Dessa forma, você poderá usar uma versão SSL diferente por IP. Você apenas tem que mudar suas configurações de vhost como esperado IP: 443.

    
por 27.04.2016 / 08:39
-1

Ou você pode usar:

SSLProtocol TLSv1 TLSv1.1 TLSv1.2

Eu fui testado em muitos servidores e funciona para mim! Você pode testar seu site neste site

    
por 20.10.2014 / 09:00