群晖使用acme.sh申请并部署泛域名证书
追加修改(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修改,避免编码错误
在群晖建立文件夹,拷贝这两个文件进去,如图,路径随便,我是放在shell-acme中
然后在cert-up.sh处右键查看属性
找到该脚本真实位置
如图,我的这个是/volume1/shell/acme/cert-up.sh
接着使用自带的定时任务
设置-->任务计划-->新增定时任务-->计划的任务-->用户自定义脚本
名称自己定义(不能有中文),用户选择root
因为证书有效时间一般90天,计划选择每月重复
任务设置处添加如下命令,注意各命令间的空格
bash /volume1/shell/acme/cert-up.sh update >>/volume1/shell/acme/log.txt 2>&1
加粗部分为脚本实际路径,后面为日志路径,我放在同目录的log.txt中
根据你自己的脚本位置替换sh路径及日志路径前部分
这个命令会在脚本当前目录生成日志方便排查
注意没有换行,换行效果是群晖自己显示的
确定会提示危险信息,确定即可
完成之后直接右键执行一次,再到对应目录查看日志
稍等即可看到文件夹里多了一些东西
该脚本会首先下载acme.sh然后根据config配置申请证书,最后通过群晖自己的webhook注入并替换默认证书
注意日志会在此处卡2分钟左右
Sleep 120 seconds for the txt records to take effect
耐心等待,
无异常如图
成功后申请到了证书
默认证书会被替换
若想恢复原证书
证书-高级设置-重置证书即可
若选择新增证书的话可能需要重启web服务并手动修改证书使用范围,然后重启web服务
然后刷新应该就可以看到正式应用成功了
使用docker申请
acme.sh是个很绿色的脚本,不会在其他目录生成额外的文件,不会修改其他设置
不过对于我来说更喜欢使用docker,scme.sh也提供了docker安装,由于可以使用群晖提供的webhook,
我们得以更方便的使用docker来下载并导入证书
花了一点时间研究,使用docker也实现了同样的功能,感觉也更简洁点
docker方式本质上与本机安装没什么区别,只是把acme.sh放容器里了,对群晖影响更小
首先docker搜索 acme.sh并安装
下载完成后创建docker
注意容器名,因为后续需要使用docker命令行,所以需保证一致
这里使用acme.sh
映射文件夹,根据自己需要创建文件夹保存acme.sh脚本及证书信息
网络使用host
添加环境变量
参数名与之前的配置文件中的含义一致,大概解释下
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 不为""时需要(我这里没有添加)
添加命令,以守护方式运行,方便使用命令
然后启动这个容器
复制cert-up-docker.sh 到群晖指定文件夹中,内容如图
这个脚本做了两件事,利用acme.sh的docker容器执行申请证书与安装证书命令
即最后两行
修改DOMAIN 为自己的域名即可
我使用阿里的dns,使用其他的服务商修改为相应的,并且在创建docker时加入相应的环境变量
然后重复之前添加自定义计划的步骤,
拷贝cert-up-docker.sh到指定目录-->添加任务计划(root用户,每月一次)-->添加命令-->保存-->运行
命令如下
bash /volume1/shell/acme2/cert-up-docker.sh >>/volume1/shell/acme2/log.txt 2>&1
注意替换加粗为你的脚本和日志实际位置,运行即可
总结
这次的脚本在群晖7.0下测试使用通过,出现异常时可查看对应的log.txt,一般会有错误信息
根据错误日志排除即可
同时注意lets encrypt有申请次数限制























liiway
校验提示文案
POKO哑虎呸呸
校验提示文案
魔术师EW
校验提示文案
Zayia
校验提示文案
我就是cy
校验提示文案
上帝也忙着数钱
校验提示文案
值友5261303776
[Sat Apr 16 11:51:45 UTC 2022] If two-factor authentication is enabled for the user, set SYNO_TOTP_SECRET.
但是验证码是动态变化的,变量的值怎么填啊?
校验提示文案
solekg
校验提示文案
夏达丶控
校验提示文案
值友3091505254
校验提示文案
wlhwlh
校验提示文案
FsirOne
校验提示文案
戏丶时
校验提示文案
番禺靓仔
校验提示文案
Gaara
校验提示文案
UC新闻震惊部
校验提示文案
bleachzhou
[Mon Apr 11 15:33:28 UTC 2022] Error deploy for domain:****
[Mon Apr 11 15:33:28 UTC 2022] Deploy error. 我已经填写了群晖的账户和密码,但是看日志报上面错,难道要设置成账户为root?
校验提示文案
塞北的雪
校验提示文案
即是
校验提示文案
darkmagician
校验提示文案
值友4846335094
校验提示文案
值友8116208933
校验提示文案
熟悉又陌生
校验提示文案
熟悉又陌生
校验提示文案
Gaara
校验提示文案
菜场买白菜
校验提示文案
BG7WXB
校验提示文案
神奇萝卜
校验提示文案
值友8590375324
校验提示文案
ygxsg
校验提示文案
风风风风风起
校验提示文案
番禺靓仔
校验提示文案
戏丶时
校验提示文案
POKO哑虎呸呸
[Wed Jul 13 19:01:26 CST 2022] Can not init api for: 去看看
不能更新了
校验提示文案
FsirOne
校验提示文案
FsirOne
校验提示文案
wlhwlh
校验提示文案
值友3091505254
校验提示文案
值友3091505254
校验提示文案
夏达丶控
校验提示文案