meu certificado ssl só funciona com 'www.example.com' e não com 'example.com'

2

Adquiri um certificado válido para www.example.com e example.com. Meu servidor está funcionando apenas com "www.example.com" (o ssl está funcionando bem), mas não está mostrando nada quando eu digito "example.com" no navegador. Aqui está o meu arquivo de configuração do Apache, que basicamente é o mesmo virtualHost duas vezes, mas com diferente ServerName

Define APACHE_LOG_DIR /var/log/apache2
Define SSLCERTIFICATE /etc/apache2/ssl/mycertificate.crt
Define SSLKEY /etc/apache2/ssl/mykey.key
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin [email protected]
                ServerName www.example.com

                DocumentRoot /var/www/site2/

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile ${SSLCERTIFICATE}
                SSLCertificateKeyFile ${SSLKEY}

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                <Directory />
                        Options FollowSymLinks
                        AllowOverride All
                </Directory>
                <Directory "/var/www/site2">
                        Options Indexes FollowSymLinks MultiViews
                        AllowOverride All
                        Order Allow,Deny
                        Allow from all
                </Directory>


                BrowserMatch "MSIE [2-6]" \
                                nokeepalive ssl-unclean-shutdown \
                                downgrade-1.0 force-response-1.0
                # MSIE 7 and newer should be able to use keepalive
                BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

        </VirtualHost>

        # Same documetn root for example.com (without www)
        <VirtualHost *:443>
                ServerAdmin [email protected]
                ServerName example.com

                DocumentRoot /var/www/site2/

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile ${SSLCERTIFICATE}
                SSLCertificateKeyFile ${SSLKEY}

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                <Directory />
                        Options FollowSymLinks
                        AllowOverride All
                </Directory>
                <Directory "/var/www/site2">
                        Options Indexes FollowSymLinks MultiViews
                        AllowOverride All
                        Order Allow,Deny
                        Allow from all
                </Directory>


                BrowserMatch "MSIE [2-6]"                                 nokeepalive ssl-unclean-shutdown                                 downgrade-1.0 force-response-1.0
                # MSIE 7 and newer should be able to use keepalive
                BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

        </VirtualHost>
</IfModule>

Informações adicionais:

  • meu site está hospedado em uma máquina virtual no Azure (Ubuntu 14.04 LTS)
  • o nome do domínio é de goDaddy
  • existe outro arquivo de configuração para http (porta 80)
por ABR 07.09.2015 / 21:14

4 respostas

1

Como seu certificado é válido para example.com e www.example.com , e ambos os domínios estão configurados para usar os mesmos diretórios, não há motivo para que eu os veja como VirtualHosts separados. Eu removeria o segundo VirtualHost e mudaria o primeiro para ficar assim:

   <VirtualHost *:443>
            ServerAdmin [email protected]
            ServerName www.example.com
            ServerAlias example.com

[the rest of the config should look the same as it does in your post]

    </VirtualHost>
    
por 08.09.2015 / 14:01
1

o motivo pelo qual você não vê a versão sem o www, é porque você está usando dois curingas para o IP *:443 com dois nomes de domínio diferentes. O Apache simplesmente usa o primeiro para usar o certificado. Da documentação do Apache [1]:

The problem with using named virtual hosts over SSL is that named virtual hosts rely on knowing what hostname is being requested, and the request can't be read until the SSL connection is established. The ordinary behavior, then, is that the SSL connection is set up using the configuration in the default virtual host for the address where the connection was received.

Para usar um curinga, você precisa de um IP por certificado. Cada IP virtual será usado pelo Apache para redirecionar a solicitação de entrada SSL criptografada. Para fazer isso:

  1. Adicione um IP virtual à interface (se assumirmos que é eth0, adicione um alias a ele)
  2. Atualize o arquivo ports.conf , adicione duas entradas:
    • NameVirtualHost IP1: 443
    • NameVirtualHost IP2: 443
  3. Atualize seu vHost para ficar assim:

    Site com o www

    NomeDoServidor www.site.com

    Site sem o www

    ServerName site.com

EDITAR
Você também pode redirecionar todos os acessos recebidos de "site.com" para "www.site.com". Para fazer isso, remova o vHost para site.com e adicione a seguinte linha:     ServerAlias site.com

Isso instruirá o Apache a usar o mesmo vHost para os dois domínios. Se você deseja redirecionar todos os hits recebidos ( link e link ) para o domínio principal protegido ( link ), considere adicionar as seguintes instruções:

RewriteEngine On
RewriteCond %{HTTPS} off
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

site.com substituído por example.com por regras de falha de servidor

[1] link

    
por 07.09.2015 / 21:55
0

Como você deseja usar o SNI, você deve ativá-lo. Verifique se o

NameVirtualHost *:443

está disponível em algum lugar na sua configuração

Mas acho que deveria ser melhor adicionar um serverAlias e o mesmo diretório raiz. Você pode selecionar a diferença por mod_rewrite.

    
por 07.09.2015 / 21:41
0

Por fim, consegui fazer o mesmo que Jenny D sugere e também redirecionando de mypage.com para www.mypage.com e alterando o 'www' CName na configuração goDaddy (onde fica meu domínio) para apontar meu endereço de máquina virtual azure.

Portanto, nem modificar o .htaccess nem usar o SNI foi necessário neste caso. Não tenho certeza se essa é a configuração ideal ou ideal, mas pelo menos está funcionando.

    
por 11.09.2015 / 11:49