证书三个月一换之后,我把续期交给了 Certimate
最开始用阿里云免费证书时,有效期还是一年。每年抽个时间换一次,虽然谈不上优雅,至少还没烦到需要专门解决。
后来免费证书变成了 90 天,而且不支持泛域名。我的子域名不少,证书又不是同一天申请的,到期时间自然也错开了。结果就是:这个刚换完,过几天另一个又该处理,日历里隔三差五躺着一项“更新证书”。单次操作并不难,架不住它一直来。
这并非已经消失的旧问题。阿里云目前的文档仍将个人测试证书免费版标为 3 个月有效期,并且不支持通配符或多域名绑定。官方也提供证书托管和自动部署,但托管属于付费服务,而且不能替你把证书部署到 Nginx 这类 Web 服务器。对于个人项目,我不想继续拿时间填这个坑,也不想为了填坑再订一项服务。
我需要的是一条完整链路
我找到 Certimate 时,需求其实已经很具体了:申请一张泛域名证书,覆盖手里的那些子域名;证书快过期时自动续期;签发完成后,把新证书同时替换到 Nginx 和阿里云 OSS。
Certimate 是一个开源、可私有部署的 SSL 证书管理工具。它把申请、部署、续期和监控串成可视化流程,支持泛域名证书和 DNS-01 验证,也能把证书送到本地或远程主机、阿里云 OSS,以及其他云服务。完整支持范围可以看官方 Provider 清单。
在我的场景里,泛域名证书先解决了数量问题:原本分散在多个子域名上的证书,收成一张就够了。Certimate 再接走后面的申请和部署。Nginx 与 OSS 原本是两套更新动作,现在都挂在同一条流程后面。证书到期不再对应一条日历提醒,而是一次自动执行。
它好用的地方正在这里。签发免费证书的工具很多,只完成“把证书申请下来”仍然会把部署工作留给人。服务一多,麻烦往往出现在最后几步:文件有没有替换、Nginx 有没有加载新证书、云产品里的证书有没有同步更新。Certimate 管的是这整段过程。
旧版本也给我留过一道题
我一直运行的是基于 v0.2.21 修改的版本。那一版在我的环境里会每天早上 8 点检查证书。使用同一套默认时间的人多了,申请请求容易撞在一个时间段里,我遇到过上游证书服务返回繁忙。
把代码拉下来后,我发现后端其实已经按每个域名保存的 crontab 创建定时任务,前端提交时却直接写死了 0 0 * * *,页面上也没有修改入口。于是我给域名编辑页补了 cron 表达式配置,又在列表里把它显示出来。改动留在这个分支,之后我就一直跑着自己的构建。
后面的故事非常朴素:能用,我就没再动。官方版本继续往前走,我的部署则停在了这条旧分支上。
这段经历不代表今天的 Certimate 仍有同样的问题,更不建议新用户从我的旧分支开始。它基于 2024 年的 v0.2.21,而本文整理时,官方发布线已经到了 v0.4.x。准备新装的人应该直接使用官方当前版本,按最新文档配置。我的分支只负责证明一件事:当时遇到一个影响实际使用的小缺口,我能读懂它的实现,并很快把缺的入口补上。
什么场景值得试
如果你只有一个站点,证书跟着 Caddy 或现有平台自动续期,没必要为了“统一管理”再加一套系统。工具多一个,备份、升级和权限保护也会多一份。
Certimate 更适合另一类情况:域名和子域名不少,证书要落到多个位置,部署目标还混着服务器与云产品。官方维护者写过一篇 Why Certimate,里面提到的 CDN、对象存储、负载均衡和多站点,正是普通 ACME 客户端开始变得不够顺手的地方。
私有部署也意味着 DNS 与云平台凭据会放在自己的 Certimate 实例里。正式接管证书之前,至少应该限制凭据权限、保护管理入口并做好数据备份;先拿非关键域名跑通签发和部署,再检查 Nginx 与 OSS 上实际生效的证书。自动化只有在失败能被发现时才算完成。
我对 Certimate 最高的评价,大概就是后来一直“能用就没动”。这不是版本建议,我已经在旧版本上停得太久;它只是说明,那件原本每隔几天就来敲门的事情,确实被它接走了。