Existe uma maneira de configurar SSL para um domínio e todos os subdomínios?

1

Então, eu tenho um domínio com muitos subdomínios. Digamos que example.com , a.example.com , b.example.com , c.example.com , etc.

Eu quero hospedá-los no mesmo servidor com o mesmo endereço IP.

Eu tenho meu certificado curinga e minha certificação de domínio base, star_example_com.crt e example_com.crt .

Estou tentando configurar meu servidor Apache para oferecer suporte a SSL no domínio e subdomínios, mas não consigo fazê-lo funcionar. O domínio é bom, mas os subdomínios não são.

Aqui está minha configuração:

NameVirtualHost *:443 # To support SNI, although, apparently, this directive is deprecated

SSLStrictSNIVHostCheck off

<VirtualHost example.com:443>
    SSLEngine On
    SSLCertificateFile  /etc/apache2/ssl/example_com.crt
    SSLCertificateKeyFile   /etc/apache2/ssl/example_com.key
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

    DocumentRoot /var/www/html

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


        <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>

</VirtualHost>

<VirtualHost *:443>
    ServerAlias *.example.com
        SSLEngine On
        SSLCertificateFile      /etc/apache2/ssl/star_example_com.crt
        SSLCertificateKeyFile   /etc/apache2/ssl/star_example_com.key
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

        DocumentRoot /var/www/html

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


        <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
       </Directory>  
</VirtualHost>

Eu estou sentindo falta de algo óbvio aqui? Tudo o que quero é ter certeza de que o certificado SSL certo é usado para o domínio e subdomínios ... tudo é o mesmo (este é um multisite WordPress, então tudo vai para o mesmo lugar no final.

Para ficar claro, recebo um erro quando acesso subdomínios porque não recebo o certificado curinga.

Para ser mais claro, eu tenho mais de 80 subdomínios. Eu gostaria de evitar criar um VirtualHost para cada um, se isso for possível.

Algum apontador?

    
por Dancrumb 18.01.2015 / 01:29

3 respostas

1

Eu não tenho reputação suficiente para comentar. Então vou postar resposta. Primeira coisa primeiro você deve ter sub-domínio e depois do domínio. Depende da ordem, portanto, primeiro deve ser configurado subdomínios e, finalmente, todo o domínio raiz. Eu mostro minha configuração que funciona perfeitamente:

/etc/apache2/sites-available/example.conf:

# ====================SSL========================
    <IfModule mod_ssl.c>

    ##      a.example.com
            <VirtualHost *:443>
                    ServerAdmin [email protected]
                    ServerName a.example.com
                    ServerAlias *.a.example.com
                    DocumentRoot /home/a.example.com/www/public_html

                    ErrorLog /home/a.example.com/www/logs/ssl_error.log
                    CustomLog /home/a.example.com/www/logs/ssl_access.log combined

                    SSLEngine on
                    SSLCertificateFile /home/a.example.com/www/ssl/a.example.com.crt
                    SSLCertificateKeyFile /home/a.example.com/www/ssl/a.example.com.key
                    SSLCertificateChainFile /home/a.example.com/www/ssl/a.example.com.ca-bundle.crt

                    <Directory /home/a.example.com/www/public_html>
                            Options FollowSymLinks -MultiViews
                            AllowOverride All
                            Order allow,deny
                            Allow from all
                            Satisfy Any
                    </Directory>
            </VirtualHost>
    ##      /a.example.com

    ##      example.com
            <VirtualHost *:443>
                    ServerAdmin [email protected]
                    ServerName example.com
                    ServerAlias *.example.com
                    DocumentRoot /home/example.com/www/public_html/

                    <Directory /home/example.com/www/public_html/>
                            Options FollowSymLinks MultiViews
                            AllowOverride None
                            Order allow,deny
                            allow from all
                    </Directory>

                    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                    <Directory "/usr/lib/cgi-bin">
                            AllowOverride None
                            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                            Order allow,deny
                            Allow from all
                    </Directory>

                    ErrorLog /home/example.com/www/logs/ssl_error.log

                    # Possible values include: debug, info, notice, warn, error, crit,
                    # alert, emerg.
                    LogLevel warn

                    CustomLog /home/example.com/www/logs/ssl_access.log combined

                    #   SSL Engine Switch:
                    #   Enable/Disable SSL for this virtual host.
                    SSLEngine on
                    SSLCertificateFile /home/example.com/www/ssl/example.com.crt
                    SSLCertificateKeyFile /home/example.com/www/ssl/example.com.key
                    SSLCertificateChainFile /home/example.com/www/ssl/example.com.ca-bundle.crt

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

                            #   SSL Protocol Adjustments:
                            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>
    ##      /example.com

    </IfModule>
    # ====================/SSL========================

Lembre-se de que você deve comparar a configuração com seu ambiente, então adicione mais domínios como a.example.com antes de example.com. Espero que minha resposta tenha ajudado você de alguma forma.

    
por 18.01.2015 / 02:05
1

Minha resposta é muito longa para comentar, por isso, postei uma nova resposta. Você pode simplesmente adicionar o ServerAlias, não o VirtualHost inteiro, você pode ter especificado mais ServerAliases. Mas eu entendo o que você quer, então se você não quer tocar o arquivo ServerAlias de configuração do apache toda vez que você adicionar um novo site wp, então você pode tentar o VirtualDocumentRoot. Eu não sei muito como a estrutura de vários sites wordpress se parece. Por exemplo, você tem uma estrutura assim:

/var/www/html/ = main WP site example.com
/var/www/html/site1/ = site1.example.com
/var/www/html/a/ = a.example.com

e assim por diante. Eu suponho que você quer traduzir solicitações como esta:

site1.example.com > example.com/site1/
a.example.com > example.com/a/

Se este é o seu cenário como este, você deve tentar substituir o DocumentRoot pelo VirtualDocumentRoot:

ServerName example.com
ServerAlias *.example.com
VirtualDocumentRoot /var/www/html/%0

Você precisa ativar vhost_alias:

a2enmod vhost_alias

% 0 faz o nome completo da pasta como "ServerAlias", se o wordpress fizer /var/www/html/site1.example.com/, então você deve substituir% 0 por% 1, aqui está a tabela de regras (você também pode combinar eles):

0   the whole name
1   the first part
2   the second part
-1  the last part
-2  the penultimate part
2+  the second and all subsequent parts
-2+ the penultimate and all preceding parts
1+ and -1+  the same as 0

Se você tentar o VirtualDocumentRoot, lembre-se de comentar o DocumentRoot, caso contrário o Apache pode falhar ao iniciar. Aqui está a documentação de vhost_alias .

    
por 18.01.2015 / 11:17
1

Acabei resolvendo isso criando um certificado com um Certificado SubjectAltName (SAN).

A criação do CSR é um pouco mais envolvida. Você tem que criar um arquivo de configuração como este:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = <your state>
L = <your city>
O = <your company>
CN = <your IP address>
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = *.example.com

Isso é transmitido com sua solicitação de CSR, por exemplo:

openssl req -new -out san_example_com.csr -key san_example_com.key -config san_req.cnf 
    
por 18.01.2015 / 14:29