View a markdown version of this page

使用 Let's Encrypt 和 Certbot 在 Nginx 執行個體上啟用 HTTPS - Amazon Lightsail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Let's Encrypt 和 Certbot 在 Nginx 執行個體上啟用 HTTPS

Amazon Lightsail 可讓您輕鬆使用 Lightsail 負載平衡器以藉由 SSL/TLS 保護您的網站和應用程式。然而,使用 Lightsail 負載平衡器通常可能不會是正確的選擇。或許您的網站不需要負載平衡器提供的擴展能力或容錯能力,或者您是要最佳化成本。

在後者的情況中,您可能會考量使用 Let's Encrypt 以取得免費的 SSL 憑證。若是如此,則無問題。您可以整合這些憑證和 Lightsail 執行個體。本教學課程說明如何使用 Certbot 請求 Let's Encrypt 萬用字元憑證,並將其與您的 Nginx 執行個體整合。

內容

步驟 1:完成先決條件

如果您尚未完成,請完成下列先決條件:

步驟 2:在 Lightsail 執行個體安裝 Certbot

Certbot 是用於向 Let's Encrypt 請求憑證並將其部署到 Web 伺服器的用戶端。Let's Encrypt 使用 ACME 協助發出憑證,而 Certbot 是一種啟用 ACME 的用戶端,可與 Let's Encrypt 互動。

在 Lightsail 執行個體安裝 Certbot
  1. 登入 Lightsail 主控台

  2. 在Lightsail首頁的執行個體索引標籤上,選擇您要連線之執行個體的 SSH 快速連線圖示。

    Lightsail 首頁的 SSH 快速連接。
  3. 在 Lightsail瀏覽器型 SSH 工作階段連接後,輸入下列命令以更新執行個體上的套件:

    sudo apt-get update
  4. 輸入下列命令以安裝軟體屬性套件。Certbot 的開發人員使用個人套件封存 (PPA) 來分發 Certbot。軟體屬性套件可讓 PPA 的使用更有效率。

    sudo apt-get install software-properties-common -y
  5. 輸入下列命令更新 apt 以包含新的儲存庫:

    sudo apt-get update -y
  6. 輸入下列命令以安裝 Certbot:

    sudo apt-get install certbot -y

    Certbot 現在已安裝於您的 Lightsail 執行個體。

步驟 3:請求 Let’s Encrypt SSL 萬用字元憑證

開始從 Let's Encrypt 請求憑證的程序。使用 Certbot (請求萬用字元憑證) 可讓您針對網域及其子網域使用單一憑證。例如,單一萬用字元憑證適用於 example.com 頂層網域,以及 blog.example.comstuff.example.com 子網域。

請求 Let's Encrypt SSL 萬用字元憑證
  1. 在本教學課程上一個步驟中使用的相同瀏覽器型 SSH 終端機視窗中,輸入下列命令來設定網域的環境變數。請務必以已註冊網域名稱的名稱取代網域。

    DOMAIN=domain WILDCARD=*.$DOMAIN

    範例:

    DOMAIN=example.com WILDCARD=*.$DOMAIN
  2. 輸入下列命令確認變數傳回正確的值:

    echo $DOMAIN && echo $WILDCARD

    您應該會看到類似以下的結果:

    確認網域環境變數。
  3. 在互動式模式中輸入下列命令啟動 Certbot。此命令會通知 Certbot 使用手動授權方法搭配 DNS 查問以驗證網域所有權。這會為您的頂層網域及其子網域請求萬用字元憑證。

    sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
  4. 出現提示時輸入您的電子郵件地址,因為它用於續約和安全性通知。

  5. 閱讀 Let's Encrypt 服務條款。完成時,如果您同意請按 A。如果您不同意,則無法取得 Let's Encrypt 憑證。

  6. 根據分享您電子郵件地址的提示和關於您 IP 地址被記錄的警告做出回應。

  7. 讓我們加密現在提示您驗證您擁有指定的網域。要這麼做,請新增 TXT 記錄至網域的 DNS 記錄。這會提供一組 TXT 記錄值,如以下範例所示:

    注意

    Let's Encrypt 可能會提供一或多個必須用於驗證的 TXT 記錄。在此範例中,我們有兩個 TXT 記錄可用於驗證。

    Let's Encrypt 憑證的 TXT 記錄。

步驟 4:新增 TXT 記錄至域的 DNS 區域

新增 TXT 記錄至網域的 DNS 區域可驗證您擁有網域。為了示範,我們使用 Lightsail DNS 區域。然而,通常由網域註冊商託管的其他 DNS 區域可能會採取類似步驟。

注意

若要進一步了解如何為網域建立 Lightsail DNS 區域,請參閱在 中建立 DNS 區域以管理網域的 DNS Lightsail 記錄

