如何在 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 憑證中所述的以下步驟安裝了標準 Let's Encrypt 憑證,則 SSL 憑證會自動更新。不過,如果未正確設定,自動更新可能會失敗。

如果您按照如何在 Amazon Lightsail 託管的 Bitnami 堆疊中安裝萬用字元 Let's Encrypt SSL 憑證中的下述方法 2 安裝了萬用字元 Let's Encrypt 憑證,則您必須手動更新憑證。方法 2 不支援自動更新。

下列解決方案可在 WordPress、LAMP、Magento、MEAN 等 Bitnami 託管的 Lightsail 執行個體上手動更新憑證。下列解決方案無法讓您得知自動更新失敗的原因。

解決方案

前置作業

確定您用來安裝憑證的下列工具:

  • Bitnami 提供的「bncert 工具」或「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

更新使用 Certbot 工具安裝的 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 工作階段,請輸入下列命令:

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,否則會終止目前的 Screen 工作階段。

6.    若要確認 TXT 記錄已傳播到網際網路 DNS,請於 DNS 文字查詢中查詢。在文字方塊中輸入下列文字,然後選擇 TXT 查詢以執行檢查。請務必將 example.com 換成您的網域。

_acme-challenge.example.com

7.    如果您的 TXT 記錄已傳播到網際網路的 DNS,便會在頁面中看到 TXT 記錄值。您現在可以返回 Screen,然後按 ENTER 鍵。

8.    如果系統將您從 Shell 中移除,則可使用命令 screen -r SESSIONID 返回。執行命令 screen -ls 來取得工作階段 ID。

9.    如果 Certbot 的提示要求您再新增一個 TXT 記錄,請重複步驟 5 -8。

10.    系統成功產生 SSL 憑證之後,您會收到訊息「成功收到憑證」。


此文章是否有幫助?


您是否需要帳單或技術支援?