如果你是一位运维 (Dev Ops) 人员,在国庆长假期有没有收到紧急救援的电话呢?
网站分为 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 权限):
- 首先更新一下 apt
apt update
- 安装新版本的 ca-certificates
apt install ca-certificates
- 编辑
/etc/ca-certificates.conf
- 找到
mozilla/DST_Root_CA_X3.crt
,在前面加上!
符号,代表停用这张已过期的根证书。 - 运行
update-ca-certificates
更新一下 - 如果有运行网页伺服器的,重启一下就可以了。
更方便的 HTTPS 方案
LetsEncrypt 是很好的免费 SSL 证书签发服务,但其实为站点启用 HTTPS,也有其他更方便的方案。将域名直接停泊在 Cloudflare,然后启用他们家的 HTTPS 及 Proxy 服务即可,毋须自行管理。可以参考我这个视频,也有相关介绍。