如何在 Lightsail 实例上托管的 Bitnami 堆栈中续订 Let's Encrypt SSL 证书?

上次更新时间:2021 年 10 月 21 日

为我在 Amazon Lightsail Bitnami 实例中的网站安装的 Let's Encrypt SSL 证书即将过期。我该如何续订?

简短描述

Let's Encrypt SSL 证书会在创建 90 天后过期。如果您按照如何在 Amazon Lightsail 上托管的 Bitnami 堆栈中安装标准的 Let's Encrypt SSL 证书?中提供的步骤安装了标准的 Let's Encrypt 证书,则 SSL 证书会自动续订。但是,如果配置不正确,自动续订可能会失败。

如果您按照如何在 Amazon Lightsail 上托管的 Bitnami 堆栈中安装通配符 Let's Encrypt SSL 证书?中的方法 2 安装了通配符 Let's Encrypt 证书,则 需要手动续订证书。方法 2 不支持自动续订。

下面的解决方法涉及在 Bitnami 托管的 Lightsail 实例上手动续订证书,例如 WordPress、LAMP、Magento、MEAN 等。下面的解决方法未提供有关查找自动续订失败原因的指南。

解决方法

开始之前

确定您使用下面的哪个工具安装了证书:

  • Bitnami 提供的“bncert-tool”或“Lego”客户端
  • “Certbot”软件包

要识别您在安装 SSL 证书时使用的工具,请执行以下操作:

1.    运行以下命令在目录 /etc/letsencrypt/opt/bitnami/letsencrypt 中搜索证书文件。请务必将 DOMAIN 替换为您的域名。

sudo grep -irl "$(openssl s_client -verify_quiet -showcerts -connect DOMAIN:443 2>/dev/null | sed -n '/BEGIN/,/END/{p;/END/q}' | head -n 3 | tail -n 2)" /opt/bitnami/letsencrypt /etc/letsencrypt

2.    如果证书文件位于 /opt/bitnami/letsencrypt 的子目录中,那么证书可能是使用 bncert-toolLego 客户端安装的。要进行验证,请运行以下命令:

sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list

如果第 1 步中命令的输出与上述命令提供的证书路径一致,则说明您的证书是使用 bncert-toolLego 安装的。

如果证书文件位于 /etc/letsencrypt 的子目录中,那么证书可能是使用 Certbot 安装的。要进行验证,请运行以下命令:

sudo certbot certificates

如果第 1 步中命令的输出与上述命令提供的证书路径(如有)一致,则说明您的证书是使用 Certbot 安装的。

续订使用 bncert-tool 或 Lego 工具安装的 Let's Encrypt 证书

运行以下命令:

sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start

在上述命令中,将 EMAIL-ADDRESSDOMAIN 替换为相应的值。

您可以使用任何有效的电子邮件地址。您也可以使用安装证书时使用的同一电子邮件地址。您可以运行以下命令来检索安装证书时使用的电子邮件:

sudo ls /opt/bitnami/letsencrypt/accounts/acm*

您可以运行以下命令来确认域名:

sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list

续订使用 Certboto 工具安装的 Let's Encrypt 证书

确定您在安装证书时使用的身份验证方法。为此请运行以下命令。将 DOMAIN 替换为证书的主域名。要确定域名,请运行 sudo certbot certificates 命令。

sudo cat /etc/letsencrypt/renewal/DOMAIN.conf

在命令输出中,查看 authenticator 参数的值。

如果 authenticator 参数的值为 standalonewebrootapachenginxdns-route53 等等,则通过运行以下命令以完成续订:

sudo /opt/bitnami/ctlscript.sh stop
sudo certbot renew
sudo /opt/bitnami/ctlscript.sh start

上述命令会续订所有已经按照并且到期需要续订的证书。

如果 authenticator 参数的值为 manual 并且 pref_challs 参数的值为 dns,则无法设置自动续订。您必须使用以下步骤手动续订。请注意,每次续订证书时都必须重复此步骤。

1.    此方法需要在域的 DNS 提供程序中添加 TXT 记录。此过程可能需要一些时间,因此最佳实践是在 Linux GNU Screen 中运行命令以防止会话超时。要启动屏幕会话,请输入以下命令:

screen -S letsencrypt

2.    运行以下命令并查找 Domains 参数的值。在以下示例中,将 DOMAIN 替换为证书的主域名。

sudo certbot certificates -d DOMAIN

3.    运行以下命令续订证书。务必要按相同的顺序包含您使用 -d 选项在上一个命令中找到的每个域。如果包含其他域,则在您移除任何当前域或更改域的顺序时,系统可能会创建一个名为 DOMAIN-001 的新证书,而不是续订原始证书。

sudo certbot certonly --manual --preferred-challenge dns -d DOMAIN-1 -d DOMAIN-2 --force-renewal

4.    您会收到一条提示,说明会将 TXT 记录添加到域的 DNS 记录以验证您是否拥有指定的域。Let's Encrypt 会提供您必须用于验证的单个或多个 TXT 记录。

5.    当您在屏幕上看到 TXT 记录时,首先将提供的记录添加到域名的 DNS 中。在确认 TXT 记录已传播到互联网 DNS 之前,请勿按 ENTER 键。另外,请勿按 CTRL+D,因为这将终止当前屏幕会话。

6.    要确认 TXT 记录已传播到互联网 DNS,请在 DNS Text Lookup 中查找。在文本框中输入以下文本,然后选择 TXT Lookup 以运行检查。请确保将 example.com 替换为您的域。

_acme-challenge.example.com

7.    如果您的 TXT 记录已传播到互联网的 DNS,则可以在页面中看到 TXT 记录值。现在,您可以返回屏幕并按 ENTER 键。

8.    如果您已从命令行管理程序中移除,则可以使用命令 screen -r SESSIONID 返回。通过运行命令 screen -ls 获取会话 ID。

9.    如果 Certbot 提示您添加其他 TXT 记录,请重复第 5 至 8 步。

10.    成功生成 SSL 证书后,您会收到消息 Successfully received certificate(已成功收到证书)。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?