记群晖使用acme.sh自动续签&部署SSL证书(可兼顾一键回家)

文本首次发布在我的博客:
https://blog.mcloc.cn/2023/09/21/20230921-记群晖使用acme-sh自动续签SSL证书/
(博客中文章配图,建议去原文食用)

群晖默认带有自签署的SSL证书,足够日常使用了。但是浏览器会提示不安全,使用cloudflare进行代理时也无法开启完全(严格)模式。

如果想要完全体的SSL加密,还是需要自己部署可信CA的证书。但是免费通配符证书的有效期通常很短,有效期长的免费证书又不能通配。即使是付费的通配符证书,有效期一般也只有一年。

难道部署SSL证书就像西西弗斯推巨石,永远无法到达山顶吗?

或许不是,本文将做一些探索,尝试爬上这座山。

原理

在讲理论上的实现原理前,我们先明确一下需求。

无需频繁维护实现以下3点:

  • 1.直接访问用域名部署到群晖的服务处于HTTPS加密状态
  • 2.使用cloudflare代理群晖本地的服务时可以开启完全(严格)模式
  • 3.群晖的VPN Server(OpenVPN)可以稳定使用

接下来构想实现路径。

路径1:群晖部署cloudflare提供的适用于源服务器的15年长期证书。但是cloudflare并不在主流OS默认的可信CA列表中,浏览器会提示不安全。为了消除此警告,还需要将cloudflare的根证书手动添加到操作系统的可信证书里。此路径可以完美实现需求2和需求3,需求1部分完成,在其他没有将cloudflare的根证书添加到操作系统可信证书的客户端访问群晖的服务还是会提示不安全。如果你的群晖服务不直接暴露到公网,而是通过cloudflare对公网提供服务,可以采用此方案。

路径2:使用acme.sh自动续签&部署SSL证书。此方案无需客户端做任何操作即可实现HTTPS访问,可完美实现需求1和需求2。但是需求3无法达成,因为每次证书更新都会让群晖的OpenVPN配置文件被动更改,造成一键回家失效。

路径1和路径2都有缺点。但是只要同时使用两个路径,就能达成我们一开始的目标,做出现阶段可以做到的最优解。

路径确定:在群晖上部署cloudflare提供的15年长期证书,用于OpenVPN;同时使用acme.sh自动续签&部署SSL证书,用于实现HTTPS访问群晖服务和cloudflare加密回源。

实现

理论可行,开始动手。

网上有关于acme.sh自动续签&部署SSL证书的教程,故不再赘述,本文只指出主要步骤及关键易错点。如果你想要尝试,请务必搜索相关教程学习后再动手,不可只看文本。

首先从cookie中获取did,保存备用。此处需要注意,不是所有的did都可以用,我就在这里卡了好久,最后读文档才发现,只有在登陆群晖时勾选了记住密码,cookie中的did才有效。

然后拉取并创建容器 neilpang/acme.sh

确认容器状态正常后,编写脚本,并将脚本添加到群晖的计划任务。下方附有脚本,可直接复制后修改并保存为sh文件上传。

此处要注意,如果你的DNS服务商是cloudflare的话,CF_Key需要复制cloudflare个人资料里API 令牌Global API Key。如果你不想用这么大权限的key,也可以选择使用token,感兴趣的话可以自己研究(只需要将脚本中的CF_KeyCF_Email换成CF_TokenCF_Account_ID并通过-e命令传给容器就行了)。

#你的域名

DOMAIN=''

#证书供应商

CERT_SERVER='letsencrypt'

#DNS供应商 可选 dns_dp(腾讯云) dns_ali(阿里云) dns_cf 其他可查https://github.com/acmesh-official/acme.sh/wiki/dnsapi

DNS="dns_dp"

#群晖账号密码

SYNO_Username=''

SYNO_Password=''

#如果开启了双重验证请在浏览器登录时选中保存此设备,然后从COOKIE中获取did cookie

SYNO_Device_ID=''

#以下群晖配置非必要不要更改

SYNO_Hostname="localhost" # Specify if not using on localhost

SYNO_Scheme="http"

SYNO_Port="5000"

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

SYNO_Certificate=''

#以下三选一

#DNSPOD.CN 腾讯云

DP_Id=''

DP_Key=''

#阿里云

Ali_Key=''

Ali_Secret=''

#CF

CF_Key=''

CF_Email=''



case $DNS in

"dns_dp")

a="DP_Id=${DP_Id}"&&b="DP_Key=${DP_Key}"

