仅为根域颁发证书时避免出现 SSL 警告

仅为根域颁发证书时避免出现 SSL 警告

我在尝试设置 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 个)颁发多个证书。

相关内容