群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书
由于几个群晖本地证书到期了,所以搜索资料看看如何自动更新证书,但是这里面坑太多了,最重要的是没有指出二次验证该怎么写入,导致失败了很多次,所以参考各个文章总结出这些。其实有点不明白的是已经用npm申请了泛域名证书代理出去了,为啥本机有些端口还是必须用群晖本地证书才行,比如备份、webdav等。并且不是每项功能都能反向代理,有可能没注意方法吧。
前期很多准备工作就自己搜搜就不说了。第一准备阿里云或者腾讯云或者cf的key和secret,名字叫法不一样自己搜搜。先去共享文件夹docker里建一个acme.sh的文件夹。群晖现在docker改名为Container Manager了,所以现在一般部署我使用的是docker compose,举例yaml配置如下:

version: '3.8'
services:
image: neilpang/acme.sh
container_name: acme
restart: unless-stopped
environment:
- 'TZ=CST-8'
- 'DP_Id=x'
- 'DP_Key=x'
- 'SYNO_Username=x'
- 'SYNO_Password=x'
- 'SYNO_Certificate=""'#空字符
- 'SYNO_Create='#填写域名后缀就行
- 'SYNO_Port='#http端口
volumes:
- /volume1/docker/acme.sh:/acme.sh
network_mode: host
command: daemon
注意查看填写然后运行。
在群晖用文本编辑器,创建一个新文本,粘贴如下代码,修改 '你的域名' 。如果你也是阿里云,那么dns_ali就不用改,这里我们用的是letsencrypt。
#!/bin/bash
# 域名
DOMAIN='你的域名'
# # DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,CloudFlare就是dns_cf
DNS=dns_dp
# DNS API 生效等待时间 值(单位:秒),一般120即可
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
DNS_SLEEP=120
# 证书服务商,letsencrypt
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
然后保存,修改文件名为cert.sh。
将此脚本文件放到 /volume1/docker/acme.sh 文件夹下,然后右键属性,复制好路径位置,一会要用。

完成以上步骤之后,就可以来获取证书了。
确认群晖的ssh端口是打开的,然后运行终端,连接群晖。并提升账号权限为root.
sudo -i
然后执行脚本运行命令,路径就用刚才复制的脚本文件路径
root@xx:~# bash /volume1/docker/acme.sh/cert.sh
这里只会成功保存你的证书,但是不能自动添加到群晖证书上去。这是因为生成的account.conf这个文件中你没有放入SYNO_DEVICE_ID,也就是通过f12获取的did的值。所以这里其实有两种处理方式,第一种,在没运行前就创建一个这个文件,然后将did这个值放进去,不要使用引号,我测试过使用引号有错误。

第二种就是等生成这个文件夹再去添加这个值SYNO_DEVICE_ID=xx。然后再用下面的自动获取更新证书脚本,再运行一次就会添加上去。(这里的xx是did值,按以下操作获得:在浏览器中打开开发者控制台(快捷键F12),找到网络,开始监控;然后使用浏览器登陆上述管理员账号,在两步验证输入动态码时勾选“在此设备上不再询问”后登录,回到开开发者控制台,随便一个请求 -> Cookie -> did 值(Cookie 上有好几个值,比如 SSID、did、CrPoSt、id、io,只需要 did 这个值,格式为“did=q9Yq……AfmQ;”,这里的“q9Yq……AfmQ”就是did值))。
自动获取更新证书脚本:
打开群晖控制面板-任务计划-新增,账号选root。选了每月执行一次。
然后任务设置-运行命令,粘贴如下代码,视情况做修改:

bash /volume1/docker/acme.sh/cert.sh >> /volume1/docker/acme.sh/log.txt 2>&1
确定,就完工。
感想就是太折腾人了,使用了很多人的文章都不齐全,特别是开启二次验证后的获取值这里完全错的离谱,账号密码正确也会报错。还得证书都被限制更新,不过能测试出来也行,下面就是我改了account.conf,再运行后的结果,也会被自动加到群晖证书。

参考资料:
1.https://blog.csdn.net/u013102163/article/details/138233350
2.https://zhuanlan.zhihu.com/p/666800024
3.https://post.smzdm.com/p/ad9loq2p/p2/?sort_tab=hot/#comments

haluo小屋
校验提示文案
最丶摇摆
校验提示文案
bill1
校验提示文案
sarie001
校验提示文案
有皮器的枯叶
校验提示文案
toyli
校验提示文案
Clul
校验提示文案
飞翔的大爷
校验提示文案
值友5928007083
校验提示文案
有皮器的枯叶
校验提示文案
值友5928007083
校验提示文案
飞翔的大爷
校验提示文案
Clul
校验提示文案
toyli
校验提示文案
有皮器的枯叶
校验提示文案
有皮器的枯叶
校验提示文案
最丶摇摆
校验提示文案
sarie001
校验提示文案
bill1
校验提示文案
haluo小屋
校验提示文案