為 Bitnami 應用程序生成和安裝 Let’s Encrypt SSL 證書

介紹

Let’s Encrypt是一個免費的證書頒發機構 (CA),可頒發 SSL 證書。您可以使用這些 SSL 證書來保護進出 Bitnami 應用程序主機的流量。

本指南將引導您完成為您的域生成 Let’s Encrypt SSL 證書以及安裝和配置它以與您的 Bitnami 應用程序堆棧一起使用的過程。

重要提示:本指南中描述的步驟適用於所有 Bitnami 應用程序,但以下情況除外:

假設和先決條件

本指南假定:

  • 您已經部署了一個 Bitnami 應用程序,並且該應用程序可在公共 IP 地址上使用,以便 Let’s Encrypt 過程可以驗證您的域。
  • 您擁有登錄 Bitnami 應用程序實例所需的憑據。
  • 您擁有一個或多個域名。
  • 您已將域名的 DNS 記錄配置為指向您的 Bitnami 應用程序實例的公共 IP 地址。

使用 Bitnami HTTPS 配置工具

重要提示:Bitnami HTTPS 配置工具尚不支持 IPv6 地址、負載平衡器/CDN 或 NGINX Web 服務器。如果您使用 IPv6 地址,請在繼續之前禁用它們。如果您使用 NGINX 或負載均衡器或 CDN,請參閱替代方法部分。

Bitnami HTTPS 配置工具是一個命令行工具,主要用於在 Bitnami 堆棧上配置 HTTPS 證書,還有自動續訂、重定向(例如 HTTP 到 HTTPS)等常用功能。該工具位於堆棧的安裝目錄中/選擇/比特納米

注意:在使用 Bitnami HTTPS 配置工具之前,請確保您的域的 DNS 配置正確地反映了主機的 IP 地址並且您沒有使用 IPv6 地址。您可以通過 DNS 提供商更新域的 DNS 配置。

要啟動 Bitnami HTTPS 配置工具,請執行以下命令並按照提示操作:

sudo /opt/bitnami/bncert-tool

有關這方面的更多信息,或者如果您在 Bitnami 堆棧中找不到該工具,請參閱我們的指南。

注意:Bitnami HTTPS 配置工具將自動創建一個 cron 作業來更新您的證書。默認情況下,如果系統上存在bitnami用戶帳戶,則會在該用戶帳戶下添加 cron 作業。要查看和修改 cron 作業,請使用命令sudo crontab -u bitnami -l

如果您更喜歡手動生成和安裝 Let’s Encrypt 證書,請遵循此替代方法

故障排除

如果證書生成過程失敗和/或您希望為任何原因重置證書,請按照以下步驟操作:

  • 刪除rootbitnami用戶的 cron 表中的 cron 作業。運行以下命令並刪除與證書更新相關的所有行/命令:sudo crontab -e sudo crontab -e -u bitnami
  • 修改 Web 服務器配置文件以使用原始server.crtserver.key證書(Bitnami HTTPS 配置工具不會重命名或移動這些證書)。或者,還原原始 Web 服務器配置文件,該文件由該工具備份為同一目錄中的bitnami.conf.back.DATE
  • 重啟所有 Bitnami 服務:sudo /opt/bitnami/ctlscript.sh start

重要提示:在使用虛擬證書時,用戶在訪問網站時會看到 SSL 證書警告。為網站安裝有效的 SSL 證書後,這些警告將消失。

替代方法

注意:我們正在修改許多 Bitnami 堆棧的文件結構和配置。由於這些更改,本指南中所述的文件路徑可能會根據您的 Bitnami 堆棧是使用本機 Linux 系統包(方法 A)還是獨立安裝(方法 B)而改變。要確定您的 Bitnami 安裝類型以及要遵循的方法,請運行以下命令:

test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."

命令的輸出指示安裝使用哪種方法(A 或 B),並允許您識別本指南中要使用的路徑、配置和命令。有關這些更改的更多信息,請參閱常見問題解答

如果您的 Bitnami 鏡像不包含自動配置腳本或/opt/bitnami/letsencrypt/目錄,您可以手動安裝 Lego 客戶端並生成並安裝 Let’s Encrypt 證書。請按照以下步驟操作。

