文章目录[隐藏]
前言
上文已经介绍了 acme.sh 的详细实践使用教程,网上关于群晖NAS上使用 acme.sh 来自动化申请和部署证书的相关文章已经有很多,由于群晖特殊的环境,只能通过 SSH 登陆到 Linux 环境使用命令来完成操作,对于新手可能并不友好。本文将详细介绍在群晖NAS的 DSM 管理界面 利用 docker 部署 acme.sh 服务来申请证书。
由于全自动化部署的整个流程不确定因素过多,所以本文仅针对申请步骤实现真正的一键申请.为保险起见还是手动导入证书。acme.sh 是一款方便,强大的 Let’s Encrypt 域名证书申请续签程序.支持一键脚本和 docker 部署.支持 http 和 DNS 两种域名验证方式,其中包括手动,自动 DNS 及 DNS alias 模式方便各种环境和需求.可同时申请合并多张单域名,泛域名证书,并自动续签证书和部署到项目。
部署简介
整个部署流程非常简单,具体为以下三个步骤:
- 准备 DNS API
- 安装 acme.sh
- 执行申请命令
准备 DNS API
通过使用域名服务商提供的 API 密钥,让 acme.sh 自动创建域名验证记录以申请域名证书. acme.sh 支持全球各种域名服务商的 API ,本文将以 阿里云、腾讯云、Cloudflare
为例.更多 DNS API 支持,请查看:官方dnsapi
阿里云
登陆阿里云控制台 – 访问控制 RAM – 用户管理
新建用户并勾选 为该用户自动生成AccessKey
授权该用户,搜索 DNS,并将 AliyunDNSFullAccess 移动至右侧确定。
根据官方 dnsapi 获取阿里云的 API 格式为:
1 2 |
export Ali_Key="LTAI4Fd8J9qs4fxxxxxxxxxx" export Ali_Secret="Xp3Z7NDOW0CJcPLKoUwqxxxxxxxxxx" |
腾讯云
腾讯云的域名由 dnspod.cn 管理,登陆管理控制台,右上角选择 密钥管理 ,创建密钥并复制保存好生成的 ID 和 Token 。
根据官方 dnsapi 获取 DNSPod.cn 的 API 格式为:
1 2 |
export DP_Id="124xxx" export DP_Key="54ddaa41245837600ce713xxxxxxxxxx" |
Cloudflare
登陆 Cloudflare 点域名进入,右侧有如下图 API 信息.首先复制保存 Account ID 然后点击 Get your API token
点击 Create Token 创建新 API Token,具体参考如下:
复制保存生成的 API Token
根据官方 dnsapi 获取 CloudFlare 的 Using the new cloudflare api token
格式为:
1 2 |
export CF_Token="PfCA6tyLxxxxxxxx-sS6ANgqzuVexxxxxxx" export CF_Account_ID="1fs48ec7e2063cb70hacc3xxxxxxxxxx" |
群晖 docker 部署
群晖NAS的 docker 容器部署,支持以下两种方式:
- docker executable 执行模式
- docker daemon 守护模式
docker executable 执行模式
配置 DNS API
手动创建 account.conf 文件.本文以 /docker/acme 目录为例。
根据上文获取的 API 格式,复制粘贴并保存.
1 2 3 |
export DP_Id="xxxxx" export DP_Key="xxxxxxxxxxxxxxxxxxxx" AUTO_UPGRADE='1' |
下载镜像启动容器
群晖 docker 注册表中搜索 acme.sh 并下载 latest 最新版。
配置容器
卷
添加文件夹以挂载配置文件和证书输出目录,选择本文示例的 docker/acme ,装载路径为 /acme.sh 。装载路径由镜像作者规定,不能修改,请直接复制粘贴.
网络
勾选使用与 Docker Host 相同的网络
环境
执行命令
中添加以下申请证书命令.本文以本站域名
ioiox.com
为例,申请泛域名证书.
1 |
--issue --dns dns_dp -d ioiox.com -d *.ioiox.com |
DNS 参数
请根据域名 DNS 服务商来修改命令,其中
dns_dp
为 腾讯云DNSPod.cn 服务商,自行根据官方dnsapi修改.例如:
dns_ali
为阿里云,
dns_cf
为CLoudflare.
多域名证书
acme.sh 可以同时申请多个域名.例如拥有域名
aaa.com
,
bbb.com
,
ccc.com
,只需要在命令后加上
-d 空格 域名
即可.
1 |
--issue --server letsencrypt --dns dns_dp -d aaa.com -d *.aaa.com -d bbb.com -d *.bbb.com -d ccc.com -d *.ccc.com |
运行容器
docker executable 执行模式 完成申请后会自动停止容器
证书生成到
docker/acme
到期续签
容器在申请成功之后会自动停止,请保留不要删除.待证书快到期时,只需点击启动即可再次申请.真正实现一键申请证书的需求.
docker daemon 守护模式
docker daemon 守护模式 和 docker executable 执行模式 的 DNS API 配置和前期部署流程一样,依照上文执行到 环境 步骤.
环境
执行命令填写
daemon
输入
sh
选择
sh
的终端,先执行更新命令.
1 |
acme.sh --upgrade --auto-upgrade |
输入命令申请证书.本文以本站域名
ioiox.com
为例,申请泛域名证书.
1 |
acme.sh --issue --server letsencrypt --dns dns_dp -d ioiox.com -d *.ioiox.com |
DNS 参数及多域名证书
DNS 参数及多域名证书参照上文,注意守护模式的命令要多加一个
acme.sh
.
1 |
acme.sh --issue --server letsencrypt --dns dns_dp -d aaa.com -d *.aaa.com -d bbb.com -d *.bbb.com -d ccc.com -d *.ccc.com |
到期续签
docker daemon 守护模式 下
acme.sh
容器会根据申请记录,每60天自动更新证书.
结语
本文讲解的两种部署方式可以根据实际需求选择使用,生成的证书文件务必使用含有完整证书链的
fullchain.cer
和
域名.key
来部署,
避免因证书不完整出现的错误
.博主就是因为出现过几次证书问题才决心研究使用此方案.
Views: 346