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

群晖相关2年前更新 billconan
603 0

由于几个群晖本地证书到期了,所以搜索资料看看如何自动更新证书,但是这里面坑太多了,最重要的是没有指出二次验证该怎么写入,导致失败了很多次,所以参考各个文章总结出这些。其实有点不明白的是已经用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证书

设置acme.sh的自动更新:打开已运行的acme.sh容器的终端机页面,点击“通过命令启动”,输入“sh”后点确定,然后输入以下命令实现自动更新:acme.sh –upgrade –auto-upgrade。

参考资料:

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

 

 

© 版权声明

相关文章