非 www 的 SSL 证书不起作用

非 www 的 SSL 证书不起作用

如果我要输入https://www.example.com网站正在运行。如果我要输入https://example.com该网站无法正常工作。证书应支持 example.com 和 www.example.com。我确实有欧洲 SSL 证书(最便宜的)。

短的:

https://www.example.com --> working
https://example.com --> not working

apache2.4.7 配置有什么问题?

<VirtualHost *:80>
DocumentRoot "/var/www/domain/live/web"

ServerAdmin [email protected]
ServerName www.example.de
DirectoryIndex app.php
<Directory "/var/www/domain/live/web">
     Options Indexes FollowSymlinks
     AllowOverride All
     Require all granted
</Directory>
</VirtualHost>

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>

            DocumentRoot "/var/www/example/live/web"
            ServerAdmin [email protected]
            ServerName www.example.com
            ServerAlias example.com
            DirectoryIndex app.php

            <Directory "/var/www/domain/live/web">
                    Options Indexes FollowSymlinks
                    AllowOverride All
                    Require all granted
            </Directory>

            ErrorLog /var/log/apache2/error_log
            CustomLog /var/log/apache2/access_log combined
            SSLEngine on
            SSLCertificateFile      /etc/apache2/ssl-certs/example.com.crt
            SSLCertificateKeyFile /etc/apache2/ssl-certs/example.key
            SSLCertificateChainFile /etc/apache2/ssl-certs/example.com.ca
            SSLProtocol All -SSLv2 -SSLv3
            SSLHonorCipherOrder On
            SSLCompression off
   </VirtualHost>

PS:我正在使用 symfony2.7 - 但我想这并不重要。

答案1

如果您不使用通配符证书,您的证书应该在主题备用名称字段。如果您使用的是 OpenSSL,则可以通过运行以下命令来验证:

openssl x509 -in /etc/apache2/ssl-certs/domain.com.crt -noout -text |
     grep -A1 "Subject Alternative"

这应该打印类似以下内容的输出:

        X509v3 Subject Alternative Name:
            DNS:domain.com, DNS:www.domain.com

如果您的 SSL/TLS 软件不支持主题备用名称扩展(大多数现代软件都应该支持),则证书唯一有效的名称是通用名称 (CN)在证书Subject字段中指定。可以通过运行以下命令查看:

openssl x509 -in /etc/apache2/ssl-certs/domain.com.crt -noout -text | grep Subject:

如果证书通配符证书,这将显示类似以下内容的输出:

    Subject: OU=Domain Control Validated, CN=*.domain.com

答案2

正如@Froggiz提到的,您的SSL证书可能仅对其中一个URI有效

假设您的 SSL 证书仅适用于 www 子域,那么最好使用 Apache 将非 www TLD 的请求重写为 www 子域:

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^(domain\.com)
RewriteRule ^(.)*$ https://www.%1/$1 [R,L]

虽然这不能完全回答你的问题,但它确实提供了一种解决问题的解决方法

相关内容