Certd - 解决多平台SSL证书管理难题的神器

温馨提醒
总结摘要
本文详细介绍开源工具 Certd 如何一站式解决跨平台 SSL 证书自动化申请、部署与续期难题。通过实际案例,展示了如何将 Let's Encrypt 证书同时自动部署到 1Panel、阿里云 CDN 和边缘安全加速等不同平台,并深入解析了 CNAME 代理校验功能如何突破域名注册商兼容性限制。文章还涵盖了 Docker 部署、授权配置、任务流水线创建及常见问题排查,为运维人员提供了一套完整的多端证书管理方案。

前言

最近在管理我的多个网站时,遇到了一个非常头疼的问题:我有三个不同的1Panel服务器,还有一些部署在阿里云上的服务,包括CDN和边缘安全加速。虽然1Panel可以自动申请SSL证书并推送到网站,但云厂商的CDN和边缘安全加速服务需要手动上传和更新证书,每次证书快过期时都要手动更新,非常麻烦。

直到我发现了Certd这个开源工具,它完美解决了我在多平台SSL证书管理方面的所有痛点。今天就来分享一下我的使用体验。

发现Certd

我是在寻找自动化证书管理工具时发现Certd的。 官方文档地址 Certd是一个开源、免费、全自动的证书管理工具,支持自动申请证书并将其部署到各种平台。

为什么选择Certd?

在使用Certd之前,我尝试过多种解决方案:

  1. acme.sh:虽然功能强大,但只能处理单个服务器的证书
  2. 宝塔面板:可以自动申请证书,但无法部署到云厂商的CDN服务
  3. 云厂商自带工具:每个云厂商都有自己的工具,管理起来非常分散

而Certd的最大优势在于:

  • 支持100+部署插件,包括阿里云、腾讯云、群晖、宝塔、飞牛等
  • 支持多种DNS厂商, DNS提供商
  • 任务插件丰富, 任务插件
  • 支持多种授权厂商, 授权列表

解决的实际痛点

痛点一:多平台证书管理复杂

我有三个1Panel服务器,分别管理不同的网站。同时,这些网站还使用了阿里云的CDN和边缘安全加速服务。以前的做法是:

  1. 在1Panel中设置自动申请证书
  2. 等待证书生成后,手动复制证书内容
  3. 登录阿里云控制台,将证书上传到CDN和边缘安全加速

这个过程不仅繁琐,而且容易出错。特别是在证书快过期时,如果忘记手动更新云服务上的证书,就会导致网站访问异常。

痛点二:证书过期风险高

Let’s Encrypt的证书只有90天有效期,需要定期续期。以前完全依赖人工监控,经常忘记续期时间,导致网站证书过期。

痛点三:多域名证书管理困难

有些网站需要多个域名或泛域名证书,手动管理这些证书非常困难。

Certd如何解决这些痛点

使用Certd后,整个流程变得自动化:

  1. Certd自动申请证书
  2. 自动部署到1Panel服务器
  3. 自动推送证书到阿里云CDN和边缘安全加速
  4. 统一管理所有证书,到期自动续期

快速体验

官方提供一个在线测试环境, 点击这里 使用流畅:注册 -> 创建证书流水线 -> 添加部署任务 -> 测试运行 参考文档: 快速开始

官方提示:demo的数据将不定期清理,生产使用请自行部署

包含敏感信息,务必自己本地部署进行生产使用

搭建过程

Docker部署

我选择了Docker部署方式,这是最简单的方式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 随便创建一个目录
mkdir certd
# 进入目录
cd certd
# 下载docker-compose.yaml文件,或者手动下载放到certd目录下
wget https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml

# 可以根据需要修改里面的配置
# 1.修改镜像版本号【可选】
# 2.配置数据保存路径【可选】
# 3.修改端口号【可选】
vi docker-compose.yaml # 【可选】

# 启动certd
docker compose up -d

初始配置

