如何設定 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 挑戰。請檢查以下幾點:
- 防火牆設定:確保埠號 80 (HTTP) 和 443 (HTTPS) 對外界開放。Let's Encrypt 需要透過 HTTP 驗證您對域名的控制權。
- Nginx/Apache 狀態:確認 Web 伺服器正在運行且無配置錯誤。您可以使用
sudo nginx -t檢查語法。 - 磁碟空間:若根目錄磁碟空間不足,憑證寫入會失敗。使用
df -h檢查空間。
Q2: 我想手動強制續期,可以使用什麼指令?
您可以執行 sudo certbot renew。但請注意,若憑證距離到期日超過 30 天,Certbot 會跳過續期動作,這是其保護機制,避免頻繁更新。若要測試即時效果,請務必使用 --dry-run 或刪除舊憑證後重新申請。
小結
設定 Let's Encrypt 自動續期並不複雜,核心在於確認 certbot.timer 正常運作,並透過 --dry-run 驗證流程。對於中階 Linux 使用者而言,理解其背後的 systemd timer 機制與 ACME 驗證原理,能幫助您在遇到問題時快速定位。定期檢查憑證到期日(可透過 certbot certificates 指令)並保持系統更新,是維持網站安全與信賴度的基礎。現在,就讓您的網站安心擁抱 HTTPS 吧!