第一步:安裝樂高客戶端

Lego客戶端簡化了 Let’s Encrypt 證書生成的過程。要使用它,請按照下列步驟操作:

  • 以bitnami用戶身份登錄服務器控制台。
  • 運行以下命令安裝樂高客戶端。請注意,您需要將 XYZ 佔位符替換為下載存檔的實際版本號:cd /tmp curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i - tar xf lego_vX.Y.Z_linux_amd64.tar.gz sudo mkdir -p /opt/bitnami/letsencrypt sudo mv lego /opt/bitnami/letsencrypt/lego

這些步驟將下載、提取 Lego 客戶端並將其複製到您路徑中的目錄中。

第 2 步:為您的域生成 Let’s Encrypt 證書

注意:在繼續此步驟之前,請確保您的域名指向 Bitnami 應用程序主機的公共 IP 地址。如果 Bitnami 應用程序主機位於負載均衡器或 CDN 後面,則以下命令需要其他參數,Bitnami 支持團隊可以根據要求提供這些參數。

下一步是為您的域生成 Let’s Encrypt 證書。

  • 關閉所有 Bitnami 服務:sudo /opt/bitnami/ctlscript.sh stop
  • 為您的域申請一個新證書,包括或不包括www前綴。重要提示:將 DOMAIN 佔位符替換為您的實際域名,將 EMAIL-ADDRESS 佔位符替換為您的電子郵件地址。sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" run 注意:您可以使用多個域(例如,DOMAINwww.DOMAIN),方法是指定–domains選項的次數與要指定的域數一樣多。在提供多個域時,Lego 會創建一個 SAN(主題備用名稱)證書,這會導致只有一個證書對您輸入的所有域都有效。您列表中的第一個域將作為證書的“CommonName”添加,其餘的將作為“DNSNames”添加到證書內的 SAN 擴展中。
  • 同意服務條款。

現在將在/opt/bitnami/letsencrypt/certificates目錄中生成一組證書。該集合包括服務器證書文件DOMAIN.crt和服務器證書密鑰文件DOMAIN.key

重要提示:出於安全原因,切勿在公共論壇上發布或披露您服務器的 SSL 私鑰文件。

輸出消息將提供一些信息,包括證書的到期日期。請仔細注意此到期日期,因為您需要在該日期之前更新您的證書以使其保持有效。

示例證書如下所示:

讓我們加密 CA 證書

注意:上述步驟將為一個或多個明確命名的域生成證書。要為通配符域生成證書,您需要在運行樂高工具時使用 DNS-01 驗證,如官方 Let’s Encrypt 文檔中所述。

注意:許多瀏覽器在執行任何重定向之前都會對 HTTPS 端點執行 SSL 驗證。這意味著,如果您計劃將 HTTPS 請求重定向到非 HTTPS 端點,則必須確保您的 SSL 證書包含第一個實例中請求的 HTTPS 端點的條目。

第 3 步:配置 Web 服務器以使用 Let’s Encrypt 證書

接下來,將新證書告訴 Web 服務器,如下所示:

  • 將新的 SSL 證書和證書密鑰文件鏈接到正確的位置,具體取決於您使用的 Web 服務器。更新文件權限以使它們只能由 root 用戶讀取。重要提示:請記住將 DOMAIN 佔位符替換為您的實際域名。對於方法 A 下的 Apache(使用系統包的 Bitnami 安裝):sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/apache2/conf/bitnami/certs/server.key sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt sudo chown root:root /opt/bitnami/apache2/conf/bitnami/certs/server* sudo chmod 600 /opt/bitnami/apache2/conf/bitnami/certs/server* 對於方法 B 下的 Apache(自包含的 Bitnami 安裝):sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/apache2/conf/server.key sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/apache2/conf/server.crt sudo chown root:root /opt/bitnami/apache2/conf/server* sudo chmod 600 /opt/bitnami/apache2/conf/server* 對於方法 A 下的 NGINX(使用系統包的 Bitnami 安裝):sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.csr /opt/bitnami/nginx/conf/bitnami/certs/server.csr.old sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/bitnami/certs/server.key sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt sudo chown root:root /opt/bitnami/nginx/conf/bitnami/certs/server* sudo chmod 600 /opt/bitnami/nginx/conf/bitnami/certs/server* 對於方法 B 下的 NGINX(自包含的 Bitnami 安裝):sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/server.key sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/server.crt sudo chown root:root /opt/bitnami/nginx/conf/server* sudo chmod 600 /opt/bitnami/nginx/conf/server* 提示:要了解您的 Bitnami 堆棧是使用 Apache 還是 NGINX,請檢查命令sudo /opt/bitnami/ctlscript.sh status的輸出。
  • 重啟所有 Bitnami 服務:sudo /opt/bitnami/ctlscript.sh start

