考虑到 ZeroSSL 对比 Let's Encrypt 有更好兼容性,且接口不存在使用频率的限制。因此本脚本默认使用 ZeroSSL 作为证书签发服务器。
部署教程
1、启用 SSH 服务
进入 DSM 控制面板 > 终端机和 SNMP > 终端机,勾选启用 SSH 服务。指定 SSH 连接的端口号并保存设置。为了确保系统安全性,建议将默认端口 22
替换为其他端口号。更多详见《群晖Synology如何获取root权限?》
2、克隆源码
# 切换为root用户
sudo -i
# 进入目录
cd /volume1
# DSM 6.x 系统
git clone https://github.com/hugoyue/syno-acme.git
# DSM 7.x 系统
git clone -b dsm7 https://github.com/hugoyue/syno-acme.git
3、配置文件
建议先在 ZeroSSL 官方网站:https://zerossl.com/ 使用邮箱注册账号,然后使用同一个邮箱账号配置 config 变量中的 ZeroSSL_Email
使用 vim
或 nano
命令修改 config
配置文件
vim /volume1/syno-acme/config
根据注释信息,进行修改:
# 你主域名,如 baidu.com sina.com.cn 等
export DOMAIN=your_domain
# DNS类型,根据域名服务商而定,例如阿里云对应(dns_ali),Dnspod 对应(dns_dp)等
export DNS=dns_xxx
# DNS API 生效等待时间 值(单位:秒)
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
export DNS_SLEEP=600
# 设置证书签发服务器 zerossl 或 letsencrypt
export SERVER_NAME="zerossl"
# 填写用于注册 ZeroSSL 账号的邮箱
export [email protected]
# 填写 dns_ali 对应阿里云域名服务商提供的授权密钥
export Ali_Key="LTqIA87hOKdjevsf5"
export Ali_Secret="0p5EYueFNq501xnCPzKNbx6K51qPH2"
# 填写 DNS=dns_dp 对应 DNS 域名平台提供的授权密钥
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
# 若需要开启bark通知,请取消 # 注释符,并替换 BARK_API_URL
#export BARK_API_URL="https://api.day.app/XXXXXXXXXXXXXXXXXXXXXX"
#export BARK_SOUND="newmail"
#export BARK_GROUP=ACME
其它域名服务商,可以参照 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi 来添加自己的配置。一般情况下,这个页面每个文件对应一个域名服务商,比如dns_ali.sh
对应阿里云,文件名去掉.sh
扩展名就是DNS类型,比如阿里云的DNS类型就是dns_ali
。
4、脚本执行
# 赋予执行权限
chmod +x /volume1/syno-acme/cert-up.sh
# 生成证书/更新证书
/volume1/syno-acme/cert-up.sh update >> /volume1/syno-acme/log.txt 2>&1
定时任务
免费的 ZeroSSL 证书有效期只有三个月,这里我们配置一条定时任务,使其保持在每月1日1时整,执行一次更新
# 编辑 crontab 文件
vim /etc/crontab
# 增加一条任务计划,保存并退出
0 1 1 * * root /volume1/syno-acme/cert-up.sh update >> /volume1/syno-acme/log.txt 2>&1
重启 CRON 服务,使其生效。
# DSM 6.x 系统
synoservice --restart crond
# DSM 7.x 系统
synosystemctl restart crond
日常维护
1)执行回滚
更新证书命令执行过程中,会以当前系统日期时间命名创建文件夹,为当前系统证书创建备份,备份文件路径位于 /volume1/syno-acme/backup
下,存储在以时间日期命名的文件夹内,例如 20221023030003
# 回滚到最近的一次备份
/volume1/syno-acme/cert-up.sh revert
# 回滚到指定日期、时间的备份,例如 20221023030003
/volume1/syno-acme/cert-up.sh revert 20221023030003
2)日志查看
查看最近 1000 条日志记录,寻找问题根源。
tail -n 1000 /volume1/syno-acme/log.txt
3)常见问题
3.1)问题一
若证书服务器使用的是 zerossl,在进行 DNS 验证过程时出现提示信息 Processing, The CA is processing your order, please just wait.
无法完成验证,请修改 config
文件,将:
export SERVER_NAME="zerossl"
修改为:
export SERVER_NAME="letsencrypt"
然后,重新执行 生成证书/更新证书 的相关命令。
3.2)问题二
若证书服务器使用的是 letsencrypt,如果出现 code:60
错误,无法建立SSL连接,请升级群辉内置CA机构根证书,请以 root 用户执行以下命令:
# 备份根证书
mv /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt.bak
# 更新根证书
curl -Lko /etc/ssl/certs/ca-certificates.crt https://curl.se/ca/cacert.pem
3.3)问题三
兼容性相关问题可通过 https://ssl-config.mozilla.org/
在线工具,依据服务器环境生成 SSL 配置文件来获得更好的证书兼容性。
相关推荐
- 群晖 Synology 部署 Bitwarden 密码管理器
- 在群晖 Synology 上搭建 Bark 消息推送服务器
- 因群晖NAS系统CA证书失效导致的系列问题
- 在群晖NAS上搭建Cloudreve网盘系统
- ChineseSubfinder - 电影剧集中文字幕刮削器(群晖 Docker 部署篇)
- 群晖 Synology FTP 连接报错 "500 Illegal PORT range rejected" 解决方案
文章作者:喵斯基部落
原文地址:https://www.moewah.com/archives/5199.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。
你好,请问你使用过用这个证书来配置synology自带的openvpnserver吗?它一直提示tls错误。
后面我在网上搜寻了解决办法试,在证书面板里手动导入acme获取的证书,但是要将CA作为中间证书上传,然后以这个证书作为openvpnserver的启动器,这样才能正常连接,但这样就很麻烦,3个月就要手动更新一次vpn的证书
没用过,你可以试着找下synology自带的openvpnserver套件在本地存放证书路径,如果有的话。然后 ln -s 建立软连接由synology默认的证书地址 到 openvpnserver 套件默认的证书存放地址。(这只是一个构想)
另外看到你分享了Bark、Bitwarden等工具使用教程,我刚好也在使用。补充一个小技巧,群晖其实自带了反代功能,无需每次部署新服务都去手动修改 Nginx 配置文件。设置项在【控制面板-登录门户-高级-反向代理服务器】。
这个主要还是我个人的习惯,哈哈哈。
大佬你好,这个工具很好用。我想接入bark提醒SSL证书申请成功与否,acme.sh找到了相关文档(https://github.com/acmesh-official/acme.sh/wiki/notify),但我是个小白,请问你这个工具可以结合使用么,改如何配置?
可以的,按照格式配置变量环境就可以了 https://github.com/acmesh-official/acme.sh/wiki/notify#16-set-notification-for-ios-bark
ssh 执行以下命令(BARK API)替换成你个人的
然后,修改源代码 syno-acme/cert-up.sh 文件大概是 第 64 行,
${ACME_BIN_PATH}/acme.sh --force --log --issue --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}"
末尾追加选项--set-notify --notify-hook bark
变成:然后正常执行证书申请命令即可。