21 May 2014

今天实验室的一位同学问我一个关于浏览器证书的问题。他在某个服务器上用Chrome和IE都无法访问一个HTTPS网站(具体来说是https://www.coursera.org),提示信息说无法验证该网站的安全证书。 但同一个网站在我的PC上却可以访问。我去查看了一下,弄清楚了原因并帮他解决了这个问题。

上述网站的证书颁发日期是2014年4月,也就是最近刚更新过。如果说这个证书不合法吧,可是在别的机器上却没有问题。 我们尝试了手动把证书安装在可信任区域,还是不行。我们还尝试了各种代理和VPN,发现这个问题都还存在,并非是由于网络原因导致的。

我去网络上搜索了一下浏览器的证书验证过程。了解到这样一个情况:包括Chrome和IE在内的大多数浏览器都是直接调用操作系统的证书验证模块, 但Firefox例外,它实现了自己独立的证书验证过程。我在那个服务器上安装了Firefox试了一下,果然就可以正常访问了!

由此可以推断,操作系统的证书验证给出了错误的结果,Chrome只不过使用了这个错误结果。 那个服务器的操作系统是某个老版本的Windows Server,我估计它可能对新的证书不支持。要解决这个问题,要么更新系统,要么不用系统的证书验证。 最终他们换用了Firefox,也就是选择了不采用系统的证书验证。

这件事里面,Firefox出了风头。Chrome,你没发现大家都在看你吗?