要將一個或多個域添加到現有證書,只需再次重複第 2 步和第 3 步,確保在lego命令中保持相同的域名順序,並將新域名添加到末尾並使用附加的–domains參數。

第 4 步:測試配置

再次確認您的域名指向Bitnami應用實例的公網IP後,您可以通過瀏覽https://DOMAIN(將DOMAIN佔位符替換為正確的域名)進行測試。

這應該會顯示 Bitnami 應用程序的安全歡迎頁面。單擊瀏覽器地址欄中的掛鎖圖標應顯示域和 SSL 證書的詳細信息。

讓我們在行動中加密證書

第 5 步:更新 Let’s Encrypt 證書

Let’s Encrypt 證書的有效期僅為 90 天。要在證書過期之前續訂證書,請以bitnami用戶身份從服務器控制台運行以下命令。請記住將 DOMAIN 佔位符替換為您的實際域名,並將 EMAIL-ADDRESS 佔位符替換為您的電子郵件地址。

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

要在證書過期之前自動更新您的證書,請編寫一個腳本來執行上述任務並安排一個cron作業來定期運行該腳本。去做這個:

  • 在/opt/bitnami/letsencrypt/scripts/renew-certificate.sh創建一個腳本sudo mkdir -p /opt/bitnami/letsencrypt/scripts sudo nano /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
  • 在腳本中輸入以下內容並保存。請記住將 DOMAIN 佔位符替換為您的實際域名,並將 EMAIL-ADDRESS 佔位符替換為您的電子郵件地址。對於阿帕奇: #!/bin/bash sudo /opt/bitnami/ctlscript.sh stop apache sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90 sudo /opt/bitnami/ctlscript.sh start apache 對於 NGINX: #!/bin/bash sudo /opt/bitnami/ctlscript.sh stop nginx sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90 sudo /opt/bitnami/ctlscript.sh start nginx
  • 使腳本可執行:sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
  • 執行以下命令打開 crontab 編輯器:sudo crontab -e
  • 將以下行添加到 crontab 文件並保存: 0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null

注意:如果更新多個域,請記住更新/opt/bitnami/letsencrypt/renew-certificate.sh腳本以在lego命令中包含其他域名。

故障排除

如果證書生成過程失敗或者您出於任何原因希望重新開始,請運行以下命令以刪除生成的輸出,替換以前的證書並重新啟動服務。然後您可以返回到第 1 步。請務必注意,這樣做會刪除任何以前生成的證書和密鑰。

rm -rf /opt/bitnami/letsencrypt

對於阿帕奇:

sudo mv /opt/bitnami/apache2/conf/server.crt.old /opt/bitnami/apache2/conf/server.crt
sudo mv /opt/bitnami/apache2/conf/server.key.old /opt/bitnami/apache2/conf/server.key
sudo mv /opt/bitnami/apache2/conf/server.csr.old /opt/bitnami/apache2/conf/server.csr
sudo /opt/bitnami/ctlscript.sh restart

對於 NGINX:

sudo mv  /opt/bitnami/nginx/conf/server.crt.old /opt/bitnami/nginx/conf/server.crt
sudo mv /opt/bitnami/nginx/conf/server.key.old /opt/bitnami/nginx/conf/server.key
sudo mv /opt/bitnami/nginx/conf/server.csr.old /opt/bitnami/nginx/conf/server.csr
sudo /opt/bitnami/ctlscript.sh restart

如果您為證書續訂創建了 cron 作業,請通過使用以下命令打開 crontab 編輯器並刪除為證書續訂腳本添加的行來刪除它:

sudo crontab -e

https://docs.bitnami.com/aws/how-to/generate-install-lets-encrypt-ssl/