1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > 域名 > 正文

域名

群晖使用acme申请泛域名证书并设置自动证书部署

1987web2022-08-09域名492
作者:值友1399538690

作者:值友1399538690

特别鸣谢

特别感谢UC新闻震惊部大佬的教程,终于让我摆脱了每三个月一次的证书手动替换;

原文链接: 群晖使用acme.sh申请并部署泛域名证书_NAS存储_什么值得买 (smzdm.com)

主要内容

通过群晖docker中的acme映像,实现自动证书获取并登录群晖将证书进行替换;

同时本文只提供在阿里云解析的域名教程,CloudFlare应该也可以实现,不过我试了很久,总是提示api有问题,所以转到了阿里云;如果有大佬知道cfapi设置方法的可以告知一下。

文章分为以下部分:

  1. 获取阿里云api;

  2. 群晖二次验证did获取;

  3. docker版acme安装及设置;

  4. 自动部署脚本及定时任务的设置。

1.阿里云api申请

(1)登录阿里云,进入控制台后,移动到右上角的头像,选中AccessKey 管理;

(2)进入AccessKey 管理后,点击创建AccessKey,通过验证后会获得AccessKey ID 与 AccessKey Secret;保存好这两串字符备用。

2.群晖二次验证did获取

如果群晖开了二次验证需要获取一个did,没开的小伙伴直接跳到第3步;

通过内网登录群晖以后,以edge或者chrome浏览器为例,按F12弹出开发者工具,选择网络;

按ctrl+r;

刷新完成后在名称中找到与内网群晖ip一致的记录(其实其他记录也会有cookie),选择标头,下拉找到"Cookie",在后面的内容中找到 "did" 开头的一串字符,将"did="后面所有的字符全部保存好备用(以下简称did);

3.docker版acme安装及设置

(1)在群晖中找到docker,点击注册表,搜索acme ,双击neilpang/acme.sh,选择latest下载;

(2)映像下载完毕后,双击neilpang/acme.sh,设置容器名称(这里容器名称设置为acme,名称在后面设置中会用到),选择高级设置;

(3)选择存储空间,添加文件夹(我已经在共享文件夹的docker文件夹内新建了一个acme的文件夹,这里映射acme文件夹主要用于存储acme的一些设置,尽管可能不会用到这些设置,但还是建议映射一下,本人也没有测试不映射能不能跑起来。),本地文件夹选择docker下面的acme,映射/acme.sh

(4)选择网络,勾选使用与 Docker Host 相同的网络;

(5)选择环境,添加如下环境变量;

Ali_Key      : 填入第一步获取的 AccessKey ID

Ali_Secret :  填入第一步获取的 AccessKey Secret

SYNO_DID  : 填入第二步获取的 DID (没有设置两步验证的忽略)

SYNO_Port : 填入群晖内网的端口号(我用的默认端口5000未修改)

SYNO_Username : 登录群晖的用户名

SYNO_Password  : 登录群晖的密码

SYNO_Certificate :要添加的证书的名字,空字符串("")为替换默认证书(我这里使用空字符串)

SYNO_Create  : 当SYNO_Certificate 不为("")时,需要设置自动创建的证书名(因为我是替换证书,所以没有设置,第一次设置证书的小伙伴可能会用到。)

(6)环境变量设置完成后,在命令中输入daemon,选择应用 下一步 应用 ; 完成后检查acme是否运行。

4.自动部署脚本及定时任务的设置。

(1)自动脚步获取

  • 自动运行脚本下载,移步 群晖使用acme.sh申请并部署泛域名证书_NAS存储_什么值得买 (smzdm.com) 评论区二楼;

  • 桌面新建 文本文档,将下方内容复制粘贴进新建的文本文档,文本文档另存为  cert-up-docker.sh

!/bin/bash

域名

DOMAIN=xxx.com

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

DNS=dns_ali

DNS API 生效等待时间 值(单位:秒),一般120即可

某些域名服务商的API生效时间较大,需要将这个值加大(比如900)

DNS_SLEEP=120

证书服务商,zerossl 和 letsencrypt,我使用letsencrypt,使用zerossl还需要注册

CERT_SERVER=letsencrypt

generateCrtCommand="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}""

installCrtCommand="acme.sh --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"

docker exec acme.sh $generateCrtCommand

docker exec acme.sh $installCrtCommand

(2)将自动脚本放到群晖共享文件夹中

我已经在群晖新建了一个名为shell的共享文件夹,在共享文件夹内新建了acme文件夹;

将下载好的 cert-up-docker.sh 上传到shell/acme文件夹;

(3)编辑 cert-up-docker.sh

群晖安装文本编辑器套件,打开套件中心,搜索文本编辑器并安装

找到刚刚上传的 cert-up-docker.sh ,右键 用文本编辑器 打开;

找到 DOMAIN ,将引号内的内容改为自己的域名并保存;

最后两行代码中包含了docker的容器名称,容器名称详见3.(2),将acme修改为你设置的容器名称;

docker execacme$generateCrtCommand

docker execacme$installCrtCommand

保存好以后,再次右键 cert-up-docker.sh , 选择属性, 将位置保存备用,我的存储位置为/volume1/shell/acme/cert-up-docker.sh;

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

打开控制面板,找到任务计划,点击新增,选择计划的任务,选择用户定义的脚本;

在创建任务的常规中,可以修改任务名称;

选择计划,可以设置计划运行的频率,建议设置为每个月运行一次,运行时间也可以自由选择;

选择任务设置,在用户定义的脚本中输入:

bash /volume1/shell/acme/cert-up-docker.sh >>/volume1/shell/acme/log.txt 2>&1

其中 /volume1/shell/acme/cert-up-docker.sh 为我的 cert-up-docker.sh 存储位置,获取方式详见4.(3);

/volume1/shell/acme/log.txt 2 为 log文件存放的位置,我放在cert-up-docker.sh同目录下,方便查看日志;

设置完成以后就可以点击确定了;

设置完成以后可以运行一遍,回到任务计划,找到刚刚创建的任务,右键运行;

运行日志可以到设置的存放日志的文件夹中查看;

总结

感谢各位默默付出的大佬 ,再也不用手动更新证书了 ~~~~