【HomeLab】2023年!使用acme为群晖NAS自动部署证书

之前一直是用的阿里云的免费证书,只能单个域名申请,有效期一年。这样每年都需要进行证书更新,最近真的是头秃了。在查阅不少资料后,发现使用acme可以快速满足需求。

acme.sh是一款方便,强大的域名证书申请&续签工具,支持一键申请&持久化续签。其支持HTTP验证和 DNS 两种域名验证方式,并且可同时申请多张单域名,泛域名证书,并自动续签证书和部署到项目。如此强大的工具怎能不试试。

最终自己根据场景,选择自动化方案如下,通过阿里云AK,自动化添加TXT记录,进行域名解析校验。进而生成SSL证书进行部署。

  1. NAS为内网环境,无公网IP,故PASS掉HTTP方案。
  2. acme支持群晖自动部署,其使用登录脚本,进而调用群晖API进行证书部署。

一、 阿里云AK/SK生成

首先需要先申请AK/SK,在这里需要注意一下最小化权限。我们采用子账号授权来进行

  1. 打开阿里云子账户页面 https://ram.console.aliyun.com/users
    创建新用户
    创建用户

  2. 用户授权,添加对域名解析的访问权限
    用户授权
    在这里插入图片描述

  3. 生成AK/SK
    点击创建好的用户
    创建AK

在这里插入图片描述
保存好获取到的AccessKey ID以及AccessKey Secret,在后面步骤中会用到。

二、 群晖账号生成

同样,为了便于账号区分,在这里我新建了一个acme账号,授予Administrator权限。(最小化权限失败)
一方面是省的关闭自己使用账号的二次认证,另一方面也是以便后面进行日志审计。

控制面板->用户与群组->用户账号->新建

在这里插入图片描述

新建用户

在这里插入图片描述

然后一路下一步即可。

三、 Docker部署

通过docker-compose部署即可,相关脚本如下

  1. 目录结构
# 目录结构
.
 |docker-compose.yml
 |main
 | |domain.list
 | |add_domain.sh
 | |init_domain.sh
 | |start.sh
  1. docker-compose.yml
# docker-compose.yml
version: '3'
services:
  acme-service:
    image: neilpang/acme.sh
    container_name: acme
    volumes:
      - ./data:/acme.sh
      - ./main:/root/main
    environment:
      - Ali_Key= # 第一步获取到的AccessKey ID
      - Ali_Secret= # 第一步获取到的AccessKey Secret
      - SYNO_Hostname= # NAS登录的IP、或者HOST
      - SYNO_Scheme= # NAS登录协议,建议HTTP,免得HTTPS过期产生问题
      - SYNO_Port= # NAS登录端口
      - SYNO_Username= # NAS账号,建议使用新建账户账号
      - SYNO_Password= # NAS密码,建议使用新建账户密码
    tty: true
    command: daemon
  1. start.sh
#!/bin/sh
# start.sh
DOMAIN=$1
export SYNO_Certificate=$DOMAIN
export SYNO_Create=$DOMAIN

# DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,我使用阿里
DNS='dns_ali'
DNS_SLEEP=20

# 证书服务商,zerossl 和 letsencrypt,我使用letsencrypt
CERT_SERVER='letsencrypt'
generateCrtCommand="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}""
installCrtCommand="acme.sh --deploy -d "${DOMAIN}"  --deploy-hook synology_dsm"

$generateCrtCommand
$installCrtCommand
  1. init_domain.sh
#!/bin/sh
# 循环本地domain.list,并且进行证书部署
for line in `cat /root/main/domain.list`
do
    DOMAIN=$line
    sh /root/main/start.sh $DOMAIN
    echo "[+] $DOMAIN is over.. Please wait...."
    sleep 10
done
  1. domain.list
*.hello.com
*.test.cn
  1. add_domain.sh
#!/bin/sh

DOMAIN=$1
echo $DOMAIN >> domain.list
sh /root/main/start.sh $DOMAIN
echo "[+] Add $DOMAIN success!"

启动时,在domain.list中填写需要部署的域名即可,然后运行命令。

docker-compose up -d
docker exec acme sh /root/main/init_domain.sh

申请成功
申请成功

后续如果还要增加域名可以直接运行如下命令即可。

docker exec acme sh /root/main/add_domain.sh abc.hello.com

申请成功

注:虽然每次申请为90天,但acme默认会有自动部署检测,所以只要docker正常运行,我们没必要再去进行额外操作。

注2:SSH使用完记得关闭。

代码下载:https://download.csdn.net/download/qq_25924971/87405350

四、 安全加固-监控acme账号登录

TODO:好像群晖没有类似账号登录提示的功能,待进一步查看。

参考资料

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值