群晖使用acme.sh申请并部署泛域名证书

2022-04-11 18:19:25 29点赞 308收藏 112评论

追加修改(2022-04-19 08:32:35):
关于使用了两步验证的群晖设备,稍微会麻烦点 这个是官方的结局方法 With OTP (2-Factor-Authentication) Use your browser to sign in with the admin account you want to use. When entering the OTP code, check the "Save this device" checkbox and continue. get the device id from the cookie did (left click on the lock to the left side of the url - > Cookies and copy the content of the did cookie). set the environment variable to the cookie value: export syno_did =A1Bjk... 大概就是登录时勾选保存设备,然后去cookie获取did (左键单击 URL 左侧的锁 -> Cookies 并复制 did cookie 的内容) 最后将cookie 中的did复制导入脚本 针对第一种纯脚本,在config中添加配置 export SYNO_DID=A1Bjk 针对docker,在创建docker时添加SYNO_DID环境变量,值就是did

前言

最近把黑群晖升级到了7.0,并且去freenom搞了个免费的tk域名,就想着把ssl证书一并申请了

这样在外网访问时安全性也能有所加强

本次使用阿里的域名解析,理论上适用于dnspond等acme.sh支持的各种域名解析商

修改为相应的配置就行

首先去freenom后台修改nameserver为阿里的NS1.ALIDNS.COM

如果你是阿里的域名就略过

然后尝试去申请泛域名证书,使用Lets encrypt 的免费证书,有效期大约3个月

本机自带的证书申请貌似需要开放80或443,基本申请时不能通过的,pass

使用acme.sh工具申请

本机安装申请

由于群晖系统本身也是一个linux,acme.sh就是一个脚本,所以可以直接部署申请

经过一番查找,实际上已经有人在群晖上实现过证书部署的脚本

在git上搜索 andyzhshg/syno-acme 就能看到

不过看了下最后提交在2020年了,实际上有些已经不太适用了,本机测试申请是失败的

查看了下issue,有大佬已经提供了解决方案

解决方案在Issue #77

这个脚本的流程大概如下

下载acme.sh-->根据配置吃用acme.sh获取证书-->拷贝证书到群晖对应的目录-->重启web服务

不过在查询资料时意外发现群晖已经提供了api将证书文件导入(没找到最低支持版本,7.0可以),acme.sh也支持这一方案,(两步验证开启情况下需要额外配置,目前不适用,建议使用该脚本时暂时关闭)

所以我综合了issue里面的大佬的方案,简单修改了下脚本,使脚本跑了起来

主要是添加了acme.sh的版本判断,使用api导入证书,且尽量使用群晖界面操作,降低难度

包括一个config配置文件和cert-up.sh 脚本

首先,文本方式编辑打开config,根据自己的实际信息修改配置文件,建议使用文本编辑器或在群晖中用text editor修改,避免编码错误

群晖使用acme.sh申请并部署泛域名证书

在群晖建立文件夹,拷贝这两个文件进去,如图,路径随便,我是放在shell-acme中

群晖使用acme.sh申请并部署泛域名证书

然后在cert-up.sh处右键查看属性

群晖使用acme.sh申请并部署泛域名证书

找到该脚本真实位置

群晖使用acme.sh申请并部署泛域名证书

如图,我的这个是/volume1/shell/acme/cert-up.sh

接着使用自带的定时任务

设置-->任务计划-->新增定时任务-->计划的任务-->用户自定义脚本

群晖使用acme.sh申请并部署泛域名证书

名称自己定义(不能有中文),用户选择root

群晖使用acme.sh申请并部署泛域名证书

因为证书有效时间一般90天,计划选择每月重复

群晖使用acme.sh申请并部署泛域名证书

任务设置处添加如下命令,注意各命令间的空格

bash /volume1/shell/acme/cert-up.sh update >>/volume1/shell/acme/log.txt 2>&1

加粗部分为脚本实际路径,后面为日志路径,我放在同目录的log.txt中

根据你自己的脚本位置替换sh路径及日志路径前部分

