群晖配置acme自动更新群晖和服务器证书
文章目录
有几个在腾讯云申请的域名,过去这几个域名一直使用的是腾讯云的免费证书。之前这些证书使用期限是1年,在2024年4月25号
之后,证书有效期改成了3个月,后面要想保住ssl,就得每3个月换一次证书,这是逼人购买付费证书的节奏。
幸好世界上还有acme这样的好东西,可以自动化的申请、部署证书。
我的群晖和外网的服务器上都有绑定域名的服务,打算将acme部署在群晖上,原因有两点,
- 群晖自身的域名需要更新,acme部署在群晖上方便给群晖更新,同时也能通过ssh的方式给外网服务器更新,如果部署在外网,那么外网服务器可不方便给群晖更新(需要内网穿透)。
- 群晖更加稳定,云服务器后面可能随时更换上新。
一、安装
acme可以通过脚本或是docker的方式安装,这里我使用脚本安装的方式,原因是通过脚本安装的话,acme可以直接调用群晖本地的工具生成临时用户进行证书安装。如果是docker安装的方式,需要提供群晖系统管理员的账号密码信息,存在信息泄露的风险。
通过ssh登录群晖,执行以下命令安装acme。
|
|
二、使用
acme申请域名证书主要分为几个步骤,
- 获取域名服务商API Token,用于域名申请时的所有权验证。
- 申请证书。
- 部署安装证书。
- 配置证书自动更新。
2.1 获取域名服务商API Token
验证所有权一般有两种方式。
- 在绑定域名的http服务器下放一个特殊文件,证书服务商通过http服务检测到这个文件后,确认域名所有权。
- 给域名添加一条txt解析记录,证书服务商检测到这条解析记录后,确认所有权。
这里我更推荐第二种方式,相较第一种方式更为灵活。第一种方式必须要要有一个公网环境下的http服务器,但对于我这种需要部署在家里群晖上的情况来说,暴露一个公网环境的http服务还是比较麻烦的。
acme支持自动给域名添加txt解析记录,前提是需要我们提供域名服务商的API Token信息,以便acme能够通过域名服务商的API进行修改。
我的域名由cloudflare进行管理,因此这里以cloudflare进行演示。
在cloudflare域名页面的右下角可以看到API相关的信息。这里我们记录下Account ID
信息,之后点击Get your API token
。
在Get your API token
页面,基于 DNS模板 创建一个新的token。
按照上图示例创建好token后记录下来,后面会用到。
2.2 申请证书
在安装部分,将acme安装到了root账户的home目录下,即/root/.acme.sh
中。
接下来执行命令用于证书申请。
|
|
若无意外,证书将会申请成功,并存放在.acme目录下。
2.3 部署证书
接下来,我们需要分别将证书部署到群晖和远端服务器上。
2.3.1 部署到群晖
前面提到,我们采用脚本的形式安装了acme,为的就是在不需要群晖账户信息的情况下部署证书,执行以下命令部署。
|
|
若无意外,群晖的证书将会部署成功,相较于使用docker安装acme的方式来说,完全不需要我们的账户信息,非常简单。
2.3.2 部署证书到远端服务器
部署到服务器需要使用ssh的部署方式,这要求在群晖上可以通过ssh连接到公网的服务器上。
公网的服务器使用ssh密钥的方式登录,不建议使用密码,不安全。假设已经配置好使用密钥的方式连接远端的服务器,那么接下来把私钥放在群晖/root/.ssh
目录下,命名为id_rsa
,同时创建config文件,内容如下。
|
|
接下来继续配置acme。
|
|
2.3.3 同时部署到群晖和服务器
以上我们分别配置了使用了acme将证书部署在群晖和远端服务器上,由于acme只会记录我们最后执行的部署命令,因此我们需要一次性将证书部署到群晖和远端服务器上,这样acme在后续自动更新时,便能自动的将证书同时部署到群晖和远端服务器上。
使用下面的命令一次性将证书部署到群晖和远端服务器上。
|
|
2.4 配置证书自动更新
由于群晖默认没有安装crontab,因此这里使用群晖的任务计划
功能自动更新。
创建计划任务时需要指定使用root
用户执行命令。计划
部分,由于acme仅在证书到期前的一个月才会重新申请证书,稳妥起见,这里我设置每周检查一次。
最后的任务设置
部分,需要设置要执行的更新命令。这里配置如下。
|
|
如果有配置邮件通知功能的话,也可以配置下要通知的邮箱地址。
三、最后
至此,使用acme自动更新部署证书的工作就完成了,接下来就享受acme带来的便捷吧,再也不用手动更新证书了 😁。