群晖使用acme申请泛域名证书并设置自动证书部署

2022-05-02 22:23:30 85点赞 725收藏 65评论

特别鸣谢

特别感谢UC新闻震惊部大佬的教程,终于让我摆脱了每三个月一次的证书手动替换;

原文链接: 群晖使用acme.sh申请并部署泛域名证书_NAS存储_什么值得买 (smzdm.com)

主要内容

通过群晖docker中的acme映像,实现自动证书获取并登录群晖将证书进行替换;

同时本文只提供在阿里云解析的域名教程,CloudFlare应该也可以实现,不过我试了很久,总是提示api有问题,所以转到了阿里云;如果有大佬知道cfapi设置方法的可以告知一下。

文章分为以下部分:

  1. 获取阿里云api;

  2. 群晖二次验证did获取;

  3. docker版acme安装及设置;

  4. 自动部署脚本及定时任务的设置。

1.阿里云api申请

(1)登录阿里云,进入控制台后,移动到右上角的头像,选中AccessKey 管理;

群晖使用acme申请泛域名证书并设置自动证书部署

(2)进入AccessKey 管理后,点击创建AccessKey,通过验证后会获得“AccessKey ID” 与 “AccessKey Secret”;保存好这两串字符备用。

群晖使用acme申请泛域名证书并设置自动证书部署

2.群晖二次验证did获取

如果群晖开了二次验证需要获取一个did,没开的小伙伴直接跳到第3步;群晖使用acme申请泛域名证书并设置自动证书部署

通过内网登录群晖以后,以edge或者chrome浏览器为例,按F12弹出开发者工具,选择“网络”;

按ctrl+r;

刷新完成后在名称中找到与内网群晖ip一致的记录(其实其他记录也会有cookie),选择“标头”,下拉找到"Cookie",在后面的内容中找到 "did" 开头的一串字符,将"did=" 后面所有的字符全部保存好备用(以下简称did);

群晖使用acme申请泛域名证书并设置自动证书部署

3.docker版acme安装及设置

(1)在群晖中找到docker,点击注册表,搜索“acme” ,双击neilpang/acme.sh,选择latest下载;

群晖使用acme申请泛域名证书并设置自动证书部署

(2)映像下载完毕后,双击neilpang/acme.sh,设置容器名称(这里容器名称设置为”acme“,名称在后面设置中会用到),选择高级设置;

群晖使用acme申请泛域名证书并设置自动证书部署

(3)选择存储空间,添加文件夹(我已经在共享文件夹的docker文件夹内新建了一个acme的文件夹,这里映射acme文件夹主要用于存储acme的一些设置,尽管可能不会用到这些设置,但还是建议映射一下,本人也没有测试不映射能不能跑起来。),本地文件夹选择docker下面的acme,映射 /acme.sh

群晖使用acme申请泛域名证书并设置自动证书部署

(4)选择网络,勾选使用与 Docker Host 相同的网络;

群晖使用acme申请泛域名证书并设置自动证书部署

(5)选择环境,添加如下环境变量;

群晖使用acme申请泛域名证书并设置自动证书部署

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是否运行。

群晖使用acme申请泛域名证书并设置自动证书部署

群晖使用acme申请泛域名证书并设置自动证书部署

群晖使用acme申请泛域名证书并设置自动证书部署

4.自动部署脚本及定时任务的设置。

(1)自动脚步获取

#!/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

群晖安装文本编辑器套件,打开套件中心,搜索文本编辑器并安装

群晖使用acme申请泛域名证书并设置自动证书部署

找到刚刚上传的 cert-up-docker.sh ,右键 用文本编辑器 打开;

群晖使用acme申请泛域名证书并设置自动证书部署

找到 DOMAIN ,将引号内的内容改为自己的域名并保存;

最后两行代码中包含了docker的容器名称,容器名称详见3.(2),将acme修改为你设置的容器名称;

docker exec acme $generateCrtCommand

docker exec acme $installCrtCommand

群晖使用acme申请泛域名证书并设置自动证书部署

保存好以后,再次右键 cert-up-docker.sh , 选择”属性“, 将位置保存备用,我的存储位置为”/volume1/shell/acme/cert-up-docker.sh“;

群晖使用acme申请泛域名证书并设置自动证书部署

(4)添加任务计划,实现自动更新

打开控制面板,找到任务计划,点击新增,选择计划的任务,选择用户定义的脚本;

群晖使用acme申请泛域名证书并设置自动证书部署

在创建任务的常规中,可以修改任务名称;

选择计划,可以设置计划运行的频率,建议设置为每个月运行一次,运行时间也可以自由选择;

选择任务设置,在用户定义的脚本中输入:

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同目录下,方便查看日志;

设置完成以后就可以点击确定了;

设置完成以后可以运行一遍,回到任务计划,找到刚刚创建的任务,右键运行;

群晖使用acme申请泛域名证书并设置自动证书部署

运行日志可以到设置的存放日志的文件夹中查看;

群晖使用acme申请泛域名证书并设置自动证书部署

总结

