通配符 SSL 跨浏览器/操作系统/计算机的行为不一致

jos*_*ing 5 security ssl https ssl-certificate

我在使用 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:挂锁显示“安全连接,干净的安全记录”。

OSX / Safari:警告 - “Safari 无法验证网站的身份”

Windows 7 / IE:挂锁显示“此与服务器的连接已加密”。

我的问题是,任何人都可以提供有关可能导致此问题的原因的任何见解,或者如何解决它?难道这只是我电脑的问题,如果是,那是什么?特别奇怪的是,对于相同的浏览器,我在 OSX 和 Windows 7 上得到了相反的结果。

即使您可以评论您正在使用的浏览器/操作系统,以及它是否适合您,那也很棒!谢谢。

_______ 更新:

来自 Rapid SSL 的初始电子邮件给了我一份证书和一份 CA 证书。我已将其更新为在此处包含 Christopher Perrin 链接到的两个 CA 证书。

我已经使用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 中,我有一堆错误,例如:“[警告] RSA 服务器证书是 CA 证书(BasicConstraints:CA == TRUE !?)”

我没有足够的经验来知道他们的意思。我明天继续战斗!

Chr*_*rin 8

您的证书链可能不完整。您可能需要添加RapidSSL CA Bundle。到您的证书。

在 Apache 中,您可以选择SSLCertificateChainFile。将此设置为您保存RapidSSL CA Bundle的路径。

另一种选择是将链证书添加到您自己的证书中,方法是将它们附加到您的证书中

cat mycert.pem RapidSSL_CA_bundle.pem >> mychainedcert.pem
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。

解释

您显然是在 RapidSSL 上购买的证书。RapidSSL 虽然不是您的浏览器信任的 CA 之一。这没有问题,因为您的浏览器信任 GeoTrust,而 GeoTrust 信任 RapidSSL。您只需要向浏览器显示证明这一点的证书。这就是您需要包含链文件的原因。


jos*_*ing 3

好吧,克里斯托弗·佩林(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
Run Code Online (Sandbox Code Playgroud)

它显示在哪里可以找到我的 SSL 证书。它不包含指示在哪里可以找到 CA 证书的行。所以它应该包含以下行:

SSLCertificateChainFile /usr/local/psa/var/certificates/cert-t8ReAO
Run Code Online (Sandbox Code Playgroud)

(显然该路径应该指向您自己的 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
Run Code Online (Sandbox Code Playgroud)

因此,我创建/var/www/vhosts/ssltest.bblhosted.com/conf/vhost_ssl.conf并向其中添加了单行:

SSLCertificateChainFile /usr/local/psa/var/certificates/cert-t8ReAO
Run Code Online (Sandbox Code Playgroud)

除了这一行之外,您不需要添加任何其他内容。据我所知,所有其他设置仍将从 Plesk 生成的默认 httpd.include 文件中获取。

现在,您必须告诉 Plesk 查找 vhost_ssl.conf 文件,因为默认情况下它不会 - 即使您已经创建了它!通过 SSH 登录并执行以下命令来执行此操作:

/usr/local/psa/admin/bin/httpdmng --reconfigure-all
Run Code Online (Sandbox Code Playgroud)

这将告诉 Plesk 查找所有域的 vhost.conf(和 vhost_ssl.conf)。如果需要,您也可以仅针对单个域执行此操作。

最后,重新启动 Apache,SSL 就可以工作了!

请注意,如果您添加另一个子域,则需要再次执行整个过程,包括执行终端命令以使 Plesk 查找新域或子域的 vhost.conf 和 vhost_ssl.conf。