证书自动化工具都用 ACME 协议签发,签发这一步差别不大。下面比较 acme.sh、Certd、Certimate 和托管平台,主要看三点:
- 能不能自动续期。Let's Encrypt 的证书 90 天就到期,商业证书从 2026 年 3 月起最长也只有 200 天,靠人记着续期迟早会漏。本文的几种工具都能自动续期,云厂商自带的证书托管有限制,后面单独说。
- 续期后怎么部署,能部署到哪些位置。证书只在一两台服务器上时,续期后执行 reload 就够了,哪种工具都能做到。同一张证书还要部署到 CDN、OSS、负载均衡这些云产品上,就要看工具有没有现成的部署插件,没有的只能自己调云厂商的 API 写脚本。部署到云产品还要用 AccessKey,放在自己的服务器上还是交给第三方,有的公司会直接规定。
- 部署失败后怎么处理。失败了要能及时收到通知,并且知道是哪个位置失败;部署到服务器时,写文件或 reload 失败最好能切回旧证书。更难发现的是一开始就没配进去的位置:哪种工具都只更新配置过的位置,漏配的那个不会有任何失败通知。
部署这一步我们自己出过问题。我们有一张 *.example.com 的通配符证书,部署在两台 Nginx、阿里云全站加速(DCDN)的几个加速域名和 OSS 的自定义域名上,以前都是在各个产品的控制台里手动上传。漏掉的通常不是重要站点:我们的站点分了级别,重要的有监控,证书出错会告警;级别低的有些压根没配监控,只能等用户或者内部同事反馈,往往是证书已经过期了才知道。
acme.sh 加脚本
acme.sh 适合证书只部署在一两台服务器上的情况。签发、续期、续期后执行 reload 都很成熟,通知也能配到钉钉、飞书、企业微信。
部署到云产品是另一回事。acme.sh 官方仓库里的 deploy hook,阿里云只有 ali_cdn 和 ali_dcdn 两个,没有 OSS、负载均衡,也没有腾讯云的。这些位置要自己调云厂商的 API 写脚本。
即使是全站加速,通配符证书也要在环境变量里把加速域名一个个写出来:
export DEPLOY_ALI_DCDN_DOMAIN="www.example.com static.example.com"
acme.sh --deploy -d example.com --deploy-hook ali_dcdn
这个变量会保存下来,续期后自动部署。问题在于后来新加了一个加速域名,没人记得回来改这个变量,这和手动上传时漏掉没人看的站点是同一个问题,只是从控制台挪到了配置文件里。
我们一直没用脚本,顾虑在另一层:脚本放在服务器上,万一哪次更新错了,我们自己却不知道,比手动换还麻烦。
Certd 和 Certimate
这两个都是自托管的证书管理面板,用 Docker 部署在自己的服务器上,在网页里配置签发和部署流程。它们覆盖的云产品比 acme.sh 多得多:阿里云的 CDN、全站加速、ESA、OSS、CLB、ALB、WAF 都有现成的部署插件,腾讯云、宝塔、1Panel、SSH 也都支持。
两者的主要区别在授权。Certimate 是 MIT 协议,全部功能免费。Certd 是 AGPL 协议,免费版的通知只有邮件和自定义 Webhook,钉钉、飞书、企业微信通知要专业版,站点监控免费版限 1 条。
自托管的代价是面板本身也成了一个要维护的服务。所有云厂商的 AccessKey 都存在这台机器上,机器要做好安全加固;面板挂了,续期和失败通知会一起停掉,所以最好再从外部监控一下这台面板。
公司不允许把云厂商凭证交给第三方时,选自托管面板,推荐 Certimate。
托管平台
托管平台把签发、续期、部署和通知都放在服务商那边跑,你不用维护服务器或面板。云厂商自己也有类似能力,比如阿里云的证书托管,但免费的个人测试证书和上传的证书都不支持托管,要用就得买正式证书。
证书要部署到多台服务器和多个云产品,又不想自己维护面板,可以考虑独立托管平台。例如 LapseZero,它使用 Let's Encrypt 签发证书,支持阿里云 CDN、全站加速、OSS、CLB、ALB、WAF,以及腾讯云 CDN、CLB、EdgeOne;服务器可以通过 SSH 或部署客户端接收证书。目前不支持阿里云 ESA,部署在 ESA 上的证书可以选 Certimate 或 Certd。
无论选哪家托管平台,都要逐个核对部署位置和失败通知。通过云账号列出资源、手动勾选,能减少靠记忆填写域名造成的遗漏,但后续新增资源仍然需要补充配置。云 API 返回成功、服务器写文件和 reload 成功,也不能代替对线上证书的检查。
托管平台还涉及凭证交付:云产品部署通常需要相应的 API 权限。使用独立子账号,只授权需要部署的产品;如果公司的规定不允许把凭证交给第三方,就应选本地脚本或自托管面板。
到期监控
部署任务显示成功,不等于每个站点线上都拿到了新证书,LapseZero 也不会在部署后去访问站点确认。开头说的漏配的位置,也不会有部署失败通知。
补上这一环的办法是把用到这张证书的域名都加进证书到期监控,包括那些平时没人看的站点。监控只访问公开的 HTTPS 地址,不需要部署凭证。监控清单要来自实际对外提供服务的域名清单,不能仅仅复制自动化工具里的部署目标,否则两边可能一起漏掉同一个站点。