2021年9月30日星期四

网站SSL证书出现错误和解决过程

  9月30日,我的网站遇到一个很奇怪的问题,当天我在网站发了一篇新文章,之后就有不少用户向我反馈说,文章无法访问,访问时候提示证书错误,我感觉很奇怪,莫非网站SSL证书没有自动更新?我于是用电脑访问了一下网站,发现用电脑浏览器访问网站并没有出现异常。

  根据用户的截图,用户是用手机端Chrome浏览器访问的,于是我就用自己iPhone的Chrome访问了一下我的网站,访问的结果让我不禁大吃一惊,我的网站访问后竟然提示“ERR_CERT_DATE_INVALID”错误,证书的确出了问题。

  我的第一反应是网站的时间是不是有问题,登陆上去看了一下,时间没问题,那么是证书没有自动更新吗?我的网站使用的是Let's Encrypt的证书,我设置为自动更新,我查看了一下,证书刚刚在9月23日自动更新过一次,有效期没有到,SSL证书肯定没有过期。

  我自己测试,在PC端用Chrome访问Let's Encrypt的证书没问题,但用iPhone的Chrome访问就会报SSL证书错误“ERR_CERT_DATE_INVALID”。难道是这个证书更新的时候出了什么问题,但为什么23日更新到现在都没异常,就是今天出现异常?

  我陷入了迷茫之中,我的网站使用Let's Encrypt的免费证书,已经自动更新了好几年,几年来一直都没有问题,今天是第一次出现这种奇怪的问题。

  好在我早先为网站申请过多个品牌的SSL证书,我于是先紧急手动安装了网站的DigiCert免费版SSL证书,证书是一年有效期的,安装部署完成之后,使用手机端Chrome浏览正常,PC端浏览也恢复了正常。这说明问题的根源是Let's Encrypt的证书存在问题。

  考虑到Let's Encrypt的免费SSL证书今天出现的这种重大问题,同时考虑到这个证书3个月更换一次,可能会出现不可预知的更新错误,我决定,网站干脆就换DigiCert的免费版SSL证书算了,大不了就是一年手动更新一次SSL证书。

  我后来查询了一下相关新闻,这次的网站事故可能和这条新闻有关:《Let's Encrypt根证书过期预警 请在9月30日前及时更新》,时间正好对的上,正好是9月30日证书出错。下面是该新闻的全文:

  Let's Encrypt根证书过期预警 请在9月30日前及时更新

  安全研究员 Scott Helme 警告称:作为全球最大 HTTPs 证书提供商之一的 Let's Encrypt,即将于下周停用旧版根证书(Root CA)。这意味着数百万计依赖它的网站必须在 9 月 30 日前及时更新,不然将面临不受计算机、设备或 Web 浏览器信任的困扰。

Let's Encrypt的证书

  据悉,作为一家非盈利组织,Let's Encrypt 致力于通过颁发证书来推动设备和互联网数据通信的加密,确保不被第三方拦截并窃取信息。

  然而 Let's Encrypt 当前使用的 IdentTrust DST Root CA X3 根证书,也即将于下周过期。对于大部分网站的访客来说,9 月 30 日可能是个波澜不惊的一天。

  但是对于较旧的设备来说,可能还是会遇到一些问题 --正如 AddTrust External CA Root 在今年 5 月遭遇的根证书过期中断那样,造成Stripe、Red Hat 和 Roku 都受到了影响。

  Scott Helme 在一篇博文中写道:“考虑到 Let's Encrypt 和 AddTrust 之间的体量差异,我有预感 IdenTrust 根证书到期时又会让历史重演,甚至可能引发更多的问题”。

  当然,潜在易受影响的,主要是那些不怎么定期更新的设备 -- 比如嵌入式系统、或运行多年前软件版本的智能手机。

  举个例子,运行 macOS 2016 和 Windows XP SP3 的设备用户可能在月底之后遇到麻烦。依赖 OpenSSL 1.0.2 或更早版本的客户端平台也可能受到影响,此外还有尚未升级到新版固件的 PlayStation 老游戏机。

  鉴于 Android 生态有着长期存在且众所周知的问题,为了防止大多数智能机受到本次事件的影响,Let's Encrypt 已于今年早些时候未雨绸缪地过渡到了自家的 ISRG Root X1 证书(到期时间为 2035 年)。

  虽然包括 Android 7.1.1(Nougat)及更早版本的设备并不信任它,但 Let's Encrypt 还是能够通过对自颁证书进行交叉签名的方式,让大多数 Android 设备可在未来三年内避免受到波及。

  但若你还想在 Android 5.0(Lollipop)上安装 Firefox,最好还是尽早为迁移至新平台做打算。

  最后,自 2014 年成立以来,截止 2021 年 9 月初,Let's Encrypt 总计已经颁发了超过 20 亿份证书。