综合 SSL 证书续期不用再手动:Certimate 自托管 ACME 工作流部署

2026-09-13 21:31:05

SSL 证书续期不用再手动:Certimate 自托管 ACME 工作流部署

证书到期这件事,麻烦不在申请本身,在于之后的每一次重复:

  • 到期前得有人记得,忘了就是线上 502;
  • DNS-01 质询要手动去 DNS 面板加 TXT 记录,签完再删;
  • 证书签出来还得分发到 Kubernetes Ingress、CDN、WAF、负载均衡,漏一处就有节点拿着旧证书跑。

Certimate 把申请、部署、续期、监控串成一条可视化工作流,跑在自己的机器上,不依赖第三方托管。

项目信息

  • 仓库:
  • 文档:
  • Docker Hub:certimate/certimate
  • Go 编写,MIT 许可,GitHub 上约 9.3k star

能力范围

  • 自托管,数据存本地,不往第三方传;
  • 跨平台,Windows / Linux / macOS 都能跑;
  • 零依赖,不用装数据库、运行时或框架;
  • 内存占用约 20MB;
  • 证书类型覆盖单域名、多域名、泛域名,也支持 IP 地址证书;密钥可选 RSA 或 ECC;
  • 同时支持 DNS-01 和 HTTP-01 质询;
  • 输出格式支持 PEM、PFX、JKS 等;
  • 70+ 域名注册商 / DNS 服务商(AWS、Cloudflare、GoDaddy、阿里云、腾讯云等);
  • 160+ 部署目标(Kubernetes、CDN、WAF、负载均衡等);
  • 通知渠道有邮件、Discord、Slack、Telegram、钉钉、飞书、企业微信等;
  • ACME CA 可选 Let's Encrypt、Actalis、Google Trust Services、SSL.com、ZeroSSL 等。

跑起来

二进制方式:从 GitHub Releases 下载对应平台的预编译包,解压后执行:

./certimate serve

Docker 方式:

docker run -d \
--name certimate \
--restart unless-stopped \
-p 8090:8090 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v $(pwd)/data:/app/pb_data \
certimate/certimate:latest

然后浏览器访问 http://127.0.0.1:8090

两个挂载需要留意:/etc/localtime/etc/timezone 只读挂进容器,是为了让容器时区和宿主机一致,续期任务的时间调度才不会错位;$(pwd)/data 对应容器内 /app/pb_data,配置、账号、证书数据都落在这里,备份就是拷这个目录。

默认账号必须先改

首次登录的默认管理员账号是:

用户名:admin@certimate.fun
密码:1234567890

这是公开写在文档里的弱口令。实例一上线就要改掉,如果端口暴露在公网而没改,等于把 DNS API 凭据和证书私钥直接交出去。同理,这个服务通常只在内网或反代后面访问,不要直接 0.0.0.0:8090 对着公网开。

适合和不适合

适合的场景:手上有一批域名,证书分散在多个入口,续期靠人记;或者不希望把 DNS 凭据交给第三方 SaaS,需要私钥和配置全部留在自己机器上。

不太适合的场景:完全不想维护任何服务,只想签个证书挂到单台 Nginx 上,ACME 客户端加个 cron 更省事;DNS 服务商和部署目标如果不在支持列表里,DNS-01 这条链路要先用文档确认能不能走通,否则自动化会卡在质询那一步。

文档

完整配置、工作流编排和升级说明都在 。几篇值得先看的:《Migrate to v0.4》(升级前过一遍)、《使用 CNAME 完成 ACME DNS-01 质询》、《Why Certimate?》。

复制全文 生成海报 SSL证书 ACME 自托管 运维 Docker

推荐文章

程序员茄子在线接单