在使用 Docker 版 Certbot 進行 SSL 憑證續約 (certbot renew) 的環境中,常會遇到一個問題:
「有些網域已經不用了,但 Certbot 仍然把它們列在憑證列表裡。」
這不但會讓 renew 過程變得冗長,也可能在 web server 或 mail server 設定上造成混亂。
本篇文章記錄如何在 Docker 環境下,安全地刪除不再使用的 Let’s Encrypt 憑證,包括:
- 如何查看現有憑證
- 如何刪除個別憑證 lineage
- 如何處理 Certbot lock 問題
- 最後的最佳化建議
📌 環境說明
Certbot 以 Docker 容器方式執行,並使用 named volumes 儲存資料:
docker run --rm \
-v httpd-etc-letsencrypt:/etc/letsencrypt \
-v httpd-varlib-letsencrypt:/var/lib/letsencrypt \
-v httpd-varlog-letsencrypt:/var/log/letsencrypt \
-v httpd-virtual-htdocs:/var/www/virtual \
certbot/certbot:v4.1.1 renew
1. 查看現有 Let’s Encrypt 憑證列表
使用以下指令查看目前所有憑證(lineage):
docker run --rm -it \
-v httpd-etc-letsencrypt:/etc/letsencrypt \
-v httpd-varlib-letsencrypt:/var/lib/letsencrypt \
-v httpd-varlog-letsencrypt:/var/log/letsencrypt \
certbot/certbot:v4.1.1 certificates
在實際執行後,我得到以下輸出(節錄):
Certificate Name: pop3.nuface.tw
Domains: pop3.nuface.tw
Expiry Date: 2025-11-24 (EXPIRED)
Certificate Name: imap.nuface.tw
Certificate Name: mailadmin.nuface.tw
Certificate Name: smtp.nuface.tw
Certificate Name: tpm1.nuface.tw
Certificate Name: webmail.nuface.tw
...
Certificate Name: tpm1.demo.com.tw (VALID)
Certificate Name: wms.demo.com.tw (VALID)
從列表可見,有多張 nuface.tw 的憑證都已經不再使用,且全部過期。
2. 先排除 Certbot lock 問題(若遇到)
若出現:
Another instance of Certbot is already running.
代表 Vault 內存在舊的 lock file,只需清除即可。
進入 volumes:
docker run --rm -it \
-v httpd-etc-letsencrypt:/etc/letsencrypt \
-v httpd-varlib-letsencrypt:/var/lib/letsencrypt \
alpine:3.20 /bin/sh
刪除 lock:
rm -f /var/lib/letsencrypt/.certbot.lock
rm -f /etc/letsencrypt/.certbot.lock
確認後退出:
exit
3. 刪除不再使用的憑證 lineage
Certbot 的憑證都是「獨立 lineage」,只要不需要,就可以單獨刪除。
例如要刪除完全不用的 pop3.nuface.tw:
docker run --rm -it \
-v httpd-etc-letsencrypt:/etc/letsencrypt \
-v httpd-varlib-letsencrypt:/var/lib/letsencrypt \
-v httpd-varlog-letsencrypt:/var/log/letsencrypt \
certbot/certbot:v4.1.1 delete \
--cert-name pop3.nuface.tw
Certbot 會詢問是否確認刪除,輸入 Y 即可。
實際刪除的憑證包括:
- pop3.nuface.tw
- imap.nuface.tw
- smtp.nuface.tw
- mailadmin.nuface.tw
- tpm1.nuface.tw
- webmail.nuface.tw
只要確定該域名的 web server / mail server 設定已經不再使用該憑證,就可以安全刪除。
4. 再次確認憑證列表
刪除後再次執行:
docker run --rm -it \
-v httpd-etc-letsencrypt:/etc/letsencrypt \
-v httpd-varlib-letsencrypt:/var/lib/letsencrypt \
-v httpd-varlog-letsencrypt:/var/log/letsencrypt \
certbot/certbot:v4.1.1 certificates
此時只會看到仍在使用且有效的憑證,例如:
- tpm1.demo.com.tw
- wms.demo.com.tw
- wmsadmin.demo.com.tw
- wmsdb.demo.com.tw
這樣一來,後續的 renew 就會更乾淨、更快,也避免不必要的錯誤。
5. 最佳實務建議
✔ 保持憑證命名整潔
每個 domain 建立獨立憑證(不要把多個 subdomain 塞在同一張 SAN 憑證),
未來要停用某服務時才能輕鬆刪除。
✔ Server 設定同步調整
刪除憑證前,請確認:
- Apache/Nginx 是否引用該憑證
- Postfix SNI 是否有該域名
- Dovecot local_name 是否有配置
避免 reload 時出現「找不到憑證檔案」。
✔ 定期清理
每季檢查一次憑證列表,移除不再使用的域名,
讓 Certbot renew 更快、更安全。
✔ 結語
在 Docker 環境中管理 Let’s Encrypt SSL 憑證非常彈性,但隨著時間推移,
許多網域、服務會退役,清理掉不再使用的憑證是很重要的維運工作。
本篇文章完整示範:
- 如何列出憑證
- 如何移除不必要的憑證 lineage
- 如何處理 Certbot lock 問題
- 如何保持憑證架構乾淨
清理完成後,Certbot 的續約流程也會變得更精簡、穩定。