在 Lightsail 中新增 TXT 記錄至網域的 DNS 區域
  1. 在左側導覽窗格中,選擇網域和 DNS

  2. 在頁面的 DNS zones (DNS 區域) 部分,選擇您在 Certbot 憑證請求中所指定網域的 DNS 區域。

  3. 在 DNS 區域編輯器中,選擇 DNS records (DNS 記錄)。

  4. 選擇 Add record (新增記錄)。

  5. Record type (記錄類型) 下拉式選單中,選擇 TXT record (TXT 記錄)。

  6. 將 Let's Encrypt 憑證請求指定的值輸入 Record name (記錄名稱) 和 Responds with (回應內容) 欄位。

    注意

    Lightsail 主控台會預先填入您網域的頂點部分。例如,如果您要新增 _acme-challenge.example.com 子網域,則只需在文字方塊中輸入 _acme-challenge,當您儲存記錄時,Lightsail 會新增 .example.com 部分。

  7. 選擇儲存

  8. 重複步驟 4 到 7 以新增第二組由 Let’s Encrypt 憑證請求指定的 TXT 記錄。

  9. 保持主 Lightsail 控台瀏覽器視窗開啟 - 稍後您會在此教學課程中返回此處。繼續本教學課程的下一節

步驟 5:確認 TXT 記錄已傳播

使用 MxToolbox 公用程式確認 TXT 記錄已傳播至網際網路的 DNS。DNS 記錄傳輸可能需要一些時間,這取決於您的 DNS 託管提供者,以及設定的 DNS 記錄存留時間 (TTL)。在繼續 Certbot 憑證請求之前,請務必完成此步驟,並確認 TXT 記錄已傳播。否則,您的憑證請求會失敗。

確認 TXT 記錄已傳播至網際網路的 DNS
  1. 開啟新的瀏覽器視窗並前往 https://mxtoolbox.com/TXTLookup.aspx

  2. 將以下文字輸入文字方塊。請務必以您的網域取代 domain

    _acme-challenge.domain

    範例:

    _acme-challenge.example.com
    MxToolbox TXT 記錄查詢。
  3. 選擇 TXT Lookup (TXT 查詢) 以執行檢查。

  4. 這會產生以下其中一個回應:

    • 如果您的 TXT 記錄已傳播至網際網路的 DNS,您會看到類似以下螢幕擷取畫面的回應。關閉瀏覽器視窗,並繼續前往本教學課程的下一節

      確認 TXT 記錄已傳播。
    • 如果 TXT 記錄未傳播至網際網路的 DNS,您會看見 DNS Record not found (找不到 DNS 記錄) 回應。確認您已新增正確 DNS 記錄至網域的 DNS 區域。如果您新增了正確記錄,請再等待片刻讓網域的 DNS 記錄傳播,接著再次執行 TXT 查詢。

步驟 6:完成 Let’s Encrypt SSL 憑證請求

返回執行個體的Lightsail瀏覽器型 SSH 工作階段,並完成 Let's Encrypt 憑證請求。Certbot 會將您的 SSL 憑證、鏈和金鑰檔案儲存至執行個體上的特定目錄。

完成 Let’s Encrypt SSL 憑證請求
  1. 在執行個體的Lightsail瀏覽器型 SSH 工作階段中,按下 Enter 以繼續您的 Let's Encrypt SSL 憑證請求。如果成功,則會顯示與以下螢幕擷取畫面類似的回應:

    成功的 Let's Encrypt 憑證請求。

    訊息會確認您的憑證、鏈和金鑰檔案存放於 /etc/letsencrypt/live/domain/ 目錄。務必以您的網域取代 domain,例如 /etc/letsencrypt/live/example.com/

  2. 記下訊息中指定的過期日期。您可將其用於在該日期續約憑證。

    讓我們加密憑證續約日期。

步驟 7:更新 Nginx 中的 SSL 組態,並將流量從 HTTP 重新導向至 HTTPS

在 Nginx 的 default.conf 中更新 SSL 組態
  1. 在 Nginx 執行個體的 SSH 工作階段中,輸入下列命令來停止基礎服務:

    sudo systemctl stop nginx sudo systemctl stop mariadb sudo systemctl stop php8.2-fpm

    您應該會看到類似以下的回應:

    Nginx 執行個體服務已停止。
  2. 輸入下列命令以設定網域的環境變數。您可以更有效率地複製和貼上命令,藉此連結至憑證檔案。請務必以註冊的網域名稱取代 domain

    DOMAIN=domain

    範例:

    DOMAIN=example.com
  3. 輸入下列命令確認變數傳回正確的值:

    echo $DOMAIN

    您應該會看到類似以下的結果:

    確認網域環境變數。
  4. 執行以下命令以變更 SSL 組態:

    注意

    如果您在步驟 3 中設定DOMAIN變數之後關閉瀏覽器型 SSH 終端機視窗,請DOMAIN=example.com再次執行,將 example.com 取代為您的網域。

    sudo sed \ -i -e "s|ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem|ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem|g" \ -i -e "s|ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key|ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem|g" \ /etc/nginx/conf.d/default.conf
  5. 覆寫default.conf檔案後,請執行以下命令來檢查組態並重新啟動 Nginx

    sudo nginx -t sudo systemctl restart nginx sudo systemctl restart mariadb sudo systemctl restart php8.2-fpm

    您應該會看到類似以下的結果:

    Nginx 執行個體服務已啟動。

    您的 Nginx 執行個體現在已設定為使用 SSL 加密,並將流量從 HTTP 重新導向至 HTTPS

步驟 8:每 90 天續約 Let's Encrypt 憑證

Let's Encrypt 憑證有效期為 90 天。您可以憑證過期前 30 天內進行續約。若要續約 Let's Encrypt 憑證,請重複步驟 3:請求 Let's Encrypt SSL 萬用字元憑證