我无法从具有 "Let's Encrypt" 证书的 Amazon Elastic Compute Cloud(Amazon EC2)实例连接到远程 URL。或者,我收到一条错误消息,提示我的“Let's Encrypt”证书已过期。如何修复此问题?
简短描述
由于“Let's Encrypt”交叉签名的 DST Root CA X3 已过期,某些 EC2 实例出现证书已过期的错误。运行以下操作系统的实例可能无法使用“Let's Encrypt”证书连接到服务器。2021 年 9 月 30 日之后,这些操作系统可能还将无法通过访问“Let's Encrypt”端点颁发或更新证书:
- CentOS 和 RHEL 7 或更低版本
- Amazon Linux 和 Amazon Linux 2
- Ubuntu 16.04 或更低版本
- Debian 8 或更低版本
出于兼容性考虑,“Let's Encrypt”证书默认使用由 2021 年 9 月 30 日到期的 DST Root CA X3 证书交叉签名的证书链。
使用 OpenSSL 1.0.2 的话,始终首选的是不受信任的证书链。这意味着可以看到过期的证书,并且整个证书链都因为过期而不被信任。具有 OpenSSL 的受影响版本和根存储中的 DST Root CA X3 证书的服务器无法颁发或更新“Let's Encrypt”证书。受影响的服务器也无法访问正在使用它们的服务器。
解决方法
此问题已在 Ubuntu 16.04 版本中通过最新版本的 OpenSSL 软件包得到纠正。Amazon Linux 和 Red Hat 还发布了新的 CA 证书软件包,该软件包拒绝了即将到期的证书。
软件包更新
**Ubuntu 16.04:**将 OpenSSL 更新为 1.0.2g-1ubuntu4.20 或更新版本。
**Amazon Linux 和 Amazon Linux 2:**可以重新启动 Amazon Linux 实例以自动应用更新后的 CA 证书包。如果必须更新现有实例,则可以通过运行以下命令来更新 CA 证书:
sudo yum update ca-certificates
**注意:**如果您使用的是具有锁定存储库 GUID 的 AMI(例如 Elastic Beanstalk),请使用以下命令安装更新后的 CA 证书包:
Amazon Linux 1
sudo yum install https://cdn.amazonlinux.com/patch/ca-certificates-update-2021-09-30/ca-certificates-2018.2.22-65.1.24.amzn1.noarch.rpm
Amazon Linux 2
sudo yum install https://cdn.amazonlinux.com/patch/ca-certificates-update-2021-09-30/ca-certificates-2021.2.50-72.amzn2.0.1.noarch.rpm
**Red Hat 和 CentOS 7:**将 CA 证书包更新为 2021.2.50-72.el7_9 或更高版本。
**注意:**低于 16.04 的 Ubuntu 版本已停止使用。也许可以进行手动干预,但不受支持。
对基于 Amazon Linux 的系统进行手动修复
最佳做法是使用前面的 yum 命令更新现有实例。要就地修改系统,请改为使用以下命令:
Amazon Linux 1
sudo sed -i'' '/Alias: DST Root CA X3/,/No Rejected Uses./d' /usr/share/pki/ca-trust-source/ca-bundle.trust.crt
sudo update-ca-trust
Amazon Linux 2
sudo sed -i'' '/DST Root CA X3/,/\[p11-kit-object-v1\]/d' /usr/share/pki/ca-trust-source/ca-bundle.trust.p11-kit
sudo update-ca-trust
对基于 Red Hat 的系统进行手动修复
1. 备份现有的根存储区:
cp -i /etc/pki/tls/certs/ca-bundle.crt ~/ca-bundle.crt-backup
2. 将证书添加到拒绝列表目录:
trust dump --filter "pkcs11:id=%c4%a7%b1%a4%7b%2c%71%fa%db%e1%4b%90%75%ff%c4%15%60%85%89%10" | openssl x509 | sudo tee /etc/pki/ca-trust/source/blacklist/DST-Root-CA-X3.pem
3. 更新根存储区:
sudo update-ca-trust extract
4. 验证证书是否被删除:
diff ~/ca-bundle.crt-backup /etc/pki/tls/certs/ca-bundle.crt
相关信息
扩展“Let's Encrypt”证书的 Android 设备兼容性