介紹#
- acme.sh:自動申請和更新證書的工具
- Cloudflare:域名解析和托管平台(其中之一服務)
- Let’s Encrypt:免費的證書頒發機構(有效期三個月)
準備#
申請 Cloudflare Token#
因為要對域名進行驗證,需要先申請有編輯對應域名 DNS 權限的 Token:
- 在 用戶 API 令牌 處點擊創建令牌
- 選擇編輯區域 DNS 處點擊使用模板
- 之後在區域資源選擇要申請證書的域名
- 保存
開啟群智 SSH 登錄#
登錄群智 Web,進入控制面板 -> 終端機和 SNMP,勾選啟動 SSH 功能後保存。
注:另一種方案是直接通過群智的任務計劃執行每一個操作。
證書申請#
以下操作是在成功通過 [[SSH]] 連接群智的情況下執行,每個操作前 export
變量只要執行過一次即可,無須重複運行,在代碼中顯示只是為了更加直觀。
默認情況下群智的的帳號沒有加入 [[Docker]] 組,因此先切換到 root 帳號方便操作,當然也可以為每個命令加 [[sudo]] 前綴執行,下面以切換到 root 帳號為例子:
sudo -i
然後創建存放域名證書的文件夾:
mkdir -p /volume1/docker/acme.sh
註冊 ACME 帳號#
export ACMEPATH="/volume1/docker/acme.sh" # 上一步創建的路徑
export EMAIL="mail@example.com" # 用於註冊 letsencrypt 的郵箱
docker run --rm \
-v "${ACMEPATH}":/acme.sh \
--net=host \
neilpang/acme.sh \
--register-account \
-m "${EMAIL}" \
--server letsencrypt
- --rm:表示容器用完後立即銷毀
- --server:指定
申請證書#
export ACMEPATH="/volume1/docker/acme.sh"
export DOMAIN="mail@example.com"
export CFTOKEN="Gl8exdSXRRwGxg5EjVnTDzYY42" # Cloudflare 申請的 Token
docker run --rm \
-v "${ACMEPATH}":/acme.sh \
-e CF_Token="${CFTOKEN}" \
--net=host \
neilpang/acme.sh \
--issue \
--dns dns_cf \
--ocsp \
--server letsencrypt \
-d "${DOMAIN}" \
-d "*.${DOMAIN}"
CFTOKEN 變量處填入 申請 Cloudflare Token 獲取的 Token。
部署證書#
export ACMEPATH="/volume1/docker/acme.sh"
export DOMAIN="immwind.com"
export USERNAME="username" # 群智登錄帳號
export PASSWORD="password" # 群智登錄密碼
export PORT="5001" # HTTPS 端口
docker run --rm \
-v "${ACMEPATH}":/acme.sh \
-e SYNO_Username="${USERNAME}" \
-e SYNO_Password="${PASSWORD}" \
-e SYNO_Scheme="https" \
-e SYNO_Port="${PORT}" \
-e SYNO_Certificate="A different certificate" \
--net=host \
neilpang/acme.sh \
--deploy --insecure \
--deploy-hook synology_dsm \
-d "${DOMAIN}" -d "*.${DOMAIN}"
- SYNO_Certificate:是群智證書介面對應域名下方的說明
部署完成後就可以在控制面板 -> 安全性 -> 證書處看到申請的域名證書,並進行設置。
自動更新證書配置#
登錄群智 Web 後,進入控制面板:
- 選擇任務計劃
- 新增 -> 計劃的任務 -> 用戶定義的腳本
- 在任務設置 -> 執行命令部分填入下方內容(包括變量)
export ACMEPATH="/volume1/docker/acme.sh"
export DOMAIN="immwind.com"
export CFTOKEN="Gl8exdSXRRwGxg5EjVnTDzYY42"
export USERNAME="username" # 群智登錄帳號
export PASSWORD="password" # 群智登錄密碼
export PORT="5001" # HTTPS 端口
docker run --rm \
-v "${ACMEPATH}":/acme.sh \
-e CF_Token="${CFTOKEN}" \
--net=host \
neilpang/acme.sh \
--renew --force \
--dns dns_cf \
--ocsp \
--server letsencrypt \
-d "${DOMAIN}" -d "*.${DOMAIN}"
docker run --rm \
-v "${ACMEPATH}":/acme.sh \
-e SYNO_Username="${USERNAME}" \
-e SYNO_Password="${PASSWORD}" \
-e SYNO_Scheme="https" \
-e SYNO_Port="${PORT}" \
-e SYNO_Certificate="A different certificate" \
--net=host \
neilpang/acme.sh \
--deploy --insecure \
--deploy-hook synology_dsm \
-d "${DOMAIN}" -d "*.${DOMAIN}"
任務可以每月執行一次,不過為了確保任務正常運行,可以先手動執行一次看是否成功。
最後#
配置完後,突然想起 [[ESXi]] 的證書也過期了許久,是不是也可以折騰下。
資訊#
環境#
- DSM 7.2
- Docker 20.10.23