感谢各位默默付出的大佬群晖使用acme申请泛域名证书并设置自动证书部署 ,再也不用手动更新证书了群晖使用acme申请泛域名证书并设置自动证书部署 ~~~~

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
65评论

  • 精彩
  • 最新
  • 这个证书有什么用?

    校验提示文案

    提交
    去掉你在浏览器打开的时候 提示你不安全的提示

    校验提示文案

    提交
    是在外面用浏览器防问家里的NAS管理界面时吗?还是在家里用电脑防问NAS的管理介面时?

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 申请的证书存哪里了?是自动替换群晖系统设置里面的证书吗?

    校验提示文案

    提交
    自动替换群晖系统设置里面的证书

    校验提示文案

    提交
    收起所有回复
  • 威联通的好像直接用 为啥要一段时间换

    校验提示文案

    提交
    泛域名有效期3个月。

    校验提示文案

    提交
    收起所有回复
  • 费劲巴拉申请下来,结果证书还是不被浏览器信任,依然提示不安全。

    校验提示文案

    提交
    怎么会呢~我acme的证书用了几年了,浏览器没提示过。

    校验提示文案

    提交
    内网都会显示不安全,外网是正常的不用当心,这个只是浏览器显示而已。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我还是用一年有效期的吧,一年一次也不是很麻烦

    校验提示文案

    提交
    嗯嗯,单域名用一年的证书就足够了。

    校验提示文案

    提交
    群辉自己的证书,自己三个月自动换,不知道楼主为啥这么折腾!

    校验提示文案

    提交
    收起所有回复
  • 两个公网,两台白裙,十年域名,acme,反向代理,全都搞了,现在有点索然无味,每天用Plex看看片打发时间……

    校验提示文案

    提交
    说明部署阶段你肯定下了功夫,不然不能愉快的应用,三天两头处理bug。

    校验提示文案

    提交
    收起所有回复
  • freessl的亚洲诚信+dynv6的ddns怎么弄

    校验提示文案

    提交
    dynv6没用过,我现在用的群晖自带的+ddns-go。

    校验提示文案

    提交
    收起所有回复
  • 自动脚本跑完日志文件是这个提示。第三步结束后容器正常运行,但是获取的证书在哪里? 求楼主解答

    校验提示文案

    提交
    从日志提示来看,应该是权限问题,没有拿到证书。

    校验提示文案

    提交
    收起所有回复
  • Unable to authenticate to 去看看:5888 - check your username & password.提示账号密码错误,可是我试了可以登录,是acme版本太新了不支持6.2.3了吗

    校验提示文案

    提交
    如果提示这个,那肯定是账号密码错了。

    校验提示文案

    提交
    收起所有回复
  • 很多文章都写了证书的申请和使用方法,但没有一篇写证书的作用和意义

    校验提示文案

    提交
    如果您懂抓包就明白证书有用了,http是走明文什么意思呢就是你登陆群晖假如有人抓你包你的秘密和账号会被看得一清二楚,但是https就是加密没有证书认证你看到的是一堆乱码明白了https重要性了吧,证书的出现是保证我们安全的一大要素,要不然为啥现在网站都是https。

    校验提示文案

    提交
    就是说如果我在外面连接家里nas,不用证书也可以连,只是有提示,但有证书除了没提示也更安全一点?

    校验提示文案

    提交
    收起所有回复
  • 为什么我运行完生成了一个KEY文件,一个CSR,两个conf,不会自动替换证书,我手动替换也提示不对

    校验提示文案

    提交
  • 请问这么多关键信息都暴露了,还安全吗?

    校验提示文案

    提交
    他好像也没暴露啥有用的信息啊,甚至连内网都打了码 [高兴]

    校验提示文案

    提交
    内网ip,打漏字了 [狂汗]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • github上有大佬改的多域名脚本 已经在用了 灰常方便

    校验提示文案

    提交
    链接发一下行吗,谢谢啦,我有三个域名,现在只能更新默认的那个,相当蛋疼

    校验提示文案

    提交
    收起所有回复
  • 没公网是不是意义不大

    校验提示文案

    提交
  • 也是看到uc震惊部弄的,绝对爽

    校验提示文案

    提交
  • 修改一下代码改成zerossl更爽

    校验提示文案

    提交
    有什么区别?另外ZEROSSL需要注册,也把邮箱一起加到代码里嘛?

    校验提示文案

    提交
    github里有说明,都忘了,好像是邮箱随便注册一下就行

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/acem/json": dial unix /var/run/docker.sock: connect: permission denied

    校验提示文案

    提交
    计划任务的权限不够,拥有者改成root

    校验提示文案

    提交
    计划任务的权限不够,拥有者改成root,另外申请完证书在映射文件夹

    校验提示文案

    提交
    收起所有回复
  • 请问是复制从"did=XXX;stay_login..."(did开始到所有结束),还是"did=xxx;",还是"did="和";"之间的值,现在一直提示Unable to authenticate to localhost:5000 using http.Check your username and password.Check your username and password.

    校验提示文案

    提交
  • 请问楼主,这个配置是不是只有7.0+的版本才能成功?我对照您的教程配置之后,没有生成免费证书好像0.0想学习了解一下问题出在哪了

    校验提示文案

    提交
  • 6.2.3支持吗?

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

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