群晖使用acme申请泛域名证书并设置自动证书部署
特别鸣谢
特别感谢UC新闻震惊部大佬的教程,终于让我摆脱了每三个月一次的证书手动替换;
原文链接: 群晖使用acme.sh申请并部署泛域名证书_NAS存储_什么值得买 (smzdm.com)
主要内容
通过群晖docker中的acme映像,实现自动证书获取并登录群晖将证书进行替换;
同时本文只提供在阿里云解析的域名教程,CloudFlare应该也可以实现,不过我试了很久,总是提示api有问题,所以转到了阿里云;如果有大佬知道cfapi设置方法的可以告知一下。
文章分为以下部分:
获取阿里云api;
群晖二次验证did获取;
docker版acme安装及设置;
自动部署脚本及定时任务的设置。
1.阿里云api申请
(1)登录阿里云,进入控制台后,移动到右上角的头像,选中AccessKey 管理;
(2)进入AccessKey 管理后,点击创建AccessKey,通过验证后会获得“AccessKey ID” 与 “AccessKey Secret”;保存好这两串字符备用。
2.群晖二次验证did获取
如果群晖开了二次验证需要获取一个did,没开的小伙伴直接跳到第3步;
通过内网登录群晖以后,以edge或者chrome浏览器为例,按F12弹出开发者工具,选择“网络”;
按ctrl+r;
刷新完成后在名称中找到与内网群晖ip一致的记录(其实其他记录也会有cookie),选择“标头”,下拉找到"Cookie",在后面的内容中找到 "did" 开头的一串字符,将"did=" 后面所有的字符全部保存好备用(以下简称did);
3.docker版acme安装及设置
(1)在群晖中找到docker,点击注册表,搜索“acme” ,双击neilpang/acme.sh,选择latest下载;
(2)映像下载完毕后,双击neilpang/acme.sh,设置容器名称(这里容器名称设置为”acme“,名称在后面设置中会用到),选择高级设置;
(3)选择存储空间,添加文件夹(我已经在共享文件夹的docker文件夹内新建了一个acme的文件夹,这里映射acme文件夹主要用于存储acme的一些设置,尽管可能不会用到这些设置,但还是建议映射一下,本人也没有测试不映射能不能跑起来。),本地文件夹选择docker下面的acme,映射 /acme.sh
(4)选择网络,勾选使用与 Docker Host 相同的网络;
(5)选择环境,添加如下环境变量;
Ali_Key : 填入第一步获取的 AccessKey ID
Ali_Secret : 填入第一步获取的 AccessKey Secret
SYNO_DID : 填入第二步获取的 DID (没有设置两步验证的忽略)
SYNO_Port : 填入群晖内网的端口号(我用的默认端口5000未修改)
SYNO_Username : 登录群晖的用户名
SYNO_Password : 登录群晖的密码
SYNO_Certificate :要添加的证书的名字,空字符串("")为替换默认证书(我这里使用空字符串)
SYNO_Create : 当SYNO_Certificate 不为("")时,需要设置自动创建的证书名(因为我是替换证书,所以没有设置,第一次设置证书的小伙伴可能会用到。)
(6)环境变量设置完成后,在命令中输入”daemon“,选择应用 → 下一步 → 应用 ; 完成后检查acme是否运行。
4.自动部署脚本及定时任务的设置。
(1)自动脚步获取
自动运行脚本下载,移步 群晖使用acme.sh申请并部署泛域名证书_NAS存储_什么值得买 (smzdm.com) 评论区二楼;
桌面新建 ”文本文档“,将下方内容复制粘贴进新建的文本文档,文本文档另存为 cert-up-docker.sh
#!/bin/bash
# 域名
DOMAIN='xxx.com'
# # DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,我使用阿里
DNS='dns_ali'
# DNS API 生效等待时间 值(单位:秒),一般120即可
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
DNS_SLEEP=120
# 证书服务商,zerossl 和 letsencrypt,我使用letsencrypt,使用zerossl还需要注册
CERT_SERVER='letsencrypt'
generateCrtCommand="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}""
installCrtCommand="acme.sh --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"
docker exec acme.sh $generateCrtCommand
docker exec acme.sh $installCrtCommand
(2)将自动脚本放到群晖共享文件夹中
我已经在群晖新建了一个名为shell的共享文件夹,在共享文件夹内新建了acme文件夹;
将下载好的 cert-up-docker.sh 上传到shell/acme文件夹;
(3)编辑 cert-up-docker.sh
群晖安装文本编辑器套件,打开套件中心,搜索文本编辑器并安装
找到刚刚上传的 cert-up-docker.sh ,右键 用文本编辑器 打开;
找到 DOMAIN ,将引号内的内容改为自己的域名并保存;
最后两行代码中包含了docker的容器名称,容器名称详见3.(2),将acme修改为你设置的容器名称;
docker exec acme $generateCrtCommand
docker exec acme $installCrtCommand
保存好以后,再次右键 cert-up-docker.sh , 选择”属性“, 将位置保存备用,我的存储位置为”/volume1/shell/acme/cert-up-docker.sh“;
(4)添加任务计划,实现自动更新
打开控制面板,找到任务计划,点击新增,选择计划的任务,选择用户定义的脚本;
在创建任务的常规中,可以修改任务名称;
选择计划,可以设置计划运行的频率,建议设置为每个月运行一次,运行时间也可以自由选择;
选择任务设置,在用户定义的脚本中输入:
bash /volume1/shell/acme/cert-up-docker.sh >>/volume1/shell/acme/log.txt 2>&1
其中 /volume1/shell/acme/cert-up-docker.sh 为我的 cert-up-docker.sh 存储位置,获取方式详见4.(3);
/volume1/shell/acme/log.txt 2 为 log文件存放的位置,我放在cert-up-docker.sh同目录下,方便查看日志;
设置完成以后就可以点击确定了;
设置完成以后可以运行一遍,回到任务计划,找到刚刚创建的任务,右键运行;
运行日志可以到设置的存放日志的文件夹中查看;
总结
感谢各位默默付出的大佬
,再也不用手动更新证书了
~~~~
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~





















