如何設定 Let's Encrypt 自動續期 文章首圖

如何設定 Let's Encrypt 自動續期

如何設定 Let's Encrypt 自動續期

在現代 Web 伺服器架設中,HTTPS 已經是標配。然而,許多初學者常忽略了一個關鍵問題:SSL/TLS 憑證的有效期通常只有 90 天。如果沒有妥善處理,網站將會面臨憑證過期、使用者看到安全警告的窘境。好消息是,透過 Certbot 搭配 Let's Encrypt 服務,我們可以輕鬆實現憑證的自動續期。這篇文章將帶領您完成從安裝到驗證自動續期的完整設定流程。

前置準備與安裝 Certbot

首先,請確保您的伺服器已安裝 Web 伺服器(如 Nginx 或 Apache),並且域名已正確解析至伺服器 IP。我們主要使用 certbot 這個工具來獲取和管理憑證。

在 Ubuntu 22.04 或 Debian 12 上,您可以直接透過套件管理員安裝:

sudo apt update
sudo apt install certbot python3-certbot-nginx

註:若您使用 Apache,請將 python3-certbot-nginx 替換為 python3-certbot-apache

安裝完成後,建議先執行一次手動獲取憑證的動作,以驗證域名權限與伺服器配置是否正確。以 Nginx 為例:

sudo certbot --nginx -d yourdomain.com

系統會引導您輸入 Email 並同意服務條款,隨後自動修改 Nginx 設定檔並重啟服務。若此時網站能正常以 HTTPS 存取,代表基礎設定無誤。

確認自動續期機制

Certbot 預設會安裝一個 systemd timer,用於定期檢查憑證過期狀態。這是 Linux 系統中推薦的自動化管理方式,比傳統的 cron job 更穩定且不易衝突。

您可以透過以下指令檢查 timer 的狀態:

sudo systemctl list-timers | grep certbot

若輸出中包含 certbot.timer 且狀態為 active,表示自動續期機制已啟用。預設情況下,Certbot 會在憑證到期前 30 天內嘗試續期。為了確保萬無一失,我們建議手動測試續期流程是否運作正常。

測試續期流程

在正式依賴自動續期前,強烈建議執行一次 dry-run(模擬執行),這不會實際更新憑證,但會驗證腳本是否具備正確的執行權限與路徑。

執行以下指令:

sudo certbot renew --dry-run

如果輸出最後顯示 Congratulations, all simulated renewals succeeded,則表示設定完美無缺。若出現錯誤,通常與 Web 伺服器的配置文件權限、防火牆阻擋 ACME 挑戰驗證,或域名解析問題有關,請根據錯誤訊息逐一排查。

自訂續期腳本(進階選項)

雖然預設的 systemd timer 已足夠應對大多數情況,但有時我們需要在憑證更新後執行額外動作,例如重新載入 Nginx 快取或通知管理員。Certbot 支援 --deploy-hook 參數。

您可以建立一個簡單的 shell script,例如 /etc/letsencrypt/renewal-hooks/deploy/my-hook.sh

#!/bin/bash
# 重新載入 Nginx 以套用新憑證
sudo systemctl reload nginx
echo "Certificate renewed at $(date)" >> /var/log/certbot-renew.log

記得賦予執行權限:

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/my-hook.sh

此目錄下的腳本會在每次成功續期後自動執行,無需修改 Certbot 主配置,維護起來更加簡潔。

常見問題排查

Q1: 自動續期失敗,提示 "Failed to renew certificate"?

這通常發生在 Web 伺服器未正確回應 ACME 挑戰。請檢查以下幾點:

  1. 防火牆設定:確保埠號 80 (HTTP) 和 443 (HTTPS) 對外界開放。Let's Encrypt 需要透過 HTTP 驗證您對域名的控制權。
  2. Nginx/Apache 狀態:確認 Web 伺服器正在運行且無配置錯誤。您可以使用 sudo nginx -t 檢查語法。
  3. 磁碟空間:若根目錄磁碟空間不足,憑證寫入會失敗。使用 df -h 檢查空間。

Q2: 我想手動強制續期,可以使用什麼指令?

您可以執行 sudo certbot renew。但請注意,若憑證距離到期日超過 30 天,Certbot 會跳過續期動作,這是其保護機制,避免頻繁更新。若要測試即時效果,請務必使用 --dry-run 或刪除舊憑證後重新申請。

小結

設定 Let's Encrypt 自動續期並不複雜,核心在於確認 certbot.timer 正常運作,並透過 --dry-run 驗證流程。對於中階 Linux 使用者而言,理解其背後的 systemd timer 機制與 ACME 驗證原理,能幫助您在遇到問題時快速定位。定期檢查憑證到期日(可透過 certbot certificates 指令)並保持系統更新,是維持網站安全與信賴度的基礎。現在,就讓您的網站安心擁抱 HTTPS 吧!