1. 首页
  2. Linux

使用certimate自动申请和续签域名证书,并部署到本地Nginx及腾讯云CDN

在个人站点、博客或者内部系统中,HTTPS 几乎已经是标配。但手动申请证书、上传到服务器、再同步到 CDN,不仅繁琐,还容易因为忘记续签导致证书过期,影响访问甚至被浏览器拦截。

本文将介绍如何使用 Certimate​ 来:

  • 自动申请 Let’s Encrypt 免费证书

  • 定期续签证书,并重新部署

  • 将证书自动部署到 本地服务器,供nginx使用

  • 将证书自动部署到 腾讯云 CDN

整套流程配置一次,后续基本零维护。

整体思路

流程大致如下:

  1. Certimate 通过 DNS 验证域名所有权

  2. 向 Let’s Encrypt 申请证书

  3. 证书保存到本地

  4. 自动执行部署动作:

    • 复制到本地证书目录(供 Nginx 使用)

    • 调用腾讯云 API,将证书上传并绑定到 CDN 域名

环境准备

安装 Certimate

官网:https://docs.certimate.me/

以 Linux 为例,本文采用二进制文件安装方式:

请前往 GitHub Releases 页面下载预先编译好的二进制可执行文件压缩包。

压缩包文件名后缀包含系统架构信息,请结合你的设备需要自行选择相应的压缩包,下载并解压缩全部文件。

# 切入到 /usr/local/ 目录下
cd /usr/local/

# 创建文件夹
mkdir certimate

# 以后 certimate 便放到该目录下
cd certimate

# 下载最新版本(请替换为最新版)
wget https://github.com/certimate-go/certimate/releases/download/v0.4.30/certimate_v0.4.30_linux_amd64.zip

# 解压文件
unzip certimate_v0.4.30_linux_amd64.zip
# 删除文件
rm certimate_v0.4.30_linux_amd64.zip

# 授予执行权限
chmod +x certimate

# 出于安全考虑,Certimate 默认监听 127.0.0.1:8090,这意味着你只能通过本地地址访问 Certimate。
# 你可以在启动时修改这个配置:启动服务(默认监听 8090 端口)
# 监听任意 IPv4 地址,端口 15100
./certimate serve --http "0.0.0.0:15100"

安全提醒:因为需要传输授权、证书等敏感数据,请尽量避免在非可信网络环境下以 HTTP 方式暴露 Certimate。建议通过反向代理(如 Nginx)配置 HTTPS 或仅在内网访问。

浏览器访问 http://你的服务器IP:15100,使用默认账号登录(需要放开防火墙端口和云厂商网络端口限制,如果设置了反向代理,则可以直接通过反向代理访问):

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

首次登录后请立即修改默认账号及密码! 点击左侧菜单:系统设置,修改账号和密码,避免安全风险。

开机自启动

Certimate 需要在后台运行,才能周期性地执行工作流程以自动续期证书。你可以利用 systemd 来管理开机自启动项。

在 /etc/systemd/system/ 目录下创建服务文件:

sudo vim /etc/systemd/system/certimate.service

编写服务配置:

[Unit]
Description=Certimate
After=network.target

[Service]
# 请将以下路径替换为你的实际安装路径
WorkingDirectory=/usr/local/certimate/
ExecStart=/usr/local/certimate/certimate serve --http "0.0.0.0:15100"
Restart=on-failure
User=root
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启用并启动服务

# 启用服务
sudo systemctl enable certimate.service

# 启动服务
sudo systemctl start certimate.service

# 停止服务
sudo systemctl stop certimate.service

# 查看状态
sudo systemctl status certimate.service

# 如果修改了配置文件,如修改了端口,则需要重新加载
sudo systemctl daemon-reload

准备域名、SSL、CDN访问密钥

进入 腾讯云控制台 → 访问管理 → 用户 → 用户列表,新建一个子账号,专门用于 Certimate 的 API 调用。

为该子账号授予以下权限策略:

策略名称

用途

QcloudDNSPodFullAccess

管理域名解析记录(DNS-01 验证需要)

QcloudSSLFullAccess

上传和管理 SSL 证书

QcloudCDNFullAccess

将证书绑定到 CDN 加速域名

image.png

创建完成后,复制该账号的 SecretId 和 SecretKey,妥善保存。

准备通知渠道(可选但推荐)

当证书申请失败或部署出错时,及时的通知能帮你快速发现问题。Certimate 支持多种通知渠道,以邮箱通知为例,我们这里使用163邮箱,步骤如下:

1.浏览器登录 https://mail.163.com (用账号+登录密码)

2.右上角「设置」→「POP3/SMTP/IMAP」

3.找到 IMAP/SMTP服务​ 或 POP3/SMTP服务,点「开启」

4.弹窗走短信验证(绑手机收验证码/按提示发短信)

5.验证通过后页面给出一串 16位授权码,只显示一次,立刻复制存好

配置 Certimate

第一步:添加 提供商 授权

  1. 登录 Certimate → 左侧菜单点击 授权管理

  2. 选择提供商页签,点击 新建授权

  3. 选择提供商类型为 腾讯云(Tencent Cloud)

  4. 填写信息:

    • 名称:自定义,如 腾讯云

    • SecretId:刚才创建的子账号 SecretId

    • SecretKey:对应的 SecretKey,如果刚刚没保存,可以重新生成

  5. 点击 保存,保存成功后,授权凭据提供商页面就会有一条新的纪录

