返回博客
腾讯云EdgeOne自动续期

腾讯云 CDN / EdgeOne 证书如何自动更新

腾讯云免费证书从 2024 年 4 月起只有 90 天,挂在 CDN 和 EdgeOne 上的证书每年要换四五次。本文对比 EdgeOne 自带免费证书、证书托管、自写脚本和自动化工具,说明各自适合什么情况。

2026-10-057 分钟
腾讯云 90 天免费证书自动续期并部署到 CDN、EdgeOne 和负载均衡的流程插画

腾讯云免费证书现在的规则

腾讯云 SSL 证书服务里的免费证书,从 2024 年 4 月 25 日起有效期由 12 个月改为 3 个月,每个账号的额度统一为 50 张。证书是 TrustAsia 签发的单域名 DV 证书,不支持通配符。

额度比阿里云宽松(阿里云每年 20 张),麻烦的是次数。一张证书 90 天,提前两三周更换,每个域名一年要换四五次。挂在 CDN 上的域名,每次都要申请新证书、等验证、再到 CDN 控制台把证书换上去。

CDN 和 EdgeOne 的情况不一样,下面分开说。

只用 EdgeOne:先用它自带的免费证书

域名已经接入 EdgeOne 的话,最省事的办法是在域名的 HTTPS 配置里直接选「申请免费证书」。按官方文档,这张证书由 TrustAsia 或 Let's Encrypt 签发,有效期 90 天,到期前 15 天平台自动续期,签发后自动部署,全程不用管。

它的限制有这几条:

  • 证书不能下载,只能在 EdgeOne 上用。源站、负载均衡要用同一个域名的证书,得另外申请。
  • 通配符证书只能用 DNS 委派验证。站点从 NS 接入切到 CNAME 接入后,原来的通配符证书到期无法自动续期。
  • CNAME 接入用自动验证时,域名要在一小时内把 CNAME 指到 EdgeOne,而且不能用分线路解析。
  • 不提供 SLA。Let's Encrypt 签发的那张不支持 OCSP 装订。

如果你的域名只在 EdgeOne 上用证书,这些限制都碰不到,用它就够了,本文后面的方案可以不看。

腾讯云 CDN:证书托管只管替换

CDN 没有 EdgeOne 这样的一键免费证书,常规做法是先在 SSL 证书服务申请证书,再部署到 CDN 域名上。

腾讯云的证书托管能减少一半工作:开启后,新证书签发出来,会在你设定的时间自动部署到旧证书关联的云资源上,比如 CDN、负载均衡,免费证书也能托管。官方说的全自动是「自动续费 + 证书托管」,自动续费针对的是付费证书;文档里没有写免费证书到期会自动申请下一张。所以用免费证书时,每 90 天申请新证书、完成验证这一步还是要自己做,托管只负责最后的替换。

托管还有一个要求:新旧证书绑定的域名必须一致,指定错了会直接影响线上。

自己写脚本

不想依赖控制台,可以自己签发再调腾讯云 API 部署。签发这一段现成的工具很多,acme.sh 的 dns_tencent 插件可以用 DNSPod 的 API 完成 DNS 验证,签出 Let's Encrypt 的通配符证书。

部署这一段要自己写。acme.sh 的 deploy 目录里有阿里云 CDN(ali_cdn.sh)、七牛、百度云 CDN 的钩子,没有腾讯云的。自己调 API 的话,流程是先把证书上传到 SSL 证书服务拿到证书 ID,再绑定到 CDN 或 EdgeOne:

text
# 1. 上传证书,Repeatable=false 时同一张证书不会重复上传,返回已有的 ID
ssl.UploadCertificate
  CertificatePublicKey  = fullchain.pem 的内容
  CertificatePrivateKey = privkey.pem 的内容
  Repeatable            = false

# 2a. 腾讯云 CDN:只更新证书 ID 这一个配置路径
cdn.ModifyDomainConfig
  Domain = cdn.example.com
  Route  = Https.CertInfo.CertId
  Value  = {"update":"<上一步返回的证书 ID>"}

# 2b. EdgeOne:给加速域名换证书
teo.ModifyHostsCertificate
  ZoneId         = <站点 ID>
  Hosts          = ["www.example.com"]
  Mode           = sslcert
  ServerCertInfo = [{"CertId":"<证书 ID>"}]

CDN 这一步容易写错。如果用 UpdateDomainConfig 传一个只放了证书和私钥的 Https 对象,会碰上接口文档里的这条规则:复杂类型的配置项「必须传递整个对象的所有属性,未传递的属性将使用默认值」。也就是说,域名原来开着的 HSTS、OCSP 装订、TLS 版本限制,每次续期都会被重置成默认值。ModifyDomainConfig 按路径更新,路径以外的配置保持不变,换证书用它更稳妥。

只更新 Https.CertInfo.CertId 有一个前提:域名已经开启了 HTTPS。还没开启时,单改证书 ID 不会生效,单把 Https.Switch 设为 on 又会因为没有证书被拒绝,这时要把 Route 设为 Https,Value 写成 {"update":{"Switch":"on","CertInfo":{"CertId":"<证书 ID>"}}}。脚本里可以先用 DescribeDomainsConfig 查一下 Https.Switch,再决定走哪条。

脚本跑起来以后,还要自己处理定时任务、失败重试和告警。凭证建议用 CAM 子用户,只给 DNSPod、SSL 证书上传和 CDN / EdgeOne 改配置的权限。

有哪些办法可以不再手动换

方案适合代价
EdgeOne 免费证书只在 EdgeOne 上用不能下载,通配符有限制
SSL 证书 + 托管证书只放在腾讯云免费证书仍要手动申请
acme.sh + 自写脚本愿意维护代码部署、重试、告警都要自己写
Certimate 自托管有服务器、想全开源自己部署、升级、备份
托管式自动化平台不想维护任何东西要把云凭证交给平台

Certimate 是 MIT 协议的开源项目,自己部署后可以签发证书并部署到腾讯云 CDN、EdgeOne、CLB、COS 等,也支持阿里云和其他云厂商。证书、私钥和云凭证都留在自己的服务器上,代价是这台服务器和 Certimate 本身要自己维护。

只有一两个 CDN 域名时,手动换看起来也能应付,但一年四五次、每次都要有人记得去做,这件事迟早会被忘掉。能免费自动化的话,域名少也值得配一次。

用 LapseZero 自动续期并部署到腾讯云

LapseZero 是托管式的证书自动化服务:用 Let's Encrypt 签发证书,到期前自动续期,再部署到阿里云、腾讯云、AWS 的云产品或者自己的服务器上。腾讯云这边目前支持 CDN、EdgeOne 和负载均衡 CLB 的 HTTPS 监听。

  1. 添加域名。 解析在 DNSPod 的,填一个只有 DNS 权限的 CAM 子用户密钥,由平台自动写验证记录;不想交出 DNS 权限,可以用 DNS 委派,只在添加域名时加一次 CNAME 记录。两种方式的区别见 HTTP-01、DNS-01 和 DNS 委派怎么选。
  2. 签发证书。 支持通配符,不占腾讯云的 50 张免费额度。
  3. 添加部署目标。 平台会列出账号下的 CDN 域名和 EdgeOne 加速域名,勾选和证书匹配的即可。同一张证书可以同时部署到 CDN、CLB 和自己的服务器。
  4. 自动续期。 默认到期前 30 天续期,签发后部署到所有目标。每个目标的结果单独记录,失败时通过邮件、钉钉、飞书、企业微信等渠道通知。

有两点要知道。部署成功指的是腾讯云 API 已经接受了新证书,平台不会再去访问域名确认线上已经生效,CDN 节点下发需要一段时间,可以过一会儿用 SSL 证书到期检测 查一下。云凭证要交给平台保存,建议用权限最小的 CAM 子用户。免费版包含 3 个域名和 5 个部署目标。

证书最长有效期还会继续缩短,2027 年 3 月 15 日起所有公开证书最长 100 天,付费证书也一样,详见 2027 年起 SSL 证书最长 100 天。

腾讯云 CDN 和 EdgeOne 证书自动续期
LapseZero 自动签发免费证书,支持通配符,到期前自动续期并部署到腾讯云 CDN、EdgeOne、CLB,也支持阿里云、AWS 和自己的服务器。免费版即可开始。
免费开始使用