群晖NAS高级服务 – docker 部署 acme.sh 自动申请域名证书

前言

上文已经介绍了 acme.sh 的详细实践使用教程,网上关于群晖NAS上使用

acme.sh

来自动化申请和部署证书的相关文章已经有很多,由于群晖特殊的环境,只能通过 SSH 登陆到 Linux 环境使用命令来完成操作,对于新手可能并不友好.本文将详细介绍在群晖NAS的

DSM 管理界面

利用 docker 部署 acme.sh 服务来申请证书.

由于全自动化部署的整个流程不确定因素过多,所以本文仅针对申请步骤实现真正的一键申请.为保险起见还是手动导入证书.
acme.sh 是一款方便,强大的 Let’s Encrypt 域名证书申请续签程序.支持一键脚本和 docker 部署.支持 httpDNS 两种域名验证方式,其中包括手动,自动 DNSDNS alias 模式方便各种环境和需求.可同时申请合并多张单域名,泛域名证书,并自动续签证书和部署到项目.

本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.

部署简介

整个部署流程非常简单,具体为以下三个步骤:

  • 准备 DNS API
  • 安装 acme.sh
  • 执行申请命令
本文以最常规的 DNS API 验证模式为例,其他方式请参考官方Wiki.

准备 DNS API

通过使用域名服务商提供的 API 密钥,让

acme.sh

自动创建域名验证记录以申请域名证书. acme.sh 支持全球各种域名服务商的 API ,本文将以

阿里云

,

腾讯云

,

Cloudflare

为例.更多 DNS API 支持,请查看:官方dnsapi

阿里云

推荐使用子账户,并赋予子账户 DNS 权限,以确保安全性.

登陆阿里云控制台 – 访问控制 RAM – 用户管理
新建用户并勾选

为该用户自动生成AccessKey

3045514288-1

复制保存好生成的

AccessKey

信息
3855719536

授权该用户,搜索

DNS

,并将

AliyunDNSFullAccess

移动至右侧确定.
1939658513

根据官方

dnsapi

获取阿里云的

API

格式为:

export Ali_Key="LTAI4Fd8J9qs4fxxxxxxxxxx"
export Ali_Secret="Xp3Z7NDOW0CJcPLKoUwqxxxxxxxxxx"

腾讯云

腾讯云的域名由

dnspod.cn

管理,登陆管理控制台,右上角选择

密钥管理

,创建密钥并复制保存好生成的

ID

Token

.
3218835751

根据官方

dnsapi

获取

DNSPod.cn

API

格式为:

export DP_Id="124xxx"
export DP_Key="54ddaa41245837600ce713xxxxxxxxxx"

Cloudflare

Cloudflare 的 API 分为 global api key 全局 API 和创建 new api token ,网上各种教程都是使用全局 API .为确保安全,推荐创建 new api token 来使用.

登陆 Cloudflare 点域名进入,右侧有如下图 API 信息.首先复制保存

Account ID

.然后点击

Get your API token

.
2595721593

点击

Create Token

创建新 API Token,具体参考如下:

其中 Zone Resources 选择你的 Cloudflare 账户邮箱

2218702194

复制保存生成的

API Token

1557903647

根据官方

dnsapi

获取

CloudFlare

Using the new cloudflare api token

格式为:

export CF_Token="PfCA6tyLxxxxxxxx-sS6ANgqzuVexxxxxxx"
export CF_Account_ID="1fs48ec7e2063cb70hacc3xxxxxxxxxx"

群晖 docker 部署

群晖NAS的 docker 容器部署,支持以下两种方式:

  • docker executable 执行模式
  • docker daemon 守护模式

docker executable 执行模式

群晖NAS的 DSM 中以 docker executable 执行模式 创建 docker 容器,会在创建时根据执行命令来申请证书,并在证书申请完成后停止容器.

配置 DNS API

手动创建

account.conf

文件.本文以

/docker/acme

目录为例.
1627379978

根据上文获取的 API 格式,复制粘贴并保存.

实践过程中遇到自动生成的 AUTO_UPGRADE=’1′ 参数可能会导致 API 格式错误.建议手动加入.
export DP_Id="xxxxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxx"
AUTO_UPGRADE='1'

4278311209

下载镜像启动容器

群晖 docker 注册表中搜索

acme.sh

并下载

latest

最新版.
1535670460

映像中启动容器
1411502802

配置容器

高级设置
3400209572


添加文件夹以挂载配置文件和证书输出目录,选择本文示例的

docker/acme

,装载路径为

/acme.sh

.

装载路径由镜像作者规定,不能修改,请直接复制粘贴.

2407762448

网络

勾选

使用与 Docker Host 相同的网络
3849262329

环境

执行命令

中添加以下申请证书命令.本文以本站域名

ioiox.com

为例,申请泛域名证书.

--issue --dns dns_dp -d ioiox.com -d *.ioiox.com

2930139963

DNS 参数

请根据域名 DNS 服务商来修改命令,其中

dns_dp

腾讯云DNSPod.cn 服务商,自行根据官方dnsapi修改.例如:

dns_ali

阿里云,

dns_cf

CLoudflare.

多域名证书

acme.sh 可以同时申请多个域名.例如拥有域名

aaa.com

,

bbb.com

,

ccc.com

,只需要在命令后加上

-d 空格 域名

即可.

--issue --server letsencrypt --dns dns_dp -d aaa.com -d *.aaa.com -d bbb.com -d *.bbb.com -d ccc.com -d *.ccc.com
多域名申请证书会将多个证书合并为一个证书,并存放到以第一个域名命名的文件夹内,证书信息仅显示第一个域名的信息.

运行容器

配置完执行命令后应用启动容器
1903805191

选择容器详情
333238923

查看日志显示开始申请证书(右下角刷新日志)
1766894638

申请成功(右下角刷新日志)
3150786099

docker executable 执行模式 完成申请后会自动停止容器
2521881796

证书生成到

docker/acme

目录下
3234096448

到期续签

容器在申请成功之后会自动停止,请保留不要删除.待证书快到期时,只需点击启动即可再次申请.真正实现一键申请证书的需求.

docker daemon 守护模式

群晖NAS的 DSM 中以 docker daemon 守护模式 创建 docker 容器,容器将常驻运行.通过容器终端机来执行证书申请命令.此方案适合经常申请证书的场景,无需多次配置容器参数.

docker daemon 守护模式docker executable 执行模式 的 DNS API 配置和前期部署流程一样,依照上文执行到 环境 步骤.

环境

执行命令填写

daemon

以常驻运行.
1642356416

配置完执行命令后应用启动容器,选择容器详情.
1510553444

选择终端机,点击新增右侧的箭头,通过命令启动.
360007583

输入

sh

确定
2693861628

选择

sh

的终端,先执行更新命令.

acme.sh --upgrade --auto-upgrade

输入命令申请证书.本文以本站域名

ioiox.com

为例,申请泛域名证书.

acme.sh --issue --server letsencrypt --dns dns_dp -d ioiox.com -d *.ioiox.com

976196896

开始申请证书
432546673

申请成功
3071898544

DNS 参数及多域名证书

DNS 参数及多域名证书参照上文,注意守护模式的命令要多加一个

acme.sh

.

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

来部署,

避免因证书不完整出现的错误

.博主就是因为出现过几次证书问题才决心研究使用此方案.当然 acme.sh 还有很多的玩法请参考官方项目:

更多群晖NAS相关技巧,教程及信息,请持续关注本站群晖Synology专栏:


本站提供免费和付费的技术支持.你可以通过留言,邮件,TG群的方式来技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享