我在 Media Temples Dedicated Virtual 4.0 托管的域上安装了通配符 SSL 证书。下面是我尝试通过 SSL 提供的简单示例页面:https://ssltest.bblhosted.com/
现在,我问过的其他人(大约 4 或 5 人)都说该网站在他们的电脑上各种浏览器上都能正常运行,没有任何安全警告。但是,在我的电脑上得到的结果却不一致。
以下是我的结果。我运行的是最新的 OSX,通过 Parallels 运行 Windows 7,以及所有浏览器的最新版本:
OSX/火狐浏览器:显示挂锁,没有问题。 Windows 7/Firefox:警告 - “此连接不受信任”
OSX/Chrome:警告 — ‘此网站的安全性不受信任!’ Windows 7/Chrome:绿色挂锁 —‘身份已由 RappidSSL CA 验证’。
OSX/Opera:警告 — “此服务器的证书链不完整,且签名者未注册。接受吗?” Windows 7/Opera:挂锁显示“安全连接,安全记录清晰”。
OSX/Safari:警告 - “Safari 无法验证网站的身份”
Windows 7/IE:挂锁显示“与服务器的连接已加密”。
我的问题是,有人能提供任何见解,说明可能导致此问题的原因,或者如何解决它吗?这可能只是我电脑的问题吗?如果是,是什么问题?特别奇怪的是,对于相同的浏览器,我在 OSX 和 Windows 7 上得到的结果却截然相反。
即使您只是评论一下您正在使用的浏览器/操作系统,以及它是否适合您,那就太好了!谢谢。
_______ 更新:
Rapid SSL 的初始电子邮件给了我一份证书和一份 CA 证书。我已将其更新为包含两份 CA 证书这里,Christopher Perrin 链接到了此文章。
我已经测试了 ssltest.bblhosted.comRapid SSL 的工具它说一切都设置正确(尽管在我更改 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 中,我遇到了一堆错误,例如:“[警告] RSA 服务器证书是 CA 证书 (BasicConstraints: CA == TRUE !?)”
我经验不足,不知道它们是什么意思。明天我继续战斗!
答案1
您的证书链可能不完整。您可能需要添加RapidSSL CA 套件. 到您的证书。
在 Apache 中,您有选项SSLCertificateChainFile
。将其设置为您保存的路径RapidSSL CA 套件。
另一种选择是将链证书添加到您自己的证书中,如下所示
cat mycert.pem RapidSSL_CA_bundle.pem >> mychainedcert.pem
这应该可以解决问题。
解释
您显然是在 RapidSSL 购买的证书。但是 RapidSSL 并不是您的浏览器信任的 CA 之一。这没有问题,因为您的浏览器信任 GeoTrust,而 GeoTrust 信任 RapidSSL。您只需向浏览器显示证明这一点的证书即可。这就是您需要包含链文件的原因。
答案2
好的,Christopher Perrin 让我走上了正确的道路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 更改设置时都会被自动覆盖。
该文件包含以下行:
SSLCertificateFile /usr/local/psa/var/certificates/cert-Eq8jue
它显示了在哪里可以找到我的 SSL 证书。它不包含一行指示在哪里可以找到 CA 证书。因此它应该包含以下行:
SSLCertificateChainFile /usr/local/psa/var/certificates/cert-t8ReAO
(显然路径应该指向您自己的 CA 证书)。据我所知,没有包含此行是 Plesk 的一个错误。您可以将此行添加到该文件的正下方SSLCertificateFile
,然后重新启动 Apache,这样就可以正常工作 - 但是,如果您这样做,下次您在 Plesk 中更改该域的设置时,该文件将被覆盖,您将丢失所做的更改。在文件顶部,Plesk 给出了以下警告:
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
#
#IF YOU REQUIRE TO APPLY CUSTOM MODIFICATIONS, PERFORM THEM IN THE FOLLOWING FILES:
#/var/www/vhosts/ssltest.bblhosted.com/conf/vhost.conf
#/var/www/vhosts/ssltest.bblhosted.com/conf/vhost_ssl.conf
因此,我创建/var/www/vhosts/ssltest.bblhosted.com/conf/vhost_ssl.conf
并添加了一行:
SSLCertificateChainFile /usr/local/psa/var/certificates/cert-t8ReAO
除了这一行之外,您不需要添加任何其他内容。据我所知,所有其他设置仍将从 Plesk 生成的默认 httpd.include 文件中获取。
现在,您必须告诉 Plesk 查找 vhost_ssl.conf 文件,因为默认情况下它不会查找 - 即使您已创建它!通过 SSH 登录并执行以下命令来执行此操作:
/usr/local/psa/admin/bin/httpdmng --reconfigure-all
这将告诉 Plesk 查找所有域的 vhost.conf(和 vhost_ssl.conf)。如果需要,您也可以只对单个域执行此操作。
最后,重新启动 Apache,SSL 就可以正常工作了!
请注意,如果您添加另一个子域,则需要再次完成整个过程,包括执行终端命令以使 Plesk 查找新域或子域的 vhost.conf 和 vhost_ssl.conf。
答案3
我最近配置了完全相同的场景。我必须进一步验证,但是:
检查证书详细信息时,您将获得:
域名 DNS:*.bblhosted.com 域名 DNS:bblhosted.com
您获得 bblhosted.com 作为 AltDNSName。
我通过为根域提供一个证书并为每个其他子域提供一个通配符证书来解决您所遇到的行为。
这样,证书的模式掩码就会以浏览器可能检查的所有方式与给定的 URL 匹配。
TL;DR:获取两个新证书,一个仅使用“bblhosted.com”作为 altDnsName/CN,另一个使用“*.bblhosted.com”。
编辑:您可以通过运行以下人员提供的免费证书来检查是否存在此问题http://www.cacert.org。我没有使用商业证书,我将其作为我的主要 SSL 证书。唯一的麻烦是大多数操作系统不提供其根证书,因此您必须自行安装。
答案4
证书可以包含特殊权限信息访问扩大 (RFC-3280) 以及颁发者证书的 URL。大多数浏览器可以使用 AIA 扩展下载缺失的中间证书以完成证书链。但有些客户端(移动浏览器、OpenSSL)不支持此扩展,因此它们会将此类证书报告为不受信任。
你可以解决证书链不完整通过将证书中的所有证书连接到受信任的根证书(按此顺序排除)来手动颁发,以防止此类问题。请注意,受信任的根证书不应存在,因为它已包含在系统的根证书存储中。
您应该能够从颁发者处获取中间证书并自行将它们连接在一起。顺便说一句,我已经编写了一个脚本来自动执行该过程,它循环遍历 AIA 扩展以生成正确链接的证书的输出。https://github.com/zakjan/cert-chain-resolver