9月30日后,发现有些网站出现安全证书错误了?原因是你的浏览器/OpenSSL太旧了。

如果你是一位运维 (Dev Ops) 人员,在国庆长假期有没有收到紧急救援的电话呢?

Screenshot 2021-10-05 at 3.43.22 PM.png

网站分为 HTTP 连接及 HTTPS 连接,大家可能在网址中都察觉到它们的存在,前者是无加密连接,后者是加密连接。最近几年,由于各大浏览器及互联网公司的极力推动,网站采用 HTTPS 连接几乎是标准。

而要将网站改为 HTTPS 连接,并不是单纯在网址上加个 S 就可以的,背后涉及到一张安全证书 (SSL Certificate)。而这张证书,是要钱的。不过,为了让 HTTPS 普及,由几大科技巨头和学术机构,包括 Electronic Frontier Foundation、Mozilla 基金会、Michigan 大学、Akamai 和 Cisco 公司组成了一个非牟利机构 LetsEncrypt,主营免费的 SSL 安全证书签发。截至 2021 年 9 月,该机构已签发出 20 亿张证书(LetsEncrypt 的证书是三个月一签,一般付费的是一年一签),支持 2.6 亿个网站。

根证书 (Root Certificate)

如此大体量的机构,又与 2021 年 9 月 30 日有什么关系?原来,安全证书并不是随便一位阿茂就能发出的,作业系统和浏览器都要相信你的证书才可。所以 LetsEncrypt 开始提供服务的时候,使用了一张由 2000 年 9 月 30 日建立,有效期至 2021 年 9 月 30 日的根证书 (Root Certificate) DST Root CA X3 所签发,这样做的好处是,各大作业系统和浏览器都能够信任 LetsEncrypt 所签发的证书。

不过,但凡证书都有期限,所以 LetsEncrypt 早在 2015 年,已经开始“过渡”至另一张根证书 ISRG Root X1(StackOverflow也在用),它的有效期到 2035 年。问题在于如何让各大作业系统和浏览器信任这一张证书呢?答案就是透过系统更新。不过在科技界,普及更新总是困难的,即使历经几年时间,如果一直不进行系统或软件更新,仍然会受影响。

受影响的作业系统

  • Windows XP SP3 以下
  • macOS 10.12.1 以下
  • iOS 10 以下
  • Android 7.1.1 以下
  • Ubuntu 16.04 以下

解决方法

如果你是普通用户,只需将作业系统及浏览器升级,基本上就完事了。不过,就像我手上有几台 Ubuntu 伺服器,版本在 16.04 以下的,又需要连接至 LetsEncrypt 所生成证书的站点,就需要做一些手动调整(需要使用 root 权限):

  1. 首先更新一下 apt apt update
  2. 安装新版本的 ca-certificates apt install ca-certificates
  3. 编辑 /etc/ca-certificates.conf
  4. 找到 mozilla/DST_Root_CA_X3.crt,在前面加上 ! 符号,代表停用这张已过期的根证书。
  5. 运行 update-ca-certificates 更新一下
  6. 如果有运行网页伺服器的,重启一下就可以了。

更方便的 HTTPS 方案

LetsEncrypt 是很好的免费 SSL 证书签发服务,但其实为站点启用 HTTPS,也有其他更方便的方案。将域名直接停泊在 Cloudflare,然后启用他们家的 HTTPS 及 Proxy 服务即可,毋须自行管理。可以参考我这个视频,也有相关介绍。

猜你喜欢

转载自juejin.im/post/7016670459525759013