首页 随记 正文

群辉NAS利用acme.sh自动化部署证书

sanmi头像 sanmi 随记 2022-03-23 11:03:10 8754
导读:        之前一直是使用手动的方式去申请和续签Let'sEncrypt泛域名SSL证...


SSL--1024x599.png

        之前一直是使用手动的方式去申请和续签Let's Encrypt泛域名SSL证书。最近为了更方便的自动化部署,详细研究使用了acme.sh这个项目,并成功自动申请了多个域名证书.同时该项目还能够自动续签证书,自动安装证书,支持广泛的环境和场景的部署,功能非常强大。

acme.sh 是一款方便,强大的 Let's Encrypt 域名证书申请续签程序。支持一键脚本和 docker 部署,支持 http 和 DNS 两种域名验证方式,其中包括手动,自动 DNS 及 DNS alias 模式方便各种环境和需求。可同时申请合并多张单域名,泛域名证书,并自动续签证书和部署到项目。

        既然Acme.sh功能这么强那就开始吧,我尽量说得详细些,步骤:

一、安装acme.sh程序

首先使用FinalShell或其它工具登陆群晖SSH端口,步骤是:

输入admin及密码 

输入sudo -i

输入root及密码

微信图片_20220323115411.png

输入以下代码安装acme.sh

wget https://github.com/Neilpang/acme.sh/archive/master.tar.gz
tar xvf master.tar.gz
cd acme.sh-master/
chmod a+x acme.sh

解压后需将其安全到我们能容易查看的目录内,输入代码:

./acme.sh --install --nocron --home "/volume1/docker/cert/challenges/acme.sh"

设置别名(创建 一个 bash 的 alias,方便使用):

alias acme.sh=/volume1/docker/cert/challenges/acme.sh/acme.sh

测试别名是否应用成功

acme.sh --version

微信图片_20220323121236.png

返回上述信息,表示设置成功。

注册acme账号执行脚本进行账号申请

acme.sh  --register-account  -m my@example.com --server zerossl

微信图片_20220323123547.png

注意:邮箱(my@example.com)记得改成自己的

二、配置阿里云、腾迅云或Cloudflare服务ID和密码,本文以Cloudflare为例,其他服务商自行实践。

阿里云

推荐使用子账户,并赋予子账户 DNS 权限,以确保安全性.

登陆阿里云控制台 - 访问控制 RAM - 用户管理

新建用户并勾选为该用户自动生成AccessKey,复制保存好生成的AccessKey信息。

授权该用户,搜索DNS,并将AliyunDNSFullAccess移动至右侧确定。

根据官方dnsapi获取阿里云的API格式为:

export Ali_Key="LTAI4Fd8J9qs4fxxxxxxxxxx"
export Ali_Secret="Xp3Z7NDOW0CJcPLKoUwqxxxxxxxxxx"

腾讯云

腾讯云的域名由dnspod.cn管理,登陆管理控制台,右上角选择密钥管理,创建密钥并复制保存好生成的IDToken

根据官方dnsapi获取DNSPod.cnAPI格式为:

export DP_Id="124xxx"
export DP_Key="54ddaa41245837600ce713xxxxxxxxxx"

Cloudflare

Cloudflare 的 API 分为 global api key 全局 API 和创建 new api token ,网上各种教程都是使用全局 API。为确保安全,推荐创建 new api token 来使用。

登陆 Cloudflare ,我的个人资料>API令牌>创建令牌>开始创建,设置如下

微信图片_20220323124445.png

设置完成以后,点击创建令牌。

微信图片_20220323124752.png

