踩坑:根证书过期
缘起
有人说:
职能团队不能说“不”(There is no “NO”.)。
意思是需求方提出的不管是什么需求,都要有解决方案。这不,公司由于业务需要,某些个团队有科学上网的需求(其实技术团队也有),提到运维这里了,我没法说搞不定呀,于是只能吭哧吭哧想办法解决,最早一版我自己用了好几年的方案被毙,理由是不要用,太复杂(其实也没有被毙,技术团队大多在用这个方案)。于是我就有整了个简单好用的方案,这几天正忙着方案落地呢。
在服务器上安装软件的时候,发现了这个问题。
问题详情
两台 Amazon Linux 2 的服务器,在我用 rpm 命令加 url 方式安装软件的时候,一台成功,一台出错。
仔细查,出错的那台是因为 https://download.libreswan.org/ 的证书过期。但为什么另外一台又没有问题呢?继续查:
1 | openssl s_client \ |
两台机器上分别执行上面的这个脚本,结果发现:
出错的那一台报(以下是部分输出):
depth=3 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
好的那一台却报的是(以下是部分输出):
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let’s Encrypt, CN = R3
verify return:1
depth=0 CN = libreswan.org
verify return:1
从看到的证书链上来看:
- 证书 “CN=libreswan.org” 是“C=US/O=Let’s Encrypt/CN=R3” 签发的
- 而 “C=US/O=Let’s Encrypt/CN=R3”是“C=US/O=Internet Security Research Group/CN=ISRG Root X1”签发的
- “C=US/O=Internet Security Research Group/CN=ISRG Root X1”是“O=Digital Signature Trust Co./CN=DST Root CA X3”签发的
而过期的正是这个“DST Root CA X3”证书。
原因所在
最后发现两台机器的区别在哪里?在于软件包 ca-certificates 版本不一样,这个正是放系统自带信任的 CA 证书的软件包。其中报错的那台,ca-certificates 有“DST Root CA X3”这个证书;而不报错的那台 ca-certificates 里没有“DST Root CA X3”这个证书。
解决方案
问题解决也简单,报错的那台升级下 ca-certificates 即可:
1 | yum -y update ca-certificates |
思考
其实在两个不同版本的 ca-certificates 里,“ISRG Root X1”都在信任的根证书列表里面,为什么信任的根证书列表里有“DST Root CA X3”会出错呢?
附录
其实这些,AWS 官方早有文档说法,参见链接: