docker https 证书/多域名通配符自动续期(群晖https证书)

时间:2022-12-31 09:56:55


本文基于 freessl.cn 申请通配符域名自动续期。

使用docker的原因是为了方便可靠,不会因为不同的操作系统缺包无法安装 acme.sh,也不会在操作系统中留下灿烂内容,acme 版的docker 包含了运行环境。

主要步骤如下:

1、打开 ​​https://freessl.cn/​​ 官网,注册并登录

docker https 证书/多域名通配符自动续期(群晖https证书)

2、进入 ACME自动化 导航菜单,添加证书

docker https 证书/多域名通配符自动续期(群晖https证书)

3、配置域名解析

docker https 证书/多域名通配符自动续期(群晖https证书)

4、域名解析配置检测通过后,获得签发证书的命令

docker https 证书/多域名通配符自动续期(群晖https证书)

5、运行带有 acme.sh 运行环境的 docker 容器

docker run -itd \
-v "/opt/acme.sh":/acme.sh \
--net=host \
--restart=always \
--name=acme \
neilpang/acme.sh \
daemon

其中 ​​/opt/acme.sh​​ 为本地挂载目录,在初次生成证书后,里面会生成证书配置信息和证书文件。

6、运行脚本生成证书

docker exec acme \
acme.sh --issue \
-d demo.com -d *.demo.com \
--dns dns_dp \
--server https://acme.freessl.cn/v2/DV90/directory/xxxxxxxxxxxxxxxxxxxx

这个脚本可以重复执行,如果没有到下次自动续期的时间,它会输出日志提示你。如果需要强制重新生成和签发证书,添加 ​​--force​​ 参数即可。

7、配置自动续期定时任务

将上面的脚本原封不动的配置到系统的定时任务中,可以设置为每周执行一次。

附上 acme.sh 容器的官方连接:​​https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker​

至此结束,以上内容适合所有可以运行 docker 容器的 Linux 平台。


8、群晖补充篇

官方的 acme.sh 对群晖证书替换做了支持,通过追加参数 ​​--deploy-hook synology_dsm​​ 来实现。

这个 hook 的原理就是调用了群晖的 API 来发布证书,因为需要调用 API 需要群晖账号密码的支持,所以要先修改容器添加环境变量参数。

参数

说明

SYNO_DID

填入获取的 DID (没有设置两步验证的忽略),​​点击查看获取方法​

SYNO_Port

填入群晖内网的端口号(默认端口5000可以不提供)

SYNO_Username

登录群晖的用户名

SYNO_Password

登录群晖的密码

SYNO_Certificate

要添加的证书的名字,空字符串(“”)为替换默认证书

SYNO_Create

当 SYNO_Certificate 不为(“”)时,需要设置自动创建的证书名

(仅替换证书的可以不设置,第一次设置证书可能会用到)

运行容器的示例:

docker run -itd \
-v "/opt/acme.sh":/acme.sh \
-e SYNO_Username="demo" \
-e SYNO_Password="demo123" \
-e SYNO_Certificate="" \
--net=host \
--restart=always \
--name=acme \
neilpang/acme.sh \
daemon

然后再群晖的定时执行计划中添加任务,如下:

docker https 证书/多域名通配符自动续期(群晖https证书)

docker exec acme \
acme.sh --issue \
-d demo.com -d *.demo.com \
--dns dns_dp \
--server https://acme.freessl.cn/v2/DV90/directory/xxxxxxxxxxxxxxxxxxxx \
--deploy --deploy-hook synology_dsm

​--deploy​​​ 表示需要部署证书到server,​​--deploy-hook​​ 指定部署到的目标,exec 后面的 acme 是容器的名称。

网上很多帖子是将云平台的账号密码都配置在容器参数中,可以全自动化申请证书,个人不太推荐。虽然这样省去了配置DNS的步骤(这个DNS解析第一次配置一次就行了以后续期也不需要),但是这步省的意义不大且带来了账号信息泄露的风险。更多的时候,域名管理者可以配置一个DNS验证但是他可能更不希望提供账号密码。


(END)