买青椒也用券
校验提示文案
值友3494785885
校验提示文案
果号
校验提示文案
值友3437686393
校验提示文案
小强同学
校验提示文案
sman
校验提示文案
值友7524815073
校验提示文案
值友7706880510
校验提示文案
风过林子
校验提示文案
买青椒也用券
校验提示文案
值友4248565724
校验提示文案
小伙不错
校验提示文案
浅默NEO
校验提示文案
yinhao
校验提示文案
solekg
校验提示文案
雨大
校验提示文案
值友7706880510
校验提示文案
wu_yan_de_feng
校验提示文案
戏丶时
校验提示文案
番禺靓仔
校验提示文案
润溪耕夫
Please refer to 去看看 for error code: 7
Unable to authenticate to http://localhost:5000, you may report this by providing full log with '--debug 3'.
Error deploying for domain: XXX.cn
Error encountered while deploying.
最后提示这个,可是端口5000我已经改了44444,docker里也改了。是什么原因?
校验提示文案
GZ加菲
校验提示文案
值友7076181083
校验提示文案
想你的姑姑
解决方法:
1.重新抓去群晖did,方法上面有;
2.停止docker里面的acme服务,然后编辑,将原来的参数“SYNO_DID”修改为“SYNO_Device_ID”;将重新抓取的did填入。
3.重新启动acme;
“Upload certificate to the Synology DSM”
校验提示文案
风过林子
校验提示文案
师破城
校验提示文案
harrik
校验提示文案
值友9238424281
校验提示文案
BG7WXB
log显示这个是哪里出问题了?
校验提示文案
七七八八九九十十
校验提示文案
风过林子
校验提示文案
manaowolf
百度搜了一下,很多说要升级acme.sh。但是,用docker装的,如何升级呢?
校验提示文案
frank3025
校验提示文案
yxjff
校验提示文案
值友4248565724
校验提示文案
ygxsg
校验提示文案
风风风风风起
校验提示文案
番禺靓仔
校验提示文案
戏丶时
校验提示文案
wu_yan_de_feng
校验提示文案