我在使用 Media Temples Dedicated Virtual 4.0 托管的域上安装了通配符 SSL 证书。这是我尝试通过 SSL 提供的一个简单示例页面:https ://ssltest.bblhosted.com/
现在,我问过的其他人(大约 4 或 5 人)说该网站在他们的计算机上和各种浏览器中运行良好,没有安全警告。但是,我在计算机上得到的结果不一致。
这是我的结果。我正在运行最新的 OSX,通过 Parallels 运行 Windows 7,以及所有浏览器的最新版本:
OSX / Firefox:挂锁显示,没有问题。 Windows 7 / Firefox:警告 - “此连接不受信任”
OSX / Chrome:警告 - “此站点的安全性不受信任!” Windows 7 / Chrome:绿色挂锁 - “RappidSSL CA 验证的身份”。
OSX / Opera:警告 - '此服务器的证书链不完整,签名者未注册。接受?' Windows 7 / Opera: Padlock 显示“安全连接,干净的安全记录”。
OSX / Safari:警告 - “Safari 无法验证网站的身份”
Windows 7 / IE: Padlock 显示“此服务器连接已加密”。
我的问题是,任何人都可以深入了解可能导致这里问题的原因,或者如何解决它吗?会不会只是我电脑的问题,如果是,怎么办?特别奇怪的是,对于相同的浏览器,我在 OSX 和 Windows 7 上得到了相反的结果。
即使您可以评论您正在使用的浏览器/操作系统,以及它是否适合您,那也很棒!谢谢。
_______ 更新:
来自 Rapid SSL 的初始电子邮件给了我一个证书和一个 CA 证书。我已经更新它以在此处包含两个 CA 证书,Christopher Perrin 链接到该证书。
我已经使用Rapid SSL 的工具测试了 ssltest.bblhosted.com,它说一切都设置正确(尽管在我更改 CA 证书之前该工具也成功了)。
此工具出错 - 并表示很可能是中间证书问题。
我正在通过 Plesk 更新证书,但确实收到警告“警告:CA 证书未签署证书。”,尽管根据此,您通常可以忽略该警告。
SSL 适用于https://www.bblhosted.com/、https://bblhosted.com/和https://anythinggoeshere.bblhosted.com/ - 它仅不适用于已明确设置的子域。
在 var/log/httpd/error_log 中,我有一堆错误,例如:“RSA 服务器证书通配符 CommonName (CN) `*.bblhosted.com' 与服务器名称不匹配!?”
在 ssl_error_log 中,我有一堆错误,例如:“[warn] RSA 服务器证书是 CA 证书(BasicConstraints:CA == TRUE!?)”
我没有足够的经验来了解他们的意思。明天继续战斗!
您的证书链可能不完整。您可能需要添加RapidSSL CA Bundle。到你的证书。
在 Apache 中,您可以选择
SSLCertificateChainFile
. 将其设置为您保存RapidSSL CA Bundle的路径。另一种选择是将链证书添加到您自己的证书中,方法是像这样将它们附加到您的证书中
这应该可以解决问题。
解释
您显然是在 RapidSSL 购买了证书。RapidSSL 虽然不是您的浏览器信任的 CA 之一。这没问题,因为您的浏览器信任 GeoTrust,而 GeoTrust 信任 RapidSSL。您只需向浏览器显示证明这一点的证书。这就是您需要包含链文件的原因。
好的,克里斯托弗佩林让我走上了正确的轨道
SSLCertificateChainFile
- 谢谢。这是具体细节,以防他们帮助别人。我使用的是 Plesk 11,显然我引用的路径对于其他人来说会有所不同。当我创建子域 ssltest.bblhosted.com 时,Plesk 会在
/var/www/vhosts/ssltest.bblhosted.com/conf/13558069200.18494000_httpd.include
(或类似位置)创建一个文件。该文件有效地起到了 vhost.conf 文件(或 vhost_ssl.conf)的作用,除了它是由 plesk 自动生成的,并且每次您通过 Plesk 更改设置时都会被自动覆盖。该文件包含以下行:
它显示了在哪里可以找到我的 SSL 证书。它不包含指示在哪里可以找到 CA 证书的行。所以它应该包含以下行:
(显然该路径应指向您自己的 CA 证书)。据我所知,不包括这一行的事实是 Plesk 中的错误。您可以将该行添加到该文件的正下方
SSLCertificateFile
,然后重新启动 Apache,它会起作用 - 但是,如果您这样做,下次您在 Plesk 中更改该域的设置时,该文件将被覆盖,并且您将丢失您的更改。在文件的顶部,Plesk 给出了这个警告:因此,我创建
/var/www/vhosts/ssltest.bblhosted.com/conf/vhost_ssl.conf
并向其中添加了一行:除了那一行,您不需要添加任何其他内容。据我所知,所有其他设置仍将从 Plesk 生成的默认 httpd.include 文件中获取。
现在,您必须告诉 Plesk 查找 vhost_ssl.conf 文件,因为默认情况下它不会 - 即使您已经创建了它!通过 SSH 登录并执行以下命令来执行此操作:
这将告诉 Plesk 为所有域寻找 vhost.conf(和 vhost_ssl.conf)。如果需要,您也可以只对一个域执行此操作。
最后,重新启动 Apache,SSL 就可以工作了!
请注意,如果您添加另一个子域,则需要再次执行整个过程,包括执行终端命令让 Plesk 为您的新域或子域查找 vhost.conf 和 vhost_ssl.conf。
我最近配置了这个场景。我必须进一步验证,但是:
检查您的证书详细信息时,您会得到:
域名 DNS: *.bblhosted.com 域名 DNS: bblhosted.com
您将 bblhosted.com 作为 AltDNSName。
我通过为根域提供一个证书和为每个其他子域提供一个通配符证书来解决您遇到的行为。
这样,证书的模式掩码将以浏览器检查它的所有可能方式匹配给定的 url。
TL;DR:获得两个新证书,一个只有“bblhosted.com”作为 altDnsName/CN,另一个带有“*.bblhosted.com”。
编辑:您可以通过http://www.cacert.org上的人员运行一些免费证书来检查这是否是问题所在。我没有为商业证书而烦恼,我将它们作为我的主要 ssl 证书。唯一的麻烦是大多数操作系统不提供他们的根证书,所以你必须自己安装它。
证书可以包含特殊的授权信息访问扩展 ( RFC-3280 ),其中包含指向颁发者证书的 URL。大多数浏览器可以使用 AIA 扩展来下载丢失的中间证书以完成证书链。但有些客户端(移动浏览器、OpenSSL)不支持此扩展,因此他们将此类证书报告为不受信任。
您可以手动解决证书链不完整的问题,方法是将证书中的所有证书串联到受信任的根证书(独占,按此顺序),以防止此类问题。请注意,受信任的根证书不应该存在,因为它已经包含在系统的根证书存储中。
您应该能够从颁发者那里获取中间证书并自己将它们连接在一起。顺便说一句,我已经编写了一个脚本来自动执行该过程,它遍历 AIA 扩展以生成正确链接的证书的输出。https://github.com/zakjan/cert-chain-resolver