类型
状态
日期
摘要
分类
标签
链接
图标
密码
说明
acme.sh 是一款方便,强大的 Let's Encrypt 域名证书申请续签程序,支持一键脚本和 docker 部署,支持 http 和 DNS 两种域名验证方式,其中包括手动,自动 DNS 及 DNS alias 模式方便各种环境和需求。
可同时申请合并多张单域名,泛域名证书,并自动续签证书和部署到项目。
acme.sh 的 github 链接:https://github.com/acmesh-official/acme.sh
一、准备 DNS API
通过使用域名服务商提供的 API 密钥,让 acme.sh 自动创建域名验证记录以申请域名证书。acme.sh 支持全球各种域名服务商的 API ,本文将以阿里云、腾讯云、Cloudflare 为例。
更多 DNS API 支持,请查看:官方 dnsapi
阿里云
荐使用子账户,并赋予子账户 DNS 权限,以确保安全性
登陆阿里云控制台 - 访问控制 RAM - 用户管理
新建用户并勾选
为该用户自动生成AccessKey

复制保存好生成的
AccessKey
信息
授权该用户,搜索
DNS,
并将 AliyunDNSFullAccess
移动至右侧确定。
根据官方
dnsapi
获取阿里云的 API
格式为:腾讯云
腾讯云的域名由
dnspod.cn
管理,登陆管理控制台,右上角选择 密钥管理
,创建密钥并复制保存好生成的 ID
和 Token
。
根据官方
dnsapi
获取 DNSPod.cn
的 API
格式为:Cloudflare
Cloudflare 的 API 分为 global api key 全局 API 和创建 new api token ,网上各种教程都是使用全局 API 。为确保安全,推荐创建 new api token 来使用。
登陆 Cloudflare 点域名进入,右侧有如下图 API 信息,首先复制保存
Account ID
。然后点击 Get your API token

点击
Create Token
创建新 API Token,具体参考如下:其中 Zone Resources 选择你的 Cloudflare 账户邮箱

复制保存生成的
API Token

根据官方
dnsapi
获取 CloudFlare
的 Using the new cloudflare api token
格式为:二、群晖 docker 部署
群晖 NAS 的 docker 容器部署,支持以下两种方式:
- docker executable 执行模式
- docker daemon 守护模式
1、docker executable 执行模式
群晖 NAS 的 DSM 中以 docker executable 执行模式 创建 docker 容器,会在创建时根据执行命令来申请证书,并在证书申请完成后停止容器。
配置 DNS API
手动创建
account.conf
文件,本文以 /docker/acme
目录为例:
根据上文获取的 API 格式,复制粘贴并保存。
实践过程中遇到自动生成的 AUTO_UPGRADE='1' 参数可能会导致 API 格式错误.建议手动加入

安装和配置容器
- 群晖 docker 注册表中搜索
acme.sh
并下载latest
最新版。
- 映像中启动容器
- 配置容器 - 高级设置
- 卷:添加文件夹以挂载配置文件和证书输出目录,选择本文示例的
docker/acme
,装载路径为/acme.sh
- 网络:勾选 使用与 Docker Host 相同的网络
- 环境:
执行命令
中添加以下申请证书命令,本文以cinas.cn
为例,申请泛域名证书。-issue --dns dns_dp -d cinas.cn -d *.cinas.cn
- DNS 参数:请根据域名 DNS 服务商来修改命令,其中
dns_dp
为腾讯云 DNSPod.cn 服务商,自行根据官方 dnsapi 修改.例如:dns_ali
为 阿里云 ,dns_cf
为 CLoudflare

