Synology · acme.sh · Let's Encrypt · Cloudflare · TLS · Shell
專案概述
DSM 7 內建的 Let’s Encrypt 只支援 HTTP-01 驗證,必須對外開 port 80,且拿不到萬用字元憑證。本專案以 acme.sh 搭配 Cloudflare DNS-01 驗證,在不開放任何入站埠的條件下申請*.example.com 萬用字元憑證,並透過 synology_dsm deploy hook 自動部署至 DSM。同時說明雙憑證策略:Cloudflare 橘雲(proxy)流量用 Origin Certificate,VPN/Mail 等直連流量用 Let’s Encrypt 萬用字元憑證。
核心功能
- DNS-01 驗證,透過 Cloudflare API 寫入 TXT 記錄完成 ACME 挑戰,無需開放任何埠號
- 萬用字元憑證(
example.com+*.example.com)一次涵蓋所有子網域 synology_dsmdeploy hook 在申請/續期後自動透過 DSM Web API 部署並重載憑證- DSM 工作排程自動觸發 acme.sh renew,acme.sh 內部在到期前 60 天內才實際續期,每天跑安全
- 雙憑證共存:DSM 控制台可針對不同服務分別指派 Origin Certificate 或 Let’s Encrypt 憑證
部署架構
憑證策略
快速開始
1
建立 Cloudflare API Token
Cloudflare Dashboard → My Profile → API Tokens → Create Token → Custom Token。權限設定:Zone → DNS → Edit,區域資源選帳號下的目標 Zone。記下 Token(只顯示一次)和 Zone ID(Dashboard 右側欄)。
2
安裝 acme.sh
--nocron(DSM 升級會清 crontab)並指定 --home(不指定會裝到 /root/.acme.sh/,Synology 的 /root 結構不標準會報錯)。3
向 Let's Encrypt 註冊帳號
--server letsencrypt,acme.sh 新版預設 CA 已改為 ZeroSSL。4
申請萬用字元憑證(先測試再正式)
5
部署憑證到 DSM
6
設定 DSM 工作排程自動續期
控制台 → 工作排程 → 新增 → 排程的工作 → 使用者自訂的指令碼,每天凌晨 3:00 執行:或直接使用 repo 內的
scripts/renew-cert.sh。acme.sh 內部只在到期前 60 天內才實際執行,每天跑不會觸發 rate limit。注意事項
實際應用面
實驗室 NAS 同時跑 VPN、Mail、WebDAV、Synology Drive 等需要瀏覽器認得的公開憑證的服務,單張萬用字元憑證統一涵蓋,不需為每個子網域個別申請。橘雲服務另掛 Origin Certificate,兩套憑證在 DSM 控制台分別指派給對應服務。相關連結
- GitHub:felimet/synology-letsencrypt-cloudflare
- acme.sh 官方 repo:acmesh-official/acme.sh
- acme.sh Cloudflare DNS API 說明:acme.sh/wiki/dnsapi#dns_cf
- acme.sh Synology DSM deploy hook:acme.sh/wiki/deployhooks#synology_dsm