Let’s Encrypt 根证书问题解决方案

今年9月30号开始,Let’s Encrypt 提供的交叉签名根证书可能会导致请求出现 certificate has expired 或证书过期的报错,QingStor 团队总结的挺好的,感谢并分享下解决方案,证书链一般会自动更新,新系统通常没这个问题,解决方案简单说也是更新客户端的系统或者软件。

一、升级系统

保持系统处于更新状态是解决此类问题的最佳方案,但如果不便进行完整的升级,请着重升级 openssl,gnutls 和 ca-certificates。

CentOS / RHEL
yum upgrade openssl gnutls ca-certificates

Ubuntu / Debian
apt upgrade openssl libgnutls30 ca-certificates

该解决方案适用于如下平台:
Windows >= XP SP3
macOS >= 10.12.1
iOS >= 10
Android >= 7.1.1
Mozilla Firefox >= 50.0
Ubuntu >= xenial / 16.04
Debian >= jessie / 8
Java 8 >= 8u141
Java 7 >= 7u151
NSS >= 3.26

二、手动禁用过期证书

如果系统已不再提供更新,或者不便进行系统更新,可以手动禁用过期证书,具体的操作方案如下:

Linux 平台

打开并编辑 /etc/ca-certificates.conf 文件,在 mozilla/DST_Root_CA_X3.crt 这一行前增加一个 ! (感叹号,英文,半角)以禁用该证书,使之变为 !mozilla/DST_Root_CA_X3.crt 编辑完成后,运行 update-ca-certificates 命令以更新系统的证书链。

在 CentOS 7 及其以后的版本

需要执行如下命令:cp /etc/pki/ca-trust/extracted/cadir/DST_Root_CA_X3.pem /etc/pki/ca-trust/source/blacklist update-ca-trust

Windows 平台

使用快捷键 Win + r 并输入 certmgr.msc 以打开系统的证书管理器,搜索 DST ROOT CA X3 并删除相关证书后重启即可。

Java 平台

执行如下命令:sudo keytool -delete -alias dstrootcax3 -cacerts -storepass 'changeit'