这个命令会在脚本当前目录生成日志方便排查

群晖使用acme.sh申请并部署泛域名证书

注意没有换行,换行效果是群晖自己显示的

确定会提示危险信息,确定即可

群晖使用acme.sh申请并部署泛域名证书

完成之后直接右键执行一次,再到对应目录查看日志

群晖使用acme.sh申请并部署泛域名证书

稍等即可看到文件夹里多了一些东西

群晖使用acme.sh申请并部署泛域名证书

该脚本会首先下载acme.sh然后根据config配置申请证书,最后通过群晖自己的webhook注入并替换默认证书

注意日志会在此处卡2分钟左右

Sleep 120 seconds for the txt records to take effect

耐心等待,

无异常如图

群晖使用acme.sh申请并部署泛域名证书

成功后申请到了证书

默认证书会被替换

群晖使用acme.sh申请并部署泛域名证书

若想恢复原证书

证书-高级设置-重置证书即可

若选择新增证书的话可能需要重启web服务并手动修改证书使用范围,然后重启web服务

然后刷新应该就可以看到正式应用成功了

群晖使用acme.sh申请并部署泛域名证书

使用docker申请

acme.sh是个很绿色的脚本,不会在其他目录生成额外的文件,不会修改其他设置

不过对于我来说更喜欢使用docker,scme.sh也提供了docker安装,由于可以使用群晖提供的webhook,

我们得以更方便的使用docker来下载并导入证书

花了一点时间研究,使用docker也实现了同样的功能,感觉也更简洁点

docker方式本质上与本机安装没什么区别,只是把acme.sh放容器里了,对群晖影响更小

首先docker搜索 acme.sh并安装

群晖使用acme.sh申请并部署泛域名证书

下载完成后创建docker

群晖使用acme.sh申请并部署泛域名证书

注意容器名,因为后续需要使用docker命令行,所以需保证一致

这里使用acme.sh

映射文件夹,根据自己需要创建文件夹保存acme.sh脚本及证书信息

群晖使用acme.sh申请并部署泛域名证书

网络使用host

群晖使用acme.sh申请并部署泛域名证书


添加环境变量

群晖使用acme.sh申请并部署泛域名证书

参数名与之前的配置文件中的含义一致,大概解释下

Ali_Key和Ali_Secret 为阿里ddns的相关key与秘钥,其他服务商为对应的配置

例如你使用dnspond 则应该为 DP_Id和DP_Key,具体参数可参照配置文件或acme.sh官方文档

SYNO_Username和SYNO_Password 为群晖的用户名及密码

SYNO_Port 群晖的访问端口,http的默认为5000,如果你改动过就用改过之后的

SYNO_Certificate 要添加的证书的名字,空字符串("")的话就是替代默认证书,一般建议使用空字符串,除非你有多个证书

SYNO_Create 证书名不存在就自动创建,当SYNO_Certificate 不为""时需要(我这里没有添加)

添加命令,以守护方式运行,方便使用命令

群晖使用acme.sh申请并部署泛域名证书

然后启动这个容器

复制cert-up-docker.sh 到群晖指定文件夹中,内容如图

群晖使用acme.sh申请并部署泛域名证书

这个脚本做了两件事,利用acme.sh的docker容器执行申请证书与安装证书命令

即最后两行

修改DOMAIN 为自己的域名即可

我使用阿里的dns,使用其他的服务商修改为相应的,并且在创建docker时加入相应的环境变量

然后重复之前添加自定义计划的步骤,

拷贝cert-up-docker.sh到指定目录-->添加任务计划(root用户,每月一次)-->添加命令-->保存-->运行

命令如下

群晖使用acme.sh申请并部署泛域名证书

bash /volume1/shell/acme2/cert-up-docker.sh >>/volume1/shell/acme2/log.txt 2>&1

注意替换加粗为你的脚本和日志实际位置,运行即可

总结

这次的脚本在群晖7.0下测试使用通过,出现异常时可查看对应的log.txt,一般会有错误信息

根据错误日志排除即可