首次访问 http://服务器IP:7001,系统会引导进行初始配置:

  1. 设置管理员账户
  2. 选择数据库类型(我选择了SQLite,简单易用)
  3. 完成初始化

配置DNS提供商

因为我使用阿里云的域名,所以我配置了阿里云DNS:

  1. 在阿里云控制台获取AccessKey ID和AccessKey Secret
  2. 在Certd中添加阿里云DNS访问配置
  3. 输入API密钥信息 API密钥添加

CNAME代理校验功能 - 解决域名服务商兼容性问题

在我使用Certd的过程中,发现了一个非常强大的功能——CNAME代理校验方式。这个功能解决了我一个未曾预料到的问题:域名服务商兼容性。

遇到的兼容性问题

在使用Certd之前,我一直使用某个国外的域名注册商管理我的域名。当我想使用Certd自动申请SSL证书时,发现Certd并不支持我的域名注册商。这意味着我无法使用DNS自动验证功能,只能通过其他方式(如HTTP验证)来申请证书,这在某些场景下会很不方便。

什么是CNAME代理校验?

CNAME代理校验是Certd提供的一种特殊验证方式,它能够让你在域名注册商不被Certd直接支持的情况下,也能实现证书的自动申请和续期。

简单来说,这个功能的工作原理是这样的:

  1. 我有一个域名mydomain.com,但它是在Certd不支持的域名注册商那里注册的
  2. 我还有一个域名proxydomain.com,它是在Certd支持的注册商(如阿里云、腾讯云等)那里注册的
  3. 通过CNAME代理校验,Certd会在proxydomain.com上自动创建TXT记录来完成验证
  4. 我只需要在mydomain.com上手动添加一条CNAME记录指向Certd提供的代理域名
  5. 这样,证书颁发机构就能通过这条链路验证我对mydomain.com的所有权

如何使用CNAME代理校验?

