1 利用acme.sh实现证书申请和续签
1.1 使用 docker 安装 acme.sh
创建目录和文件:
account.conf
export CF_Key="填入Cloudflare的Api Key"
export CF_Email="填入Cloudflare的登录邮箱"
AUTO_UPGRADE='1'
- 此处使用的是cloudflare进行域名托管
编写docker-compose.yaml文件
version: "3"
services:
acme.sh:
image: neilpang/acme.sh
container_name: acme.sh
restart: always
command: daemon
volumes:
- ./data:/acme.sh
network_mode: host
运行即可
1.2 申请泛域名证书
ssh切换root账户,输入
docker exec -it acme.sh sh
或者
在网页双击已运行的容器,切换到终端机页面,点击通过命令启动,输入 sh 后点确定(可选)
输入以下命令实现容器自动更新:
acme.sh --upgrade --auto-upgrade
然后输入以下命令申请证书:(以domain.com为例)
acme.sh --issue --dns dns_cf -d domain.com -d *.domain.com
- dns_cf:表示此处使用的是cloudflare进行域名托管。dns_dp 代表腾讯云 DNSPod。 dns_ali 代表阿里云。更多可参考官方描述。
- 申请完成后可自动续期(command: daemon)
2 编写脚本定时替换系统证书文件
2.1 手动导入一遍证书,让群晖自动生成存储地址
已导入过的请跳过
2.2 找到群晖自动生成存储证书的地址
通过研究发现,DSM将所有证书信息存放在了 /usr/syno/etc/certificate/_archive 目录下,且 /usr/syno/etc/certificate/_archive/DEFAULT 文件中记录了当前的默认证书(通常用户自设为购买的证书)
先查询默认证书的名字
注意一直要root账户运行
cat /usr/syno/etc/certificate/_archive/DEFAULT
2.3 编写脚本
在自己找得到的位置编写 update_certificate.sh
cp /volume2/docker/acme.sh/data/domain.com_ecc/fullchain.cer /usr/syno/etc/certificate/_archive/上面输出/fullchain.pem
cp /volume2/docker/acme.sh/data/domain.com_ecc/domain.com.cer /usr/syno/etc/certificate/_archive/上面输出/cert.pem
cp /volume2/docker/acme.sh/data/domain.com_ecc/domain.com.key /usr/syno/etc/certificate/_archive/上面输出/privkey.pem
systemctl reload nginx
systemctl restart nginx
- 主要目的就是把最新的证书覆盖到群晖相应文件夹中并重启nginx
- 默认是ecc加密的证书,安全,计算量小,所以文件夹后缀有"_ecc"
3 在群晖中新建计划任务
控制面板 -> 计划任务 ->新增
- 用户账号:root
- 每月1号执行一次
- 在用户自定义脚本下方填入
bash 脚本绝对地址
评论区