我在尝试设置 SSL 证书时遇到以下问题。打开根域名时,example.com
浏览器显示绿色标志,一切正常。但是尝试使用 www 版本打开时,www.example.com
我看到以下消息
www.example.com 使用无效的安全证书。
该证书仅对 example.com 有效
(错误代码:ssl_error_bad_cert_domain)
从这条消息中,我猜测 SSL 仅针对 example.com 颁发(如果我错了,请纠正我),现在除了购买另一个包含两个版本的证书外,还有其他方法可以避免出现该警告,即在向浏览器“example.com
显示”证书之前将所有流量重定向到 ?因此,当用户键入时,https://www.example.com
它将重定向到https://example.com
,其中证书已经有效。
我的网站文件中有这个
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/username/www/example
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.private.key
SSLCertificateChainFile /etc/apache2/ssl/example.com.intermediate.crt
</VirtualHost>
我尝试在 VH 中放置一个重定向条件,但没有帮助。
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^/(.*)$ https://example.com/$1 [L,R=301]
Apache 2.2.22,Debian 7.9
谢谢
答案1
不是。TLS 协议(及其过时的前身 SSL)在传输任何数据之前,会根据 URL 的主机部分(在本例中为完整域名)验证证书。这是设计使然,可满足多项安全要求。
您应该获得针对您的两个域名颁发的证书(它不称为“SSL”);用于执行此操作的功能称为 subjectAlternativeName 或 SAN。有时您还可以获得同时包含*.example.com
和的通配符证书example.com
。
答案2
首先,大多数证书应该已经带有 www。我还没有听说过只为根域颁发的证书。TLS 实际上会检查整个 URL,而不仅仅是根域,因此如果在 WWW 域上使用没有 WWW 的根证书,则该证书将无效。通配符和 EV 证书也存在,但这些证书要贵得多。
至于 SSL 证书,您是否考虑过使用 Let's Encrypt 而不是直接购买证书?Let's Encrypt 允许您免费为任意数量的子域(最多 100 个)颁发多个证书。