使用网站给出的代码测试令牌,点击Copy记录下你的令牌(API token

curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
     -H "Authorization: Bearer 你的令牌" \
     -H "Content-Type:application/json"

微信图片_20220323125816.png

返回如上信息表示设置正确。

进入随便一个域名管理界面,概述页面的最右下角有你的帐户ID(Account ID),复制并记录。

微信图片_20220323134411.png

根据官方dnsapi获取CloudFlareUsing the new cloudflare api token格式为:

export CF_Token="Latn0w4-*********************k4PtIDVVG"
export CF_Account_ID="a106***************************f26a"


三、生成证书并配置自动更新配置

1、配置好后,请选用相应的代码进行生成证书,我选用的是阿里云,所以代码是:

acme.sh --issue --dns dns_cf -d example.com -d *.example.com

注意:多域名可以在命令后面加入 -d xxx.com 等等,需要多少个就可增加多少,但是这些域名都需在你Cloudflare帐户下。

微信图片_20220323174333.png

等几分钟,返回如上信息,表示生成证书成功,一般如果配置成功的话,可以直接产生相应的证书,文件夹是以你的域名命名的,例如"example.com",里面有7个文件,分别是证书和系统文件,如下图已经/volume1/docker/cert/challenges/acme.sh/example.com目录中生成了7个文件。

2、配置证书

在NAS文件管理中找到/volume1/docker/cert/challenges/acme.sh/example.com,将example.com.keyfullchain.cer以及ca.cer个文件,下载到本地。

ca.cer是中间证书,可以不下载,也可不下载,随意。

微信图片_20220323174007.png

通过SSH输入以下命令,查看证书的配置目录

cd /usr/syno/etc/certificate/_archive/
ls

微信图片_20220323175000.png

记住/usr/syno/etc/certificate/_archive目录下的证书目录。

通过NAS控制面板>安全性>证书>新增,导入证书,导入刚下载的example.com.keyfullchain.cer(以及ca.cer)到NAS服务器中。

微信图片_20220323175322.png

导入证书完成后,再到/usr/syno/etc/certificate/_archive目录中看看新增的证书目录名称,我是之前已经配置过的,我的新证书配置目录是JQByw2,记住这个文件夹名称,下面需要用到。

这时你就可以在NAS控制面板>安全性>证书中看到您刚才配置的证书。

微信图片_20220323181603.png

设置成默认证书,点击设置,将系统默认选择为刚配置的证书即可。

3、配置自动更新证书

acme.sh --install-cert -d example.com --certpath /usr/syno/etc/certificate/_archive/JQByw2/cert.pem --keypath /usr/syno/etc/certificate/_archive/JQByw2/privkey.pem --fullchainpath /usr/syno/etc/certificate/_archive/JQByw2/fullchain.pem --capath /usr/syno/etc/certificate/_archive/JQByw2/chain.pem --reloadcmd "nginx -s reload"

配置完成,系统会重载Nginx。

添加计划任务,实现自动更新

控制面板>计划任务>新增>计划的任务>用户自定义脚本,用户帐号选择root,勾选已启动。

微信图片_20220323181937.png

任务设置选项的用户定义的脚本输入:

cd /volume1/docker/cert/challenges/acme.sh
./acme.sh --home /volume1/docker/cert/challenges/acme.sh --renew --force -d example.com -d *.example.com

QQ20220324-010638@2x.png

因为证书的有效期为90天,所以我们在计划选项中选择每月指定日期运行一次脚本,来更新证书,我设置的是每月20日0点运行。这样就不会出现证书过期的情况。

微信图片_20220323183150.png

经过测试,更新后会自动运行配置证书命令,如果不放心,可以再添加一个配置证书的计划任务。过程跟上一个脚本配置基本一样,只是脚本使用:

cd /volume1/docker/cert/challenges/acme.sh
./acme.sh --home /volume1/docker/cert/challenges/acme.sh --install-cert -d example.com --certpath /usr/syno/etc/certificate/_archive/JQByw2/cert.pem \--keypath /usr/syno/etc/certificate/_archive/JQByw2/privkey.pem --fullchainpath /usr/syno/etc/certificate/_archive/JQByw2/fullchain.pem --capath /usr/syno/etc/certificate/_archive/JQByw2/chain.pem --reloadcmd "nginx -s reload"

FC87F957-68FD-45ED-9B71-88D029180CB4.png

为保险起见,这个脚本设置运行时间应该比上一个晚半小时到一个小时,因为生成证书会需要几分钟,域名越多,生成证书需要的时间越多。

微信截图_20220323184129.png



打赏 支付宝打赏 微信打赏
本文地址:https://www.sanmi.org/post/12.html
免责申明
本站属于非赢利网站,所有内容均来自网络。如侵犯到您的权利,请联系3mi@3mi.me,谢谢!
广告3

网站分类

标签列表

退出请按Esc键

召唤伊斯特瓦尔