我的托管服务提供商最近重新颁发并重新安装 SSL 证书对于我的域名,因为他们错误地让旧域名过期了。
我现在可以浏览网站通过 HTTPS,我的主机也是如此,其他一些用户也是如此。
然而,一些用户(至少数百人中的十几人)仍然Your connection is not secure
在不同的浏览器和平台上收到错误消息。(事实证明,诊断我无法重现的问题非常困难。)
我知道不同的浏览器使用不同的证书颁发机构 (CA) 列表。
- 为什么与我使用相同版本的 Firefox(OS X 上为 45.0.1)的用户会收到错误
SEC_ERROR_UNKNOWN_ISSUER
(仅适用于我的网站),而我却不会?这是什么原因造成的?该用户清除了缓存并重新启动了笔记本电脑。
我跑了一个在 digicert.com 上进行 SSL 检查。结果是这样的:
SSL 证书不受信任
该证书未由受信任的机构签名(根据 Mozilla 的根存储进行检查)。如果您从受信任的机构购买了证书,则可能只需安装一个或多个中间证书。请联系您的证书提供商以获取有关您的服务器平台的帮助。
- 如果是这样的话,为什么我能够连接到该网站并且没有 SSL 错误?
答案1
您的证书的证书链不完整。很可能是您的提供商在安装新证书时未能安装某些中间证书。
大多数情况下,此类中间证书由 SSL 机构提供,以支持某些较旧的浏览器和操作系统。因此,虽然它对您有用,但对您的某些客户却不起作用。
一个非常好的实用程序来检查您的网站是否存在 SSL 问题SSLlabs 的 SSL 服务器测试。如您在上面的链接中看到的,您不仅遇到了链问题,而且用于创建证书的签名算法也很弱,您的网络服务器仍然容易受到POODLE 攻击并且仍然支持 RC4,这也被认为是不安全的......
我不想对您的网络服务器提供商发表任何不满,但站在您的立场上,我会给他们发邮件,让他们尽快解决所有这些问题,或者更换其他提供商……
答案2
为了使证书受信任,它必须由您的浏览器/操作系统组合本身信任的实体签名,或者由这样的实体签名。这通常由一个受信任的根 CA 完成,该根 CA 签名中间 CA,中间 CA 签名您的证书。这将创建一个链,如下所示:
- 根 CA 是您的计算机信任的,并签名
- 中级 CA,负责签署
- 您的证书,仅由于指向根 CA 的链而受到信任。
这里的问题在于中间 CA 证书。为了确保每个人都可以验证证书链直至根 CA,您的提供商应在其服务器配置中包含中间证书。在本例中,他们没有这样做。
它之所以对某些用户有效,是因为他们在自己的“信任库”中拥有中间证书。在这种情况下,他们会接受您的证书,因为他们已经信任中间证书。但是,如果您的访问者使用不同的操作系统/浏览器,他们就没有中间证书,因此他们需要从您的 Web 服务器获取证书 - 而您的 Web 服务器不会分发证书,因此他们无法验证证书。
答案3
如果你使用HTTP 公钥固定并且您的提供商为您提供了新证书,那么公钥可能已经更改。这些密钥将保存在客户端浏览器中,保存期限为您指定的时间。
答案4
我遇到了同样的错误,结果发现我忘记添加指向我的 fullchain.pem 的 SSLCertificateChainFile 指令。添加该指令后,我从 digicert 收到“TLS 证书已正确安装”的信息。
SSLCertificateFile /etc/letsencrypt/live/unternet.net/fullchain.pem
SSLCertificateChainFile /etc/letsencrypt/live/unternet.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/unternet.net/privkey.pem