如果我要输入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]
虽然这不能完全回答你的问题,但它确实提供了一种解决问题的解决方法