使用Docker搭建acme.sh签发群晖DSM的ssl证书

发布于 2024-01-25  488 次阅读


一、Docker安装acme.sh容器

1.1 新建数据存放文件夹

新建一个acme文件夹,后面容器映射需要用

这里是我已经运行过了,所以有文件,初次建立文件夹是没东西的

image-20240124201421814

1.2 下载Docker镜像

DSM7.2以上的系统可直接在Docker注册表里搜索neilpang/acme.sh点击就下载开始创建了

DSM7.1及以下的系统因Docker仓库路径没有更新,所以可能无法访问Docker的注册表,需要通过ssh连接群晖后使用下面命令下载镜像

(我是DSM7.1,使用第二个方法)

docker pull neilpang/acme.sh

1.3 新建容器

下载好后点击neilpang/acme.sh镜像新建容器,选择“使用与 Docker Host 相同的网络”,后点击下一步

image-20240124202423208

1.4环境变量

打开“高级设置”,在“环境变量”中新增以下环境变量

1)需要部署群晖的参数

SYNO_Username:群晖管理员账号

SYNO_Password:群晖管理员登录密码

SYNO_Certificate:"" (证书名,给空字符即可)

SYNO_Scheme:访问方式(http/https)(可选,默认http)

SYNO_Hostname:群晖ip地址(可选,默认localhost)

SYNO_Port:群晖访问端口(可选,默认5000)

更多参数可参考Github上的说明

Synology NAS Guide · acmesh-official/acme.sh Wiki · GitHub

image-20240124204137586

2) 需要申请证书的Cloudflare域名参数

Cloudflare有两种参数设置方式

  1. CF_Zone_ID与CF_Token组合方式
  2. CF_Key与CF_Email组合方式

强烈建议使用第一种CF_Zone_ID与CF_Token方式

方式1(最安全的方式):

CF_Zone_ID: 登录Cloudflare之后,进入域名管理在“概述”右下角上

CF_Token:“概述”右下角单击“获取您的API令牌”,没有令牌的的单击“创建令牌”,编辑区域 DNS点击使用模板,在“区域资源”里选择自己的域名然后生成API Token即可,记得保存到笔记本上,该令牌下次是看不到的。

image-20240124204008707
image-20240124204519065
image-20240124204721109
image-20240124204815504

=======上下两组参数选其一即可,官网更建议赋予Token,因为Global API的话权限太大========

方法2(不建议):

CF_Key:登录Cloudflare之后,进入域名管理在“概述”右下角单击“获取您的API令牌”然后点击“Global API Key 查看”即可

CF_Email:自己Cloudflare的登录邮箱

1.5 执行命令

执行命令输入"daemon"(选择常驻,如果不写的话,容器一般执行完一次之后就会停止了)

image-20240124205608946

1.6 映射文件夹

映射docker/acme文件夹到/acme.sh

单击"完成"并运行容器

image-20240124205256698

二、添加群晖计划任务

因免费证书有效期是90天,所以要每1~3个月申请一次证书才行。

因群晖DSM的计划任务有安全限制,建议先写成脚本后,使用计划任务去调用

1.设置脚本

新建可执行脚本并保存为"AutoCert.sh",内容如下

#!/bin/bash

docker exec neilpang-acme.sh1 acme.sh --force --log --issue --server letsencrypt --dns dns_cf --dnssleep 120 -d example.com -d *.example.com -k 4096

docker exec neilpang-acme.sh1 acme.sh --deploy -d example.com -d *.example.com --deploy-hook synology_dsm

==参数说明==

1)申请证书参数

neilpang-acme.sh1:容器的名字,根据自己的容器名填写

--server letsencrypt:选的是Let's Encrypt的免费证书

--dns dns_cf:这里选的是Cloudflare的DNS

--dnssleep 120:Sleep 120秒

-d example.com -d *.example.com:把example.com换成自己的域名即可

-k 4096 :RSA证书(需要ECC证书格式可改为-k ec-256,或省略)

2)部署证书到群晖参数

neilpang-acme.sh1:容器的名字,根据自己的容器名填写

--deploy -d example.com -d *.example.com:把example.com换成自己的域名即可

--deploy-hook synology_dsm:部署到群晖上

2.上传脚本

把保存好的"AutoCert.sh"文件,上传到群晖任意文件夹下,我这里是上传到Docker/acme文件夹下了

3.设置计划任务

打开"控制面板"选择"任务计划",“新增”->“计划任务”->“用户定义的脚本”

3.1.在"常规"选项输入任务名称,并选择"root"用户账户

image-20240124210553511

3.2"计划"选项卡上选择日期并设定为"每月重复"

image-20240124210630449

3.3"任务设置"选项卡,看个人是否选择电子邮件通知,"运行命令"处粘贴如下代码

bash /volume1/docker/acme/AutoCert.sh >>/volume1/docker/acme/log.txt 2>&1

前面是执行的"AutoCert.sh"脚本,后面是输出的log文件路径

image-20240124210701710

3.4点击该任务后,点击"运行"一次

image-20240124210806438

3.5如果运行没问题,在acme的文件夹下会生成证书,log文件也会有提示

image-20240124210851184

3.6 控制面板也会显示

image-20240124211617413

设置完成!

参考资料:

有兴趣研究群晖的SSL证书设置的,可以查看我之前转的 群晖 NAS SSL证书存放的路径

是一名喜欢每天折腾的咸鱼! 也是一名半退役的算竞摸鱼选手,参与过icpc,天梯赛,蓝桥等比赛. --------------------------------------------------- 百度 飞桨领航团-团长 Datawhale -专业助教 上海人工智能实验室 书生·浦语实战营- 助教 --------------------------------------------------- 认证类: 华为 Harmony OS应用开发者高级认证, NISP 一级认证, H3C NE-RS网络工程师认证 --------------------------------------------------- 荣获奖项荣誉: 第十八届“挑战杯”全国大学生课外学术科技作品竞赛 “揭榜挂帅”专项赛-全国特等奖、 “美亚杯”第八届中国电子取证大赛 三等奖、 “蓝桥杯”国优、 中国高校计算机大赛-团体程序天梯赛 省高校一等奖、 “蓝桥杯”省一等奖、 H3C新华三杯 省三等奖、 中国移动“梧桐杯”大数据创新大赛 省三等奖、 百度 飞桨领航团 金牌团长
最后更新于 2024-01-27