;;

"dns_ali")

a="Ali_Key=${Ali_Key}"&&b="Ali_Secret=${Ali_Secret}"

;;

"dns_cf")

a="CF_Key=${CF_Key}"&&b="CF_Email=${CF_Email}"

;;

esac

c="SYNO_Username=${SYNO_Username}"

d="SYNO_Password=${SYNO_Password}"

# e="SYNO_TOTP_SECRET=${SYNO_TOTP_SECRET}" (已废弃,新的参数为SYNO_Device_ID)
e="SYNO_Device_ID=${SYNO_Device_ID}"

f="SYNO_Hostname=${SYNO_Hostname}"

g="SYNO_Scheme=${SYNO_Scheme}"

h="SYNO_Port=${SYNO_Port}"

i="SYNO_Certificate=${SYNO_Certificate}"

j="SYNO_DID=${SYNO_Device_ID}"

docker exec -e ${a} -e ${b} acme acme.sh --log --server "${CERT_SERVER}" --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns "${DNS}"

docker exec -e ${c} -e ${d} -e ${e} -e ${f} -e ${g} -e ${h} -e ${i} -e ${j} acme acme.sh --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns "${DNS}" --deploy --deploy-hook synology_dsm

完成这些后,你就已经完成了80%,剩下的就是一键回家的问题。

为了实现一键回家不会随着SSL证书的更新而失效,可以去cloudflare申请一个适用于源服务器的15年证书,并将其保存到群晖里(不要作为默认证书,默认证书是上面那个)。然后将此证书仅分配给VPN Server。

至此,构想完全实现。

感谢你的阅读,本人(blog.mcloc.cn)享有此文的著作权,转载请附原文地址。

### 回答1: Acme.sh是一个开源的脚本工具,可以帮助用户实现自动化的证书管理,包括SSL/TLS证书的获取、更新和部署,支持Let's Encrypt等公共CA中心。QNAP则是一款NAS网络存储设备,具有数据备份、远程访问等功能,同时也支持安装插件扩展其功能。Acme.sh和QNAP的结合,可以为QNAP设备提供快速、便捷的证书管理工具,保障其数据传输安全和隐私保护。安装Acme.sh后,用户只需要一条简单的命令,就可以自动获取证书并进行更新和部署,同时通过QNAP自带的Web服务器或Web Station功能,可以实现HTTPS协议下的安全访问和数据传输,提升数据安全级别。此外,Acme.sh还提供了多种验证方式,比如DNS、HTTP、TLS、TLS-ALPN等,可以应对不同证书申请场景,提高证书获取的成功率。总之,Acme.sh和QNAP的结合,在保证数据安全的同时,也为用户提供了更多的便利和灵活度,是QNAP用户的不错选择。 ### 回答2: Acme.sh是一个在Linux系统中自动化申请和更新Let's Encrypt SSL证书的工具,它可以简化证书的管理过程,让SSL证书部署更加简单和快捷。而QNAP则是一个网络存储设备的品牌,其设备多用于小型企业和家庭用户存储数据、共享数据等。 在Acme.sh和QNAP的结合下,用户可以在QNAP设备上自动化申请Let's Encrypt SSL证书,以保障QNAP设备上的数据传输安全。此外,使用Acme.sh与QNAP结合还可以方便地管理SSL证书的更新和扩展,减少了用户可能遇到的与证书管理相关的问题。 总的来说,Acme.sh与QNAP的结合为用户提供了一种更加简单、安全、可靠的SSL证书管理解决方案,这对于需要在QNAP设备上存储敏感数据的用户来说是非常有价值的。 ### 回答3: Acme.sh是一款高效、易用的SSL证书自动化管理工具,而QNAP则是一家以网络存储为主的制造商。acme.sh qnap可以理解为在QNAP设备上安装并配置acme.sh以便自动化管理SSL证书。 在QNAP设备上使用acme.sh,可以实现自动化地获取和更新SSL证书,使得网站的安全性得到保证。使用acme.sh的好处是它的支持范围非常广,可以与各种不同类型的Web服务器、CDN和DNS服务集成,方便快捷。 而且,acme.sh非常灵活,你可以在控制台中直接运行它,也可以使用脚本进行扩展。如果你是一名开发人员或系统管理员,那么acme.sh一定会帮助你更快更高效地管理SSL证书。 总之,acme.sh qnap是一种非常实用的工具,可以使得SSL证书管理更加简单方便,同时也能提高网站的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值