群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书

2024-05-28 16:40:15 9点赞 92收藏 17评论

由于几个群晖本地证书到期了,所以搜索资料看看如何自动更新证书,但是这里面坑太多了,最重要的是没有指出二次验证该怎么写入,导致失败了很多次,所以参考各个文章总结出这些。其实有点不明白的是已经用npm申请了泛域名证书代理出去了,为啥本机有些端口还是必须用群晖本地证书才行,比如备份、webdav等。并且不是每项功能都能反向代理,有可能没注意方法吧。

前期很多准备工作就自己搜搜就不说了。第一准备阿里云或者腾讯云或者cf的key和secret,名字叫法不一样自己搜搜。先去共享文件夹docker里建一个acme.sh的文件夹。群晖现在docker改名为Container Manager了,所以现在一般部署我使用的是docker compose,举例yaml配置如下:

群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书

version: '3.8'

services:

acme.sh:

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 文件夹下,然后右键属性,复制好路径位置,一会要用。

群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书

完成以上步骤之后,就可以来获取证书了。

确认群晖的ssh端口是打开的,然后运行终端,连接群晖。并提升账号权限为root.

sudo -i

然后执行脚本运行命令,路径就用刚才复制的脚本文件路径

root@xx:~# bash /volume1/docker/acme.sh/cert.sh

这里只会成功保存你的证书,但是不能自动添加到群晖证书上去。这是因为生成的account.conf这个文件中你没有放入SYNO_DEVICE_ID,也就是通过f12获取的did的值。所以这里其实有两种处理方式,第一种,在没运行前就创建一个这个文件,然后将did这个值放进去,不要使用引号,我测试过使用引号有错误。

群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书

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

自动获取更新证书脚本:

打开群晖控制面板-任务计划-新增,账号选root。选了每月执行一次。

然后任务设置-运行命令,粘贴如下代码,视情况做修改:

群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书

bash /volume1/docker/acme.sh/cert.sh >> /volume1/docker/acme.sh/log.txt 2>&1

确定,就完工。

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

群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书

参考资料:

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

展开 收起
17评论

  • 精彩
  • 最新
  • 不错不错,试试看

    校验提示文案

    提交
    的确可以,主要就是did要放进去

    校验提示文案

    提交
    收起所有回复
  • 我是直接用lucky ddns反向代理+acme自动续期域名证书 更简单好用

    校验提示文案

    提交
    我用的npm,主要是有些业务反向代理解决不了。

    校验提示文案

    提交
    我也是lucky 域名是阿里云.top,最近发现不能自动续签了?有大佬有解决方案吗

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • bill1

    作者
    这里面如果之前使用过acme生成过的话,最好清理掉然后再重新生成

    校验提示文案

    提交
  • 一般群晖都是自用的,所以我是,自签名证书,然后再电脑和手机上安装自己的根证书。

    校验提示文案

    提交
  • 这文章里坑也不少,一开始用了dnspod的api,后面有用阿里云。docker里容器文件夹用的acme.sh,后面执行命令用的又是acme-sh。我都怀疑作者到底自己试过没

    校验提示文案

    提交
  • 要更新多个证书怎么弄?

    校验提示文案

    提交
  • 二次验证id过期怎么办 [大囧] [大囧]

    校验提示文案

    提交
  • 7.1.1还是403了……大佬有啥解决方法么?

    校验提示文案

    提交
  • 现在(2024.11.23)还能用吗?我的正常运行了半年,现在却用不了了,提示错误代码35

    校验提示文案

    提交
  • 这文章里坑也不少,一开始用了dnspod的api,后面有用阿里云。docker里容器文件夹用的acme.sh,后面执行命令用的又是acme-sh。我都怀疑作者到底自己试过没。最关键的是当我排除前面几个坑后执行bash cert.sh这块命令的时候不成功了

    校验提示文案

    提交
    肯定用过才发出来撒,注意有些空格字符的问题。看图片是用的cert.sh执行文件,看仔细点哟。

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
92
扫一下,分享更方便,购买更轻松