CertD 是一个帮助你全自动申请和部署 SSL 证书的工具,后缀 D 取自 Linux 守护进程的命名风格,意为"证书守护进程"。它不仅能自动化证书申请,还能把申请好的证书自动部署到服务器、阿里云、腾讯云等平台,让你的证书永不过期。
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | https://github.com/certd/certd |
| 在线配置界面 | https://certd.docmirror.cn/ |
| 开源协议 | AGPL-3.0 |
| 主要语言 | TypeScript / JavaScript(约 66.9%) |
| Star 数 | 约 5.1k |
| 证书提供商 | Let's Encrypt |
CertD 的核心能力包括:全自动申请证书、全自动部署证书(支持服务器上传部署、阿里云、腾讯云等)、可与 CI/CD 工具结合使用。申请过程遵循 ACME 协议,目前域名验证仅支持 dns-01 方式(通过给域名添加 TXT 解析记录验证所有权,泛域名证书只能用这种方式)。免费证书有效期 90 天,到期前 20 天会自动重新申请并重新部署。
二、官方图片
第一步:填写域名(支持把多个域名打到同一张证书上)

第二步:配置证书详细信息

第三步:配置证书部署流程

三、环境要求
- 操作系统:任意可运行 Node.js 的系统(Linux / macOS / Windows)。
- 运行环境:Node.js(从 https://nodejs.org/zh-cn/ 安装)。
- 权限:能通过 DNS 服务商 API 添加 TXT 记录(阿里云、腾讯云 DNSPod 等)。
- 部署目标:阿里云 CDN/CLB、腾讯云 DNS/CLB/TKE-ingress,或自有服务器 SSH 上传权限。
- 不需要开放 80/443 端口(dns-01 验证不依赖网站)。
四、完整部署步骤
1. 环境准备:安装 Node.js
从官网 https://nodejs.org/zh-cn/ 安装 LTS 版本,安装后确认:
node -v
npm -v
2. 通过在线 UI 生成 Node 项目
打开在线配置界面:https://certd.docmirror.cn/
第一步:填写域名。 先填域名,支持把多个域名打到一张证书上(如 example.com 和 www.example.com)。
第二步:配置证书详细信息。 填写邮箱、证书有效期、密钥类型等信息。
第三步:配置证书部署流程。 选择部署目标,例如"部署到阿里云 CDN",并填入对应的云账号 API 密钥。
配置完成后,点击"导出"按钮,导出一个 Node 项目压缩包。
3. 安装依赖并运行
解压导出的压缩包,在项目目录执行:
npm install
npm run certd
程序会自动通过 DNS 验证域名所有权、向 Let's Encrypt 申请证书,然后执行你配置好的部署流程(如上传到阿里云、部署到 CDN)。
4. 查看执行效果
生成的证书默认存放在:
~/.certd/${email}/certs/${domain}/current
运行日志示例:
[2021-01-08T16:15:04.681] [INFO] certd - 任务完成
[2021-01-08T16:15:04.682] [INFO] certd - 【更新证书】--------------------------------------- [success]
证书申请成功
[2021-01-08T16:15:04.682] [INFO] certd - 【流程1-部署到阿里云CDN】---------------------------- [success] 执行成功
[2021-01-08T16:15:04.682] [INFO] certd - └【上传到阿里云】-------------------------------- [success] 执行成功
[2021-01-08T16:15:04.682] [INFO] certd - └【部署证书到CDN】------------------------------- [success] 执行成功
5. 自动续期
ACME 本身没有"续期"概念,所谓续期就是按全套流程重新申请一张新证书再重新部署。每天定时运行即可:当距离证书过期日还有 20 天时,程序会自动重新申请证书并执行部署任务。
证书的部署任务执行后会记录结果,已经成功过的不会重复执行。如果临时需要把证书部署到其他地方,直接追加部署任务后再次运行即可。
五、使用方法
与 Jenkins(CI/CD)集成
把导出的 Node 项目提交到内网或私有 Git 仓库(由于包含敏感信息,不要提交到公开仓库),然后新建 Jenkins 任务:
- 选择构建"自由风格"任务;
- 配置 cert-run 项目的 Git 地址;
- 构建触发器配置为
H 3 * * *,每天凌晨 3 点到 4 点之间执行一次; - 构建环境勾选"Provide Node & npm bin/ folder to PATH",提供 Node.js 运行环境(没有该选项需安装 Node.js 插件);
- 构建执行 shell:
npm install --production # 执行过一次之后可注释掉,加快执行速度
npm run post
- 构建后操作配置邮件通知,执行失败时收到邮件。
支持的部署插件类型
| 云平台 | 插件 type | 用途 |
|---|---|---|
| 阿里云 | uploadCertToAliyun |
上传证书到阿里云证书服务 |
| 阿里云 | deployCertToAliyunCDN |
部署到阿里云 CDN |
| 阿里云 | deployCertToAliyunCLB |
部署到阿里云 CLB 负载均衡 |
| 腾讯云 | uploadCertToTencent |
上传证书到腾讯云 |
| 腾讯云 | deployCertToTencentDNS |
部署到腾讯云 DNSPod |
| 腾讯云 | deployCertToTencentCLB |
部署到腾讯云 CLB |
| 腾讯云 | deployCertToTencentTKEIngress |
部署到腾讯云 TKE Ingress |
DNS 验证接口目前支持阿里云、腾讯云 DNSPod 等授权提供者。
六、常见问题 FAQ
1. 为什么泛域名证书申请不了?
CertD 目前域名验证仅支持 dns-01 方式,泛域名(如 *.example.com)只能通过 dns-01 验证。按 UI 里的提示配置 DNS 服务商的 API 密钥即可。
2. 证书到期了会自动续吗? 会。每天定时运行程序,当距离过期日还有 20 天时,会自动重新申请证书并重新执行部署流程。建议配合 cron 或 Jenkins 每日任务运行。
3. 可以把项目上传到 GitHub 公开仓库吗? 不可以。导出的 Node 项目里包含云账号 API 密钥等敏感信息,只能提交到内网或私有 Git 仓库。
4. 证书文件保存在哪里?
默认在 ~/.certd/${email}/certs/${domain}/current 目录下,其中 ${email} 是你配置的 ACME 账户邮箱,${domain} 是证书域名。
5. 临时想把证书部署到新平台怎么办? 直接在 UI 导出时追加一个部署任务(或在项目配置里追加 deploy 插件),再次运行即可。已成功过的部署任务不会重复执行,不会影响已有平台。
6. 部署到 CDN 后多久生效? 证书上传到云平台证书服务后,部署插件会调用对应云产品 API 把证书绑定到 CDN/CLB 实例上,通常几分钟内生效,具体以云厂商缓存刷新时间为准。