Qual configuração do VirtualHost do apache servirá um e somente um domínio sobre SSL?

1

Eu tenho vários domínios ( example1.com , example2.com , ... ) hospedados no mesmo IP. Um desses domínios ( example3.com ) tem um certificado SSL e eu quero veiculá-lo por HTTPS, mantendo todos os outros sites em HTTP. Eu tenho isso configurado e funcionando corretamente, até agora.

Meu problema é que as solicitações para https://www.example1.com (nota s) estão sendo manipuladas pela seção de configuração do apache para example3.com (que começa <VirtualHost *:443> ), o que causa problemas já que este é um site Django e entre outros coisas que gera 400 Bad Request devido a example1.com não estar na configuração ALLOWED_HOSTS do Django.

Eu entendo que a natureza do SSL significa que o cabeçalho Host: não é conhecido até que a conexão segura seja estabelecida. Mas existe uma maneira de fazer com que o apache rejeite todas as solicitações por HTTPS que não são para example3.com ?

Eu esperava o uso da diretiva ServerName dentro do SSL Virtualhost para restringir essa seção apenas ao host nomeado, mas em inspeção mais próxima dos documentos parece que é apenas o caso dos hosts virtuais baseados em nome.

Edit: Eu tentei adicionar um padrão pega-tudo como a primeira seção, como o seguinte:

<VirtualHost *:443>
  ServerName default.only
  <Location />
    Require all denied
  </Location>
</VirtualHost>

Isso causa o seguinte erro:

[Thu Dec 04 10:31:27.922801 2014] [mpm_event:notice] [pid 10498:tid 3074255488] AH00491: caught SIGTERM, shutting down
[Thu Dec 04 10:31:29.928483 2014] [ssl:emerg] [pid 30518:tid 3074300544] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
[Thu Dec 04 10:31:29.928551 2014] [ssl:emerg] [pid 30518:tid 3074300544] AH02312: Fatal error initialising mod_ssl, exiting.
    
por jl6 02.12.2014 / 22:55

2 respostas

1

Os erros que você publicou indicam que você não incluiu a configuração SSL relevante necessária para seus domínios; Para qualquer domínio / subdomínio que você deseja que seja acessível via SSL, você precisará fornecer informações relevantes para o certificado, etc., na (s) configuração (ões) de VirtualHost dos domínios em questão, por exemplo:

<VirtualHost _default_:443>
    DocumentRoot /var/www/html/example1.com
    ServerName example1.com
        SSLEngine on
        SSLProtocol all -SSLv2
        SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5:!DSS
        SSLHonorCipherOrder on

        SSLCertificateFile /etc/pki/tls/certs/example1certificate.crt
        SSLCertificateKeyFile /etc/pki/tls/private/example1privatekey.key
        SSLCertificateChainFile /etc/pki/tls/certs/certificatechainfile.pem
        SSLCACertificateFile /etc/pki/tls/certs/certificateauthority.pem
</VirtualHost>

Você precisará então criar segmentos VirtualHost apropriados para o resto de seus domínios, mas neles você apenas configurará a porta de escuta como sendo 80, sem opções de configuração SSL, por exemplo:

<VirtualHost _default_:80>
    DocumentRoot /var/www/html/example2.com
    ServerName example2.com
</VirtualHost>

Espero que isso ajude!

PS, as configurações acima para SSLCipherSuite e SSLProtocol são boas - você pode usá-las para economizar tempo pesquisando outras configurações possíveis, se desejar.

    
por 04.12.2014 / 12:25
1

Como @Polosson disse no comentário, você precisará criar dois hosts virtuais 443 para acabar com esse arranjo.

O primeiro que você listar será o pega-tudo para qualquer coisa que surja na porta 443 - isso está implícito em listá-lo primeiro. O segundo será usado quando ele hospeda é example3.com via ServerName.

    
por 03.12.2014 / 04:10