如何解决 EC2 实例上的 "Let's Encrypt" 证书过期的错误消息?

2 分钟阅读
0

我无法从具有 "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 设备兼容性

AWS 官方
AWS 官方已更新 2 年前