image.png
image.png

第二步:添加通知渠道

  1. 进入 授权管理 → 选择通知渠道页签 → 新建授权

  2. 以 邮件通知 为例:

    • 选择 邮件(SMTP)

    • 填写 SMTP 服务器地址、端口、发件人邮箱、授权码

    • 测试发送,确认能收到测试邮件

  3. 点击保存

  4. 重新回到通知渠道列表,点击该条记录,弹出编辑页面,点击编辑弹窗左下角可进行测试是否正常

image.png

新建流程

选择标准业务模板,按需求设置自己的流程,以下为一个本地部署+更新腾讯云CDN证书+若失败则邮件通知的流程示例

image.png

以下为几个重要节点的配置说明

申请节点配置

DNS提供商授权为之前填写的授权凭据-提供商-腾讯云配置,其它默认即可

image.png

本地主机节点配置

私钥文件输出路径、证书文件输出路径、后置命令请按照实际填写

image.png

部署到腾讯云CDN节点配置

主机提供商授权和申请节点的DNS提供商授权一致

image.png

邮件通知节点配置

通知渠道授权为之前填写的通知渠道

image.png

发布验证

所有节点配置完成后:

  1. 点击右上角 发布更改

  2. 确认发布

手动执行测试

第一次建议手动执行一次,验证整条链路是否通畅:

  1. 点击右上角 执行

  2. 进入 运行历史 查看实时日志,正常情况下,你会看到类似日志:

已成功
#XLi7ZfZYsdeohBI4g6qmg 开始
[2026-08-12 11:19:14]
the workflow is starting
#Qd-u0_5B5tBi-LSVNGLb4 申请
[2026-08-12 11:19:14]
ready to request certificate ...
[2026-08-12 11:19:14]
no found last requested certificate, begin to apply
[2026-08-12 11:19:14]
acme config initialized
[2026-08-12 11:19:14]
acme account initialized
[2026-08-12 11:19:15]
go-acme/lego: Obtaining bundled SAN certificate.
[2026-08-12 11:19:17]
go-acme/lego: Authorization is already valid; skipping the challenge.
[2026-08-12 11:19:17]
go-acme/lego: Use solver.
[2026-08-12 11:19:17]
go-acme/lego: dns01: preparing to solve the challenge.
[2026-08-12 11:19:18]
go-acme/lego: dns01: trying to solve the challenge.
[2026-08-12 11:19:18]
go-acme/lego: dns01: waiting for record propagation
[2026-08-12 11:19:20]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:22]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:24]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:26]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:28]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:30]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:32]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:34]
go-acme/lego: dns01: waiting for record propagation.
[2026-08-12 11:19:41]
go-acme/lego: The server validated our request.
[2026-08-12 11:19:41]
go-acme/lego: dns01: cleaning DNS-01 challenge.
[2026-08-12 11:19:43]
go-acme/lego: Validations succeeded; requesting certificates.
[2026-08-12 11:19:46]
go-acme/lego: Server responded with a certificate.
[2026-08-12 11:19:46]
certificate saved
[2026-08-12 11:19:46]
application completed
#UfpIRMvuUwFVl1cKC14EE 部署
[2026-08-12 11:19:46]
ready to deploy certificate ...
[2026-08-12 11:19:46]
ssl private key file saved
[2026-08-12 11:19:46]
ssl certificate file saved
[2026-08-12 11:19:46]
run post-command
[2026-08-12 11:19:46]
deployment completed
#k2ekrPGvlAt-jo0JTgeTM 部署
[2026-08-12 11:19:46]
ready to deploy certificate ...
[2026-08-12 11:19:46]
sdk request 'ssl.UploadCertificate'
[2026-08-12 11:19:46]
ssl certificate uploaded
[2026-08-12 11:19:46]
found cdn domains to deploy
[2026-08-12 11:19:47]
sdk request 'cdn.DescribeDomainsConfig'
[2026-08-12 11:19:50]
sdk request 'cdn.UpdateDomainConfig'
[2026-08-12 11:19:50]
deployment completed
#nR5q5dd9c6KlJC1ZFYjjr 结束
[2026-08-12 11:19:50]
the workflow is ending

验证证书生效

本地 Nginx:

# 查看证书文件是否已成功生成
ls -la /usr/local/nginx/cert/beilika.com

也可以直接通过谷歌浏览器访问网站,按F5刷新后,查看证书是否有效

腾讯云 CDN:

登录腾讯云控制台 → 内容分发网络CDN → 域名管理

找到对应域名,点击 管理 → HTTPS 配置,确认证书已绑定且状态正常

定时执行

Certimate 的工作流定时执行机制如下:

机制

说明

Cron 触发

按你设置的 Cron 表达式定期触发工作流

智能续签

每次执行时检查证书有效期,仅当剩余有效期 < 30 天 时才重新申请

去重机制

如果证书未到期,重复执行不会触发重新申请和部署

失败重试

部署失败时通过通知渠道告警,下次定时执行会自动重试

也就是说,你只需要设置好 Cron 表达式(如每周一次),Certimate 会自动判断是否需要续签,无需人工干预。

如果有多个工作流,建议针对不同的工作流分别设置不同的星期或时间,避免同一时间进行更新导致触发证书颁发机构频率限制


TOP