Problemas do Apache SNI com Certificados SSL

1

Estou tendo problemas com minhas configurações do VirtualHost no meu servidor. Meu servidor está executando o Ubuntu 14.04.5 LTS (GNU / Linux 4.4.0-31-genérico x86_64), com o Apache / 2.4.7 (Ubuntu).

Já li muito sobre o Apache e o SNI de outros tópicos aqui, mas não consegui resolver meu problema específico.

Eu tenho vários VirtualHosts configurados de diferentes domínios, cada um com seus próprios certificados SSL, como o seguinte:

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  DocumentRoot /home/user/mydomain.com/public_html
  ErrorLog /home/user/mydomain.com/logs/error.log
  CustomLog /home/user/mydomain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin [email protected]
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  DocumentRoot /home/user/mydomain.com/public_html
  ErrorLog /home/user/mydomain.com/logs/error.log
  CustomLog /home/user/mydomain.com/logs/access.log combined
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/mydomain.com.crt
  SSLCertificateKeyFile /etc/apache2/ssl/mydomain.com.key
  SSLCACertificateFile /etc/apache2/ssl/mydomain.com.root.crt
  SSLCertificateChainFile /etc/apache2/ssl/mydomain.com.chain.crt
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName otherdomain.com
  ServerAlias www.otherdomain.com
  DocumentRoot /home/user/otherdomain.com/public_html
  ErrorLog /home/user/otherdomain.com/logs/error.log
  CustomLog /home/user/otherdomain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin [email protected]
  ServerName otherdomain.com
  ServerAlias www.otherdomain.com
  DocumentRoot /home/user/otherdomain.com/public_html
  ErrorLog /home/user/otherdomain.com/logs/error.log
  CustomLog /home/user/otherdomain.com/logs/access.log combined
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/otherdomain.com.crt
  SSLCertificateKeyFile /etc/apache2/ssl/otherdomain.com.key
  SSLCACertificateFile /etc/apache2/ssl/otherdomain.com.root.crt
  SSLCertificateChainFile /etc/apache2/ssl/otherdomain.com.chain.crt
</VirtualHost>

Isso funciona bem na maioria das vezes, para a maioria dos navegadores, mas de vez em quando em dispositivos específicos ou aleatoriamente, quando tento ir para "otherdomain.com", ele tenta pegar o certificado SSL do "mydomain .com ", que fornece um erro de phishing / certificado errado.

Eu li que o SNI pode ser a solução, então adicionei o seguinte à minha configuração do Apache:

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

No entanto, parece também que na minha versão do Apache (2.4) esse recurso foi eliminado, o que é confirmado sempre que eu reinicio o Apache:

# service apache2 restart
* Restarting web server apache2                                                                                                                                              
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf:17

Também não parece ter corrigido o problema, ainda recebo esse erro. Eu sou capaz de replicar esse problema toda vez usando um BlackBerry antigo.

Com a exceção de ter que obter um endereço IP exclusivo para cada VirtualHost usando SSL, quais são minhas opções para resolver esse problema?

Além disso, meu exemplo mostra apenas dois domínios, mas na verdade eu tenho cinco domínios configurados com seus próprios certificados SSL. Todos pegam o certificado SSL do primeiro domínio quando sou capaz de replicar o problema.

Aprecio muito qualquer ajuda.

    
por Dave Hunt 29.05.2017 / 21:24

1 resposta

1

Hosts virtuais baseados em nome não estão sendo eliminados. A configuração NameVirtualHost está sendo removida porque é redundante. O restante da configuração conterá informações suficientes para o Apache saber se essa configuração teria que ser ativada ou não.

O SNI também não é uma configuração que você pode ativar ou desativar no lado do servidor. O cliente o suporta e envia o campo SNI na primeira mensagem enviada ao servidor, ou o cliente não o suporta, e não há nada que o servidor possa fazer sobre isso.

Suas opções são:

  • Obtenha um endereço IP separado para cada domínio.
  • Atualize os clientes que ainda não suportam o SNI para usar softwares atualizados.
  • Obtenha um único certificado abrangendo todos os domínios.
  • Aceite que apenas o primeiro domínio funcionará para todos os clientes e os domínios restantes serão divididos para a minoria de clientes que executam software desatualizado.
por 29.05.2017 / 22:00