#群晖 部署 acme.sh自动申请和续签 SSL 证书详细教程
ACME(自动证书管理环境)是一个互联网工程任务组维护的协议,它允许自动化 Web 服务器证书的部署,acme.sh是支持 ACME 协议流行的客户端之一,可以通过其实现 SSL证书的自动申请、续期等。每次都要去申请SSL证书,对于很多小伙伴来说非常麻烦,特别是现在SSL证书开始要3个月申请一次,大家都觉得很不适应。本篇将为您介绍如何使用acme.sh自动申请SSL证书图文教程。
一、前置条件
黑群晖环境:已安装并正常运行的 DSM 系统。
Docker 环境:在 DSM 系统中已安装 Docker 套件。
Cloudflare 账号:拥有一个 Cloudflare 账号,并将域名托管在 Cloudflare。
域名解析:确保域名已正确解析到黑群晖的公网 IP 地址。
管理员权限:需要 DSM 管理员账号操作。
二、Cloudflare DNS API 准备
在使用 Cloudflare 的 DNS API 之前,需要获取 API 密钥(或 API 令牌)。
1. 获取 Global API Key(全局 API 密钥)
登录 Cloudflare 控制台。

进入 概览 ,在右侧向下滑动鼠标滚轮,滚到界面下方会看到区域ID、账户ID、和获取您的API 令牌。

在 API 令牌 区域,找到 Global API Key,点击 View 查看密钥。

记录下这个密钥,区域ID、账户ID用于后续配置。
三、Docker 部署 acme.sh
1. 创建 acme.sh 容器
登录 DSM 管理界面,进入 Docker 套件。
点击 注册表,搜索
acme.sh,选择官方或可信的版本(如neilpang/acme.sh)。下载镜像,等待完成。

2. 配置并运行容器
进入 映像,找到刚刚下载的
acme.sh镜像,点击 启动。在弹出的窗口中,选择 高级设置。

高级设置配置:
卷(挂载目录):
添加文件夹,挂载到
/acme.sh,用于存储证书。DSM 文件夹路径:如
/docker/acme.sh。容器内路径:
/acme.sh。

环境变量:
添加以下环境变量,用于配置 Cloudflare API:
CF_Account_ID:cloudflare的账户id。CF_Email:填写你的 Cloudflare 账号邮箱。CF_Key:如果使用 Global API Key,则填写你的 Global API Key。CF_Zone_ID: cloudflare的区域ID。
SYNO_DEVICE_ID:如果群晖开启了二次认证,需要设置这个环境变量,这个值需要F12打开开发者工具,然后随意从一个接口中的cookies字段获取,did的值就是device_id的值。

SYNO_DEVICE_NAME:如果群晖开启了二次认证,需要设置这个环境变量,默认为:CertRenewal

完成设置后,点击 应用,启动容器。
四、上传sh脚本
1. 在群晖创建目录acme.sh
登录群晖,在任意一个目录下创建一个acme.sh的文件夹,用户上传生成和安装ssl的sh脚本。
2.本机修改下面脚本,然后上传到群晖的acme.sh的文件夹下
#!/bin/bash
# 域名
DOMAIN='xxxxxxx.xyz'
# # DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,CloudFlare就是dns_cf
DNS='dns_cf'
# DNS API 生效等待时间 值(单位:秒),一般120即可
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
DNS_SLEEP=120
# 证书服务商,letsencrypt
CERT_SERVER='letsencrypt'
##--keylength 2048 表示生成rsa证书
generateCrtCommand="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}" --keylength 2048"
installCrtCommand="acme.sh --debug 3 --output-insecure --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"
docker exec acme-sh $generateCrtCommand
docker exec acme-sh $installCrtCommand
五、创建定时任务
1. 打开控制便面->任务管理

2、点击创建->定时任务->用户自定义脚本

3、输入任务名,用户最好用root。

4、设置运行频率,因为申请的证书3个月有效,可以设置每3个月运行一次,也可以设置每个月运行一次。

5、设置自定义脚本
bash /volume4/docker/acme.sh/cert.sh >> /volume4/docker/acme.sh/log.txt 2>&1
六、验证 HTTPS
打开浏览器,访问你的域名(如
https://yourdomain.com:端口)。检查浏览器地址栏是否显示安全锁标志。
如果显示安全锁,说明 HTTPS 配置成功。


fengkai1987
校验提示文案
ys563777443
Your cert key is in: /acme.sh/XXX.top_ecc/XXX.top.key
The intermediate CA cert is in: /acme.sh/XXX.top_ecc/ca.cer
And the full-chain cert is in: /acme.sh/XXX.top_ecc/fullchain.cer
[Sun Feb 2 02:39:27 UTC 2025] The domain 'XXX.top' seems to already have an ECC cert, let's use it.
Please refer to 去看看 for error code: 7
Logging into localhost:5000...
[Sun Feb 2 02:39:28 UTC 2025] Please refer to 去看看 for error code: 7
Unable to authenticate to http://localhost:5000, you may report this by providing full log with '--debug 3'.
Error deploying for domain: XXX.top
[Sun Feb 2 02:39:28 UTC 2025] Error encountered while deploying.
请问报这个错误是什么意思?我看这个日志里默认端口是5000 群晖网页端口我是自定义的,是和这个有关系吗?或者是要把http://localhost:5000这个改成内网地址和实际端口?
校验提示文案
mmpony
校验提示文案
elliot11
校验提示文案
elliot11
校验提示文案
mmpony
校验提示文案
ys563777443
Your cert key is in: /acme.sh/XXX.top_ecc/XXX.top.key
The intermediate CA cert is in: /acme.sh/XXX.top_ecc/ca.cer
And the full-chain cert is in: /acme.sh/XXX.top_ecc/fullchain.cer
[Sun Feb 2 02:39:27 UTC 2025] The domain 'XXX.top' seems to already have an ECC cert, let's use it.
Please refer to 去看看 for error code: 7
Logging into localhost:5000...
[Sun Feb 2 02:39:28 UTC 2025] Please refer to 去看看 for error code: 7
Unable to authenticate to http://localhost:5000, you may report this by providing full log with '--debug 3'.
Error deploying for domain: XXX.top
[Sun Feb 2 02:39:28 UTC 2025] Error encountered while deploying.
请问报这个错误是什么意思?我看这个日志里默认端口是5000 群晖网页端口我是自定义的,是和这个有关系吗?或者是要把http://localhost:5000这个改成内网地址和实际端口?
校验提示文案
fengkai1987
校验提示文案