同时注意lets encrypt有申请次数限制

展开 收起
112评论

  • 精彩
  • 最新
  • 次数限制什么意思?求解

    校验提示文案

    提交
    letsencrypt申请证书有速率限制 [喜极而泣] ,我在写文章时多试了几次。。已经不能申请了,得过一段时间

    校验提示文案

    提交
    次数限制没看懂,又来个速率限制,这又是什么鬼 [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • 感谢分享,升级7.0后,云梦那个套件不能用了。试试这个

    校验提示文案

    提交
    这个就可以跟着acme走,基本能一直用的 [锁眉]

    校验提示文案

    提交
    收起所有回复
  • 泛域名证书收费了吧?

    校验提示文案

    提交
    Let's Encrypt 目前还免费吧 [惊喜]

    校验提示文案

    提交
    没找到泛域名证书的位置啊

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • cert-up-docker.sh这个文件从哪找啊

    校验提示文案

    提交
    评论区有度盘连接

    校验提示文案

    提交
    收起所有回复
  • 威联通有类似的方法吗

    校验提示文案

    提交
    鸽了一年,写好了 [龇牙]

    校验提示文案

    提交
    这个acme我之前搞过,成功了,但还是有点费劲,后来换成了nginx proxy manager,ui操作真方便

    校验提示文案

    提交
    收起所有回复
  • WARNING: Error loading config file: .dockercfg: $HOME is not defined,这个$HOME要定义吗?然后申请泛域名是要填写*.xxx.com还是只填xxx.com?

    校验提示文案

    提交
    xxx.com。。。脚本里默认的申请命令就是申请泛域名

    校验提示文案

    提交
    脚本默认申请泛域名。。。不需要*

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 大佬,DSM开启双重验证的怎么搞,日志提示需要添加一个环境变量
    [Sat Apr 16 11:51:45 UTC 2022] If two-factor authentication is enabled for the user, set SYNO_TOTP_SECRET.
    但是验证码是动态变化的,变量的值怎么填啊?

    校验提示文案

    提交
    官方说明发不出来。。。大概说下吧
    两步验证比较麻烦,官方的方法是登录时选中保存此设备,然后从cookie中获取didcookie
    (左键单击 URL 左侧的锁 -> Cookies 并复制 did cookie 的内容)
    最后在创建docker时添加 SYNO_DID 环境变量,变量值就是did

    校验提示文案

    提交
    官方给的解决方法是添加did。。。。回复全被吞了 [大囧] ,我追加到文章后面了,审核后应该能看到

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 来完了吗? 度盘链接被吃掉了?

    校验提示文案

    提交
    二楼有度娘连接

    校验提示文案

    提交
    感谢 有了

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 使用第二种docker的话容器是不是要一直运行着,会消耗资源吗

    校验提示文案

    提交
    会有一点,不过不大,好处是不会在主机上安装任何东西

    校验提示文案

    提交
    收起所有回复
  • 怎么下载呢?

    校验提示文案

    提交
    二楼有网盘链接 [邪恶]

    校验提示文案

    提交
    大佬,网盘连接失效了

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 虚拟机 dsm7.0 没问题,本机安装出错。/volume1/acme/cert-up.sh: line 65: ./config: No such file or directory

    校验提示文案

    提交
    没找到config文件?请确认下文件是否存在,以及位置是否正确 [观察]

    校验提示文案

    提交
    谢谢回复。看了下config.txt 有扩展名. 暂时不试了。docker上没有问题。

    校验提示文案

    提交
    收起所有回复
  • 找不到配置文件在哪里下载 [流鼻涕]

    校验提示文案

    提交
    。。。随便找个百度网盘的分享,把/s/后面的字符串替换为我2楼给的那一串就行,后面4位是密码 [抽烟]

    校验提示文案

    提交
    收起所有回复
  • 请问楼主,这个必须是7.0版本才支持么?

    校验提示文案

    提交
    不是,理论上应该都可用

    校验提示文案

    提交
    我操作了之后,在控制面板-安全性-证书那一栏,还是只能看见群晖自己的一张证书孤零零在那,请问是不是代表没有设置成功?可能问题是在哪一步呀0.0感谢楼主回复~

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 大佬,麻烦发个链接……

    校验提示文案

    提交
    连接在2楼,需要自己加百度网盘前缀 [得逞]

    校验提示文案

    提交
    现在连上了,但还有提取码多少 呀?

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 博主,还在吗?请教一下“针对docker,在创建docker时添加SYNO_DID环境变量,值就是did” 这个我设置啦,可是还是提示If two-factor authentication is enabled for the user, set SYNO_TOTP_SECRET. 不知道咋弄了,只好关了两部验证

    校验提示文案

    提交
    我看了下git,估计是群晖修改了2fa的流程啥的,脚本新增了SYNO_TOTP_SECRET变量,使用docker的话你可以尝试在docker的环境变量中添加SYNO_TOTP_SECRET,使用脚本的话需要在脚本中加入export SYNO_TOTP_SECRET=A1Bjk
    至于SYNO_TOTP_SECRET来源,这个我没使用过,且不太了解,下面是网络上搜索到的,不保证一定能使用:
    当您配置 2FA 时,您通常会扫描 QR 码以初始化代码生成器。 在 Synology 的那个对话框中,有一个名为“无法扫描?当您单击该链接时,您可以看到纯文本形式的“密钥”。 必须将此密钥用于SYNO_TOTP_SECRET 以便acme.sh 生成正确的密钥。 请注意,重置密钥时,还必须使用相同的密钥初始化生成器
    你可以试下

    校验提示文案

    提交
    感谢博主,我来试试~

    校验提示文案

    提交
    收起所有回复
  • 文件链接文章不让发,评论试试 度娘1IgNwoIWyiH5id0VEL1djvg f8fh
    [皱眉]

    校验提示文案

    提交
    感谢分享教程以及文件,着实不易 [赞一个]

    校验提示文案

    提交
    确实,改了好几次,git链接不能放,百度网盘也不能放。。。不知道啥时改的 [苦恼]

    校验提示文案

    提交
    还有20条回复
    收起所有回复
  • 请问下[Mon Apr 11 15:33:28 UTC 2022] SYNO_Username & SYNO_Password must be set
    [Mon Apr 11 15:33:28 UTC 2022] Error deploy for domain:****
    [Mon Apr 11 15:33:28 UTC 2022] Deploy error. 我已经填写了群晖的账户和密码,但是看日志报上面错,难道要设置成账户为root?

    校验提示文案

    提交
    是的 要root账户去执行

    校验提示文案

    提交
    不知道你解决了没,给后面的指条明路,如果确认没有开启账户二步认证,且配置文件或者环境中的端口、账户、密码都确认没错,但是日志中却反复提示登录失败的话可以尝试以下操作:
    1.进入控制面板→登录门户→DSM→网页服务→取消勾选自动将HTTP重定向到HTTPS。
    2.回到容器界面→在acme容器的环境中加入以下变量"SYNO_Scheme"(不包含引号)变量值为"http"(不包含引号)。
    如果以上都还没解决问题加个步骤。
    3.回到容器界面→在acme容器的环境中加入以下变量"SYNO_Hostname"(不包含引号)变量值为"xxx.xxx.xxx.xxx"(你群晖的内网IP,不包含引号)
    配置文件修改应该类似,我没尝试,就是在配置文件中加export SYNO_Scheme="http"(包含引号)和SYNO_Hostname="xxx.xxx.xxx.xxx"(包含引号),记得变量之间换行。

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 使用群晖自带的ddns可以申请泛域名证书啊

    校验提示文案

    提交
  • 能自动续期?

    校验提示文案

    提交
  • 我一般用github action 帮我更新证书,群晖每个月定时更新下git就好了

    校验提示文案

    提交
    有教程吗大佬?

    校验提示文案

    提交
    这个方法好,刚就在想申请好证书后如何分发,私有仓库就可以。
    那你是怎么做的

    校验提示文案

    提交
    还有2条回复
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

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