当我在桌面上使用 Chrome 时,地址栏始终是绿色的。但是,在我的 Android 手机上,地址栏通常为绿色,但有时为红色。它表示我在证书链中使用了使用 SHA1 签名的证书。
这种情况发生非常随机,不会对我的服务器配置进行任何更改。它也会消失,不会对我的服务器配置进行任何更改,有时几分钟后,有时几天后。
我猜想这与 StartCom 的根证书有关,该证书使用 SHA256 和 SHA1 进行交叉签名。使用Qualys SSL 实验室(报告)我看到一个链包含使用 SHA1 签名的根证书。但是,由于这是根证书,因此我无法更改它。
Android 版 Chrome 地址栏为绿色时的屏幕截图 (我没有地址栏为红色时的截图,如果很快再次发生这种情况,我会添加)。
有什么办法可以解决这个问题?为什么 Android 有时似乎更喜欢较弱的 SHA1 签名证书而不是 SHA256 证书?我使用的是 Android 5.1.1。
答案1
我在许多设备、笔记本电脑、工作站和服务器中都看到过这种情况。尽管造成这种情况的原因有很多。我发现解决该问题的两个最常见问题是检查系统时钟中的时间同步。与位置发布相比,它会报告错误的时间并使验证无效。原因是当时钟与位置不同步时。它显示了较长的确认时间。导致系统记录可能的入侵,而在大多数情况下是时钟。重置时钟后,一切恢复正常。如果错误再次出现。那么我建议更换系统电池,因为它不再保持足够的电量来保持时钟同步。Chrome 浏览器是同步关闭的第一个迹象。它对时间变化更敏感。
答案2
我在一个使用 StartCom 证书的网站上也遇到了非常类似的问题。就我而言,问题出在我忘记下载新版本的子类1.服务器.ca.pem在更新我们的证书时。
以下是包含旧版本和当前版本的目录列表:
-rw-r--r-- 1 root root 2090 Feb 4 2015 sub.class1.server.ca.pem
-rw-r--r-- 1 root root 2212 Apr 18 2010 sub.class1.server.ca.pem.old
我一年前下载的旧版本仍可在某些浏览器上运行,但并非全部。
由于缓存,此类问题可能偶尔出现。某些浏览器会缓存中间证书。如果浏览器最近访问过使用正确中间证书的网站,则证书可能会被缓存。在这种情况下,配置错误的网站(缺少这些中间证书)可能看起来可以正常工作。
答案3
似乎没有足够的信息来解决可能导致验证偶尔失败的原因。(有关实际失败原因的信息可能会有所帮助。)
但是,关于最后关于在这两条链中更喜欢哪一条(您所描述的较弱的那条)的问题,至少有一些事情可以解决。
关于这两条链,除了根证书之外,两者都具有基于 SHA256 的签名,其中一条链具有基于 SHA1 的签名的根,而另一条链具有基于 SHA256 的签名的根,需要注意的是,根证书的签名算法本质上是无关紧要的。
根证书是自签名的,客户端信任这些证书是基于它们在其受信任证书列表中可用,而不是基于这些证书是否由其他方签名。
即,声称一条链比另一条链弱似乎是没有根据的(相同长度的 RSA 密钥,除根之外的签名算法相同)。