多域名证书
acme.sh 可以同时申请多个域名。例如拥有域名
aaa.com
bbb.com
ccc.com
,只需要在命令后加上 d 空格 域名
即可。多域名申请证书会将多个证书合并为一个证书,并存放到以第一个域名命名的文件夹内,证书信息仅显示第一个域名的信息.
运行容器
- 配置完执行命令后应用启动容器
- 选择容器详情
- 查看日志显示开始申请证书(右下角刷新日志)
- 申请成功(右下角刷新日志)
docker executable 执行模式 完成申请后会自动停止容器,证书生成到
docker/acme
目录下到期续签
容器在申请成功之后会自动停止,请保留不要删除.待证书快到期时,只需点击启动即可再次申请.真正实现一键申请证书的需求.
2、docker daemon 守护模式
群晖 NAS 的 DSM 中以docker daemon 守护模式 创建 docker 容器,容器将常驻运行。通过容器终端机来执行证书申请命令,此方案适合经常申请证书的场景,无需多次配置容器参数。
docker daemon 守护模式 和 docker executable 执行模式 的 DNS API 配置和前期部署流程一样,依照上文执行到 环境 步骤。
环境:执行命令填写
daemon
以常驻运行。配置完执行命令后应用启动容器,选择容器详情,
选择
终端机
,点击 新增右侧
的箭头,通过命令启动
,输入 sh
确定选择
sh
的终端,先执行更新命令输入命令申请证书.本文以本站域名
cinas.cn
为例,申请泛域名证书然后就开始申请证书,等待申请成功。
通过群晖 SSH 使用命令行
除了上面的通过容器终端机 使用 sh 输入命令行的方式,还可以直接通过 群晖 SSH 使用命令行。
通过群晖 SSH 使用 docker 容器执行命令,需要如下命令:
DNS 参数及多域名证书
DNS 参数及多域名证书参照上文,注意守护模式的命令要多加一个
acme.sh
到期续签
docker daemon 守护模式 下
acme.sh
容器会根据申请记录,每 60 天自动更新证书本文讲解的两种部署方式可以根据实际需求选择使用,生成的证书文件务必使用含有完整证书链的
fullchain.cer
和 域名.key
来部署,避免因证书不完整出现的错误
3、基于 docker 容器化 的一键脚本
本脚本长期维护,后续会慢慢更新以支持更多服务商.可以访问以下gist地址star收藏:https://gist.github.com/stilleshan/02d8652ce320941e497d378a04ecf016
交互式脚本
交互式脚本仅支持 腾讯云 / 阿里云 / Cloudflare
执行以下命令直接使用,根据提示输入相关 API 信息即可申请:
非交互式固定域名证书申请
通过简单修改脚本,可以让本脚本作为固定证书申请使用,无交互式选项直接根据设置的域名和 API 信息进行申请,建议可以设置
crontab
定时每月执行。非交互式脚本可以支持 acme.sh 官方支持的 100 多个全球各种域名服务商的 API
编辑脚本修改 16 - 20 行,以下为示例:
4、DNS 手动模式
为了验证域名所有权,Let’s Encrypt 支持两种域名验证方式:
- dns 验证:手动 dns 方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权
- http 验证:http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了
手动 DNS 这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证,这里不 使用 DNS API,避免安全问题,通过群晖 SSH 操作如下:
请将 TXT 记录添加到您的 DNS 记录中。每次更新证书时都需要执行此步骤。使用 DNS api 模式,这一步可以自动化。
然后现在用
--renew
命令重试如果您使用 SHA CSR 颁发了暂存/生产证书,则使用 --force 开关覆盖旧 CER 的任何条目并颁发新 CER
如果您已签发带有 ECC CSR 的暂存/生产证书,则使用 --ecc --force 开关覆盖旧 CER 的任何条目并签发新的 CER
三、更换 acme.sh 默认的 Let's Encrypt CA 为 ZeroSSL CA
为什么选择 ZeroSSL
由于 Let's Encrypt 证书的 OCSP 验证域名由于未知原因无法访问,并且 Let's Encrypt 的 X3 根证书也将到期,之后会使用自己签发的根证书,虽然根证书更换后 OCSP 无法访问的问题会得到解决,但是新的根证书时间太短导致安卓 7 以下以及 16 年以前的一些设备没办法信任这个证书导致老设备的兼容性问题。并且 Let's Encrypt 证书未加入 360 浏览器根证书信任计划,导致 360 浏览器访问尤其是手机浏览器访问会出现证书问题。
ZeroSSL 家的 SSL 证书可支持 ACME 自动化部署,并且支持申请泛域名证书,而在 ACME 文档的介绍中发现,通过 ACME 自动部署的方式,可以进行无限制的签发普通域名、多域名证书、甚至通配证书等,并且可以 acme.sh 脚本官方也支持直接将 CA 切换到 ZeroSSL,直接一键就可以完成证书的切换。
更换 ACME.sh 的 CA 为 ZeroSSL
acme.sh 官方也支持切换 CA 到 ZeroSSL。
1.访问账户注册页面注册一个 ZeroSSL 账户

2.获取账户的 EAB 凭证,用来注册 acme 帐户

点击生成会生成你的 eab-kid 和 eab-hmac-key,复制保存下来;
3.注册 ACME 帐户
可以按照上面的教程在 acme 的终端机或者在群晖 SSH 中使用命令行,使用 eab key 与
acme.sh
申请的证书进行绑定于关联。
或者使用邮箱:
4.切换默认 CA
或者添加
-server zerossl
指令来签发新的证书5.签发新证书,这里签发的是泛域名证书
可以添加
-force
强制获取新证书四、更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新,因此 acme.sh 也经常更新以保持同步
升级 acme.sh 到最新版:
如果你不想手动升级,可以开启自动升级:
之后, acme.sh 就会自动保持更新了。
你也可以随时关闭自动更新:
五、出错怎么办
如果出错, 请添加 debug log: