今年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'