使用这个功能的步骤也很简单:

  1. 在Certd中创建证书流水线,输入需要申请证书的域名(比如mydomain.com
  2. 选择CNAME校验方式,而不是DNS验证方式
  3. Certd会生成一个CNAME记录模板,例如:_acme-challenge.mydomain.com -> xxxxxx.cname.proxy.com
  4. 我需要手动在我的域名mydomain.com的DNS设置中添加这条CNAME记录
  5. 验证CNAME记录生效后,Certd就能自动完成证书申请了

这个过程只需要为每个域名做一次,后续Certd会自动处理所有续期和更新操作。

实际使用体验

这个功能对我非常有用,因为我有几个域名是在国外注册商那里注册的,原来使用acme.sh等工具时需要手动处理验证,非常麻烦。现在通过CNAME代理校验,我可以把所有域名都纳入到Certd的统一管理中,不再受限于域名注册商的兼容性问题。

创建证书任务

创建证书流水线

在Certd中,证书申请和部署是通过"流水线"来管理的:

  1. 点击"创建证书流水线"

  2. 填写基本信息:

    • 流水线名称:例如"mywebsite-cdn"
    • 域名:输入需要申请证书的域名
    • 验证方式:选择DNS验证
    • DNS提供商:选择阿里云DNS
  3. 在"证书颁发机构"中选择Let’s Encrypt(支持通配符证书)

添加部署任务

这是Certd最强大的功能之一,可以将证书部署到多个平台:

  1. 在流水线中添加"部署"任务
  2. 选择部署插件,例如:
    • 1Panel部署插件:将证书部署到1Panel服务器
    • 阿里云CDN部署插件:将证书部署到阿里云CDN
    • 阿里云边缘安全加速部署插件:将证书部署到边缘安全加速

对于每个部署插件,我需要配置相应的参数:

  • 1Panel部署:输入1Panel的登录地址、安全入口、API密钥
  • 阿里云CDN部署:选择对应的CDN域名
  • 阿里云边缘安全加速部署:选择对应的加速域名

设置自动续期

Certd默认会在证书到期前35天自动续期,这个设置无需调整。 251226214517460.png

实际使用体验

第一次运行

配置完成后,我手动运行了一次流水线,整个过程非常流畅:

  1. Certd自动完成了域名验证
  2. 成功申请到SSL证书
  3. 自动将证书部署到1Panel服务器
  4. 自动将证书上传到阿里云CDN和边缘安全加速 251226214417473.png

251226214623853.png

整个过程只用了不到5分钟,比我手动操作快了几十倍。

监控和通知

Certd还支持邮件和Webhook通知,我配置了邮件通知,每次证书更新成功或失败都会收到邮件提醒,非常贴心。

证书管理

在Certd的管理界面,我可以一目了然地看到所有证书的状态、到期时间等信息,再也不用担心证书过期的问题了。 251226214658766.png

付费功能

工具开源功能已经足够强大了,开源精神也需要经济能力支持。 付费与免费版本可以看下图进行对比 251226215653746.png

控制台详细插件功能截图如下(带黄色小钻石的插件是付费功能): 251226215830187.png 251226215858886.png

商用证书支持

商用支持虽然不用短时间就更改或续期一次,但是也需要关注证书到期时间,而且有一个平台可以批量管理部署自己的证书到其他服务器上未尝不是一个好的选择。 251226220205733.png Certd就做到这一点,可以用于监控商用证书到期时间并发送提醒通知,避免大半夜证书到期导致站点无法访问。 当然也可以把商用证书通过流水线一键部署到其他服务器和云服务上,这样也不需要手动操作。

遇到的问题和解决方案

问题1:API权限不足

在配置阿里云CDN部署时,我最初使用的AccessKey权限不足,导致部署失败。解决方案是到阿里云RAM控制台为该AccessKey所属RAM用户分配CDN、SSL证书、云解析、边缘安全加速的权限。

CDN:AliyunCDNFullAccess

DNS:AliyunDNSFullAccess

SSL:AliyunYundunCertFullAccess

ESA:AliyunESAFullAccess

如果还有其他插件需求,比如OSS、ACK、K8S等,请自行添加

提示: AccessKeyID保密性很高,请勿将AccessKeyID和AccessKeySecret泄露给其他人,我这里是设置了白名单,只有白名单IP可以调用API,其他IP访问API都会被拒绝。如果IP不固定,不要去设置。不嫌麻烦的尽可能缩紧权限,避免权限给的过大导致风险。

问题2:DNS验证失败

刚开始时,DNS验证总是失败。后来发现是DNS记录生效时间较长,Certd已经等待了120秒,但有些DNS解析还是没有生效。检查API调用日志确认DNS记录是否生效,如果生效了,则调整Certd的DNS服务器校验地址,或者等待DNS记录生效。

问题3:多域名证书申请

对于多域名证书,需要注意域名验证的顺序和时间,Certd支持一次申请多个域名的证书,但需要确保所有域名都能通过DNS验证。

总结

经过一段时间的使用,Certd确实解决了我在SSL证书管理方面的所有痛点:

  1. 自动化程度高:从申请到部署完全自动化,无需人工干预
  2. 支持平台多:支持100+部署插件,覆盖了我需要的所有平台
  3. 管理统一:所有证书在一个平台管理,状态一目了然
  4. 安全可靠:私有化部署,数据本地存储,安全有保障
  5. 易于使用:界面友好,配置简单,文档详细
  6. 社区活跃:开源社区非常活跃,功能开发及时
  7. 兼容性强:通过CNAME代理校验功能,即使域名注册商不被直接支持也能正常申请证书

如果你也在管理多个平台的SSL证书,特别是涉及到云厂商的CDN或加速服务,我强烈推荐你试试Certd。它不仅解决了证书管理的痛点,还大大提升了运维效率。自从使用了Certd,我再也不用担心证书过期的问题了,真正实现了"让你的网站证书永不过期"的目标。