SSL 证书自动化工具怎么选:acme.sh、Certd、Certimate 和托管平台

2 阅读6分钟

证书自动化工具都用 ACME 协议签发,签发这一步差别不大。下面比较 acme.sh、Certd、Certimate 和托管平台,主要看三点:

  1. 能不能自动续期。Let's Encrypt 的证书 90 天就到期,商业证书从 2026 年 3 月起最长也只有 200 天,靠人记着续期迟早会漏。本文的几种工具都能自动续期,云厂商自带的证书托管有限制,后面单独说。
  2. 续期后怎么部署,能部署到哪些位置。证书只在一两台服务器上时,续期后执行 reload 就够了,哪种工具都能做到。同一张证书还要部署到 CDN、OSS、负载均衡这些云产品上,就要看工具有没有现成的部署插件,没有的只能自己调云厂商的 API 写脚本。部署到云产品还要用 AccessKey,放在自己的服务器上还是交给第三方,有的公司会直接规定。
  3. 部署失败后怎么处理。失败了要能及时收到通知,并且知道是哪个位置失败;部署到服务器时,写文件或 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 签发证书(支持通配符),默认在到期前 30 天自动续期,然后部署到所有配置好的部署位置:

  • 云产品:阿里云 CDN、全站加速、OSS、CLB、ALB、WAF,腾讯云 CDN、CLB、EdgeOne,AWS CloudFront、ALB、NLB、API Gateway。
  • 服务器:通过 SSH 部署,或者在服务器上装开源的部署客户端,客户端主动拉取任务,服务器不用开放 SSH 端口。

添加云产品部署位置时,LapseZero 会用你的 AccessKey 列出账号下的加速域名、OSS 自定义域名、负载均衡监听,直接勾选。平时没人看的站点也在这个列表里,不用全靠人记。后来新加的加速域名不会自动加进来,同样要回来勾选。

每个部署位置的结果单独记录,失败时发到邮件、钉钉、飞书、企业微信等渠道。部署到服务器时会先备份原文件,写文件或 reload 失败就切回旧证书,通知里会写明回滚结果。

LapseZero 目前不支持阿里云 ESA,证书部署在 ESA 上的话选 Certimate 或 Certd。

选托管平台最大的顾虑是要把云厂商的 AccessKey 交出去,换成一个陌生平台,我们也会犹豫。建议用 RAM 子账号,只授予要部署的那几个产品的权限,先拿一两个不重要的站点试用。

免费版包含 3 个域名和 5 个部署目标,上面两台 Nginx 加一个加速域名和一个 OSS 自定义域名是 4 个,付费版每月 6 元起。

到期监控

部署任务显示成功,不等于每个站点线上都拿到了新证书,LapseZero 也不会在部署后去访问站点确认。开头说的漏配的位置,也不会有部署失败通知。

补上这一环的办法是把用到这张证书的域名都加进证书到期监控,包括那些平时没人看的站点。监控只访问公开的 HTTPS 地址,不需要任何凭证。LapseZero 的证书监控免费版可以加 5 个站点,也可以用 SSL 证书到期检测 先手动查一遍,看看现在有没有已经漏掉的。