通过 Certimate 统一管理 SSL 证书 支持自动化申请、全平台部署

本文首发于只抄博客,欢迎点击原文链接了解更多内容。
前言
你是否有这样一个烦恼?服务器和域名一多,每个域名都要单独申请证书,还要分发到每台服务器或者 CDN 平台上,并且现在的免费证书有效期还只有 90 天,每两三个月就要重复一遍上面的步骤。
即便你正在使用宝塔、1Panel 、acme.sh 这类面板或者工具来实现自动续期,它们也只能帮你更新单台服务器上的 SSL 证书,仍然无法避免多服务器部署 SSL 证书的繁琐步骤。
简介
今天介绍的 Certimate,正好可以解决这些痛点。你只需在一台服务器上安装 Certimate,就能自动化完成证书的申请与续签。所有证书都会集中存放在 Certimate 中,方便统一管理与查看各域名的到期时间。最后通过工作流,可以将证书批量部署到各台服务器或 CDN 上。
以后只需要设置好定时运行工作流,就能实现 SSL 证书从申请到部署的全流程自动化。
此时你一定在想每个域名托管在不同的 DNS 平台上,每台服务器上运行的程序也各不相同,Certimate 能搞定吗?
- 支持 30+ 域名托管商(如阿里云、腾讯云、Cloudflare 等);
- 支持 100+ 部署目标(如 Kubernetes、CDN、WAF、负载均衡等);
当然没问题!从官方文档可以看到,域名托管商支持常见的阿里云、腾讯云、Cloudflare 等,部署目标支持宝塔、1Panel 等 Linux 运维面板以及大部分 CDN 平台,甚至连 PVE 也是支持的。即便你用的平台不在支持列表里,也可以通过 SSH 的方式进行部署,例如替换群晖、飞牛、威联通的证书。
安装
推荐使用 Docker Compose 进行部署
version: "3.0"
services:
certimate:
image: certimate/certimate:latest
container_name: certimate
ports:
- 8090:8090
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data:/app/pb_data
restart: unless-stopped
国内用户可以使用阿里云上的镜像
version: "3.0"
services:
certimate:
image: registry.cn-shanghai.aliyuncs.com/certimate/certimate:latest
container_name: certimate
ports:
- 8090:8090
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data:/app/pb_data
restart: unless-stopped
配置
登录
通过 http://ip:8090
进入 Certimate 的 WebUI,默认账号和密码为 [email protected]
/ 1234567890
,首次登录后记得立即修改账号和密码

DNS 提供商
来到 授权管理 -> 新建授权
中,添加域名所在的 DNS 提供商

这里以 Cloudflare 为例,搜索 Cloudflare 可以看到有 “DNS 提供商”标识

填写 Cloudflare DNS API 令牌即可完成授权,其他 DNS 提供商可以参照各自的文档进行添加

主机提供商
主机提供商就是最终 SSL 证书要部署的平台。
许多平台像是阿里云、腾讯云,这些既是 DNS 提供商也是主机提供商,如果你用的是这些平台的产品,那就不需要重复添加了。
下面以添加 1Panel 为例,搜索 1Panel 可以看到有 “主机提供商”标识

填写 1Panel 的地址以及接口密钥就可以完成授权

如果你的 1Panel 还没有创建接口密钥,可以来到 面板设置 -> API 接口 -> 接口密钥
中开启,其中 IP 白名单填写部署了 Certimate 的服务器 IP,如果是本机则填写容器的 IP

通知渠道
除了添加提供商以外,你还可以在“通知渠道”中添加通知,后续如果证书申请失败或者部署失败时,可以接收到通知

工作流
新建
新建工作流建议可以直接选择下方的“标准模板”

创建完成后,可以看到很多节点,后面一一为大家介绍如何配置。
- “开始”节点为工作流的运行时间,可以设置为定时运行,也可以手动运行
- “申请”节点用于申请证书
- “部署”节点用于将 SSL 证书部署到指定平台,如果需要部署多个平台可以复制多个“部署”节点
- “通知”节点则会在执行失败后发送通知。

开始
默认的触发方式为手动,建议修改为自动触发,通过 Cron 表达式可以指定执行时间,默认情况下证书日期小于 30 天会重新续签证书,因此这里设置的执行时间小于 30 天即可,可以是一周一次或者半个月一次

申请
- 域名可以是泛域名,多个域名使用
;
分割,例如example.com;*.example.com
- 联系邮箱可以任意填写
- DNS 提供商选择域名对应的提供商

部署
部署是最重要的一步,有了它我们才可以把 SSL 证书分发到各个平台,默认模板中只有一个“部署”节点,如果你需要部署到多个平台,可以复制多个“部署”节点,这样就能实现批量部署了。
以 1Panel 为例:
- 部署目标:选择“1Panel – 网络”,这样添加的 SSL 证书用于 1Panel 创建的网站;而“1Panel – 控制台”是 1Panel 面板自身的 HTTPS。
- 证书部署方式:建议选择“替换指定证书”,这样所有使用该证书的网站可以一次性更新;如果选择“替换指定网站证书”,那么下方的 ID 则需要填写所有的网站 ID

由于 1Panel 的 ID 不会直接显示出来,需要一点点小技巧才能获取到,浏览器 F12 打开开发者工具,切换到 Network 页面,然后点击证书的详情,此时右侧获取到的数字即为证书 ID (如果没有 1Panel 中没有证书则需要先手动添加一个,Certimate 无法直接新建)

如果你需要获取网站的 ID,那么更简单一些,直接查看 URL 上的数字,就是对应网站的 ID

通知
通知会在执行失败后执行,选择刚才添加的“通知渠道授权”即可

运行
完成工作流的编辑后,建议先手动执行一次,看看执行结果是否成功

我一开始填错了 1Panel 的证书 ID 部署的时候失败了两次,重复执行的时候,工作流会自动判断证书是否到期,未到期时并不会重复申请证书。最后执行成功后,就代表大功告成了,后续工作流会定期自动执行,保证所有平台的 SSL 证书都能即使更新。
