【傻瓜教程系列】群晖DSM7.x 使用acme 自动更新SSL证书

自从阿里云 2024.5 将SSL免费证书有效期 从1年 改为 3个月后,免费证书的人工成本越来越高,因而开始查找自动化更新证书的工具。这里记录一下群晖DSM7.2 下采用docker acme来更新ssl证书的方式,自动定期续签。

一、Docker 准备

  1. 创建docker运行目录:/docker/acme.sh
  2. 安装docker(neilpang/acme.sh),具体配置如下:
    • 容器名:acme
    • 存储空间映射:/docker/acme.sh --> /acme.sh
    • 执行命令:daemon

二、脚本配置【关键】

在/docker/acme.sh目录下新建acme.sh文件,具体配置如下:

注意:以下xxx部分需自行修改

acme.sh
#你的域名
DOMAIN="xxx"
#证书供应商
CERT_SERVER="letsencrypt"
#DNS供应商 可选 dns_dp(腾讯云) dns_ali(阿里云)  dns_cf  其他可查https://github.com/acmesh-official/acme.sh/wiki/dnsapi
DNS="dns_ali"
#群晖账号密码【有管理员权限的账号】
SYNO_Username="xxx"
SYNO_Password="xxx"
#如果开启了双重验证请在浏览器登录时选中保存此设备,然后从COOKIE中获取did cookie
SYNO_Device_Name="CertRenewal"
SYNO_DID=""
#以下群晖配置非必要不要更改
SYNO_Hostname="" # Specify if not using on localhost
SYNO_Scheme="http"
SYNO_Port="5000"
#要添加的证书的名字,空字符串("")的话就是替代默认证书,一般建议使用空字符串,除非你有多个证书
SYNO_Certificate=""

#以下三选一
#阿里云 (自行获取)
Ali_Key="xxx"
Ali_Secret="xxx"


case $DNS in 
    "dns_dp")
    a="DP_Id=${DP_Id}"&&b="DP_Key=${DP_Key}"
    ;;
    "dns_ali")
    a="Ali_Key=${Ali_Key}"&&b="Ali_Secret=${Ali_Secret}"
    ;;
    "dns_cf")
    a="CF_Key=${CF_Key}"&&b="CF_Email=${CF_Email}"
    ;;
esac
SYNOUsername="SYNO_Username=${SYNO_Username}"
SYNOPassword="SYNO_Password=${SYNO_Password}"
SYNODeviceID="SYNO_Device_ID=${SYNO_DID}"
SYNOHostname="SYNO_Hostname=${SYNO_Hostname}"
SYNOScheme="SYNO_Scheme=${SYNO_Scheme}"
SYNOPort="SYNO_Port=${SYNO_Port}"
SYNOCertificate="SYNO_Certificate=${SYNO_Certificate}"
SYNODID="SYNO_DID=${SYNO_DID}"
SYNODeviceName="SYNO_Device_Name=${SYNO_Device_Name}"


docker exec -e ${a} -e ${b} acme acme.sh --log --server "${CERT_SERVER}" --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns "${DNS}" >> /volume1/docker/acme.sh/log.txt 2>&1
docker exec -e ${SYNOUsername} -e ${SYNOPassword} -e ${SYNODeviceID} -e ${SYNOHostname} -e ${SYNOScheme} -e ${SYNOPort} -e ${SYNOCertificate} -e ${SYNODID} -e ${SYNODeviceName} acme acme.sh --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns "${DNS}" --deploy --deploy-hook synology_dsm  >> /volume1/docker/acme.sh/log.txt 2>&1

三、周期任务

  1. 新建计划任务: 控制面板 -> 任务计划 -> 新增 -> 计划的任务 -> 用户定义的脚本

    具体配置项:

    • 计划:每三个月重复
    • 任务设置:运行命令 bash /volume1/docker/acme.sh/acme.sh >> /volume1/docker/acme.sh/log.txt 2>&1
  2. 初次手动运行: 直接右键运行,一键自动化替换群晖默认证书,并上传到DNS解析服务器。后续无需额外操作,每三个月例行更新即可。

posted @ 2024-11-21 16:51  Tsingwaa  阅读(1571)  评论(0)    收藏  举报