解决方案Cloud & DevOps · ACME · Kubernetes

云与 DevOps 证书自动化解决方案

云与 DevOps 证书自动化解决方案是把 SSL/TLS 证书当作代码管理的做法:通过 ACME 协议(RFC 8555,商业 CA 使用 EAB 外部账户绑定)、RESTful API 与 Webhook,在 CI/CD 流水线与 Kubernetes 集群中自动完成证书的申请、域名验证、部署与续期。EncryptionSign 兼容 certbot、acme.sh 与 cert-manager,用 DNS API 或 CNAME 委托完成 DNS-01 验证,并把证书推送到 Nginx、Kubernetes 以及阿里云、腾讯云、华为云的 CDN 与负载均衡,部署后自动校验,帮助团队应对 2026 年起 200 天、2029 年起 47 天的证书有效期。

更新于 EncryptionSign 证书技术团队首次发布

  • ACME / EAB
  • RESTful API
  • Webhook
  • cert-manager
  • DNS-01
  • 多云部署

云与 DevOps 方案要点速览

一句话方案:在 EncryptionSign 控制台获取 ACME 目录地址与 EAB 凭据,让 certbot、acme.sh 或 cert-manager 像使用免费 CA 一样申请商业证书;需要审批、OV 审核或对接内部系统的流程通过 RESTful API 与 Webhook 接入流水线;DNS-01 验证使用 DNS API 或 CNAME 委托,私钥在使用它的集群或服务器内生成;CDN 与负载均衡由平台推送并自动校验,证书监控与多渠道告警兜底。

  • 有效期倒逼自动化:CA/B 论坛 SC-081 规定证书最长有效期 2026 年 3 月 15 日起 200 天、2027 年起 100 天、2029 年起 47 天。
  • 标准协议:ACME(RFC 8555)是自动签发证书的标准协议,商业 CA 通过 EAB 把 ACME 账户绑定到付费账户。
  • 工具兼容:兼容 certbot、acme.sh 与 Kubernetes cert-manager,现有脚本只需更换目录地址并加入 EAB。
  • DNS-01:通配符证书在 ACME 中只能用 dns-01 验证;CNAME 委托 _acme-challenge 可避免下发整个域名的 DNS 密钥。
  • 多云部署:支持 Kubernetes、Nginx、阿里云 CDN / SLB、腾讯云 CDN / CLB、华为云 CDN、七牛云、又拍云,部署后自动校验并可回滚。
  • 可观测:30 / 15 / 7 / 1 天多级提醒与证书链、TLS 配置检测,告警推送到企业微信、钉钉、飞书或 Webhook。
Challenges

云与 DevOps 团队在证书管理上面临哪些挑战?

云原生环境中的证书问题很少出在“不会申请”,而是出在数量多、分布散、更换频繁:证书散落在集群、CDN、负载均衡与边缘节点上,任何一处靠人工维护,都会在有效期缩短后成为故障点。

47 天有效期下的人工续期

一个团队维护 300 张证书,有效期缩短到 47 天后,每年至少要更换约 2,400 次。依赖工单与人工替换,迟早会有一张证书在夜间过期,引发 API 调用失败与 App 白屏。

多云多 CDN,证书副本散落

同一个域名同时挂在阿里云 CDN、腾讯云 CLB 与自建 Kubernetes Ingress 上,每处各有一份证书。续期时只替换了其中两处,剩下的一处直到过期当天才被用户发现。

凭据与私钥过度扩散

为了让流水线自动验证,CI 变量里放着能修改整个域名解析的 DNS API 密钥;同一张通配符证书的私钥被复制到多个集群与开发者电脑,一旦泄露,影响范围难以评估。

商业证书接不进 ACME 工具链

团队已经用 cert-manager、acme.sh 自动管理免费证书,但对外 API 需要 OV 证书或合作方指定的 CA 品牌,只能回到手工下单、上传证书的老流程,自动化出现断点。

云与 DevOps 证书自动化方案如何工作?

EncryptionSign 的云与 DevOps 方案把证书生命周期拆成签发、验证、部署与观测四层,每一层都通过标准协议或 API 接入团队已有的工具链,让证书像基础设施代码一样被声明、评审与自动执行。团队不需要替换正在使用的 certbot、acme.sh 或 cert-manager,只需把 ACME 目录地址换成 EncryptionSign 控制台提供的地址并加上 EAB 凭据,就能在同一套流程中使用商业 CA 证书(可通过 ACME 签发的品牌与产品以控制台为准);其余品牌与产品可通过 API 或控制台下单,同样由平台自动验证、部署与续期。

签发层:ACME 与 RESTful API 两种入口

已经“会说 ACME”的环境——Linux 服务器上的 certbot 与 acme.sh、Kubernetes 中的 cert-manager——直接使用 ACME(含 EAB)签发,私钥由客户端在本地生成,只有 CSR 发送给 CA。需要下单审批、组织审核(OV)、批量申请,或要把证书申请嵌入内部自助平台与 CMDB 的场景,使用 RESTful API 发起与查询订单,并订阅 Webhook 事件通知驱动后续步骤。没有任何自动化客户端的目标,例如云 CDN 与负载均衡,由平台直接托管签发与部署。

验证层:DNS-01 优先,凭据最小化

云原生环境推荐以 DNS 验证为默认方式:它不要求服务对公网开放,不受负载均衡、CDN 与 WAF 影响,也是通配符证书唯一可用的 ACME 验证方式。EncryptionSign 对接阿里云 DNS、腾讯云 DNSPod、华为云 DNS、Cloudflare、AWS Route 53、百度智能云 DNS、火山引擎 DNS、GoDaddy、西部数码与 Name.com 的 API,自动添加并清理验证记录;不希望授予主域名 DNS 写权限时,使用 CNAME 委托验证,把 _acme-challenge 一次性委托出去。单个对外 Web 服务也可以使用 HTTP 文件验证。

部署层:私钥在哪里生成,证书就部署在哪里

cert-manager 把证书与私钥写入集群内的 TLS Secret,由 Ingress 控制器直接读取;acme.sh 与 certbot 把证书安装到本机并重载 Nginx 等服务。对于 CDN、负载均衡与面板类目标,EncryptionSign 通过部署代理 / SSH 或云平台 API,把证书推送到 Nginx、Apache、IIS、Tomcat、宝塔面板、1Panel、Kubernetes 以及阿里云 CDN / SLB、腾讯云 CDN / CLB、华为云 CDN、七牛云与又拍云,部署后自动校验证书是否生效,异常时可回滚到上一版本证书。

观测层:监控是自动化的最后一道保险

自动化会失败:DNS 凭据过期、Ingress 控制器配置漂移、CDN 回源域名变更,都可能让续期“成功”而线上证书没有更新。证书监控从外部检查每个域名实际返回的证书,覆盖有效期、证书链、吊销状态、域名匹配与 TLS 配置,平台外签发的证书(例如集群里已有的免费证书)也可以纳入同一视图;30 / 15 / 7 / 1 天多级提醒与异常告警通过邮件、短信、企业微信、钉钉、飞书或 Webhook 送达值班人员。

如何用 ACME + EAB 接入 certbot、acme.sh 与 cert-manager?

接入方式取决于证书最终运行在哪里:运行在 Kubernetes 中的证书交给 cert-manager,运行在单台服务器上的证书交给 acme.sh 或 certbot,需要审批、OV 审核或对接内部系统的流程使用 RESTful API 与 Webhook,无法运行客户端的 CDN 与负载均衡由 EncryptionSign 平台直接部署。四种方式可以在同一个账户中并存,并通过证书监控统一观测。

云与 DevOps 证书接入方式对比
接入方式适合环境私钥生成位置域名验证部署与续期
cert-manager(ACME + EAB)Kubernetes Ingress 与 Gateway API 入口集群内,由 cert-manager 生成并写入 TLS Secretdns-01(推荐)或 http-01cert-manager 写入 Secret,到期前自动续期
acme.sh / certbot(ACME + EAB)云主机、虚拟机与边缘节点上的 Nginx、Apache、HAProxy服务器本地dns-01 或 http-01客户端定时任务续期,安装后执行重载命令
RESTful API + WebhookCI/CD 流水线、内部自助平台、CMDB、OV 与批量订单本地生成 CSR,或由平台生成密钥对平台 DNS API、CNAME 委托或 HTTP 文件流水线获取证书并发布,Webhook 推送事件通知(接口以控制台 API 说明为准)
平台托管自动部署云 CDN、负载均衡、宝塔面板、1Panel 等不便运行客户端的目标平台生成(加密存储,仅下发到授权的部署目标)或本地生成平台 DNS API 或 CNAME 委托通过部署代理 / SSH 或云平台 API 推送,部署后自动校验,支持回滚

示例一:acme.sh 使用 EAB 注册账户并通过 DNS API 签发

# 示例:占位值需替换;ACME 目录地址与 EAB 凭据在 EncryptionSign 控制台获取
acme.sh --register-account --server "<ACME_DIRECTORY_URL>" \
  --eab-kid "<EAB_KID>" --eab-hmac-key "<EAB_HMAC_KEY>" -m ops@example.com

# 以阿里云 DNS 为例(dns_ali),其他服务商替换为对应的 dnsapi 插件
export Ali_Key="<AccessKey ID>" Ali_Secret="<AccessKey Secret>"
acme.sh --issue --server "<ACME_DIRECTORY_URL>" --dns dns_ali \
  --keylength ec-256 -d example.com -d "*.example.com"

# 安装到 Nginx 使用的路径,续期后自动执行重载命令
acme.sh --install-cert -d example.com --ecc \
  --key-file /etc/nginx/ssl/example.com.key \
  --fullchain-file /etc/nginx/ssl/example.com.fullchain.pem \
  --reloadcmd "systemctl reload nginx"

示例二:certbot 使用 EAB 申请证书

# 示例:使用 certbot-dns-cloudflare 插件完成 dns-01 验证,占位值需替换
certbot certonly --server "<ACME_DIRECTORY_URL>" \
  --eab-kid "<EAB_KID>" --eab-hmac-key "<EAB_HMAC_KEY>" \
  --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -m ops@example.com --agree-tos -d example.com -d "*.example.com"

示例三:cert-manager ClusterIssuer 配置 externalAccountBinding

# 示例:先在 cert-manager 所在命名空间创建保存 EAB HMAC 密钥的 Secret(占位值需替换)
# kubectl -n cert-manager create secret generic encryptionsign-eab \
#   --from-literal=secret='<EAB_HMAC_KEY>'
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: encryptionsign
spec:
  acme:
    server: <ACME_DIRECTORY_URL>          # 在 EncryptionSign 控制台获取
    email: ops@example.com
    privateKeySecretRef:
      name: encryptionsign-acme-account    # ACME 账户密钥,由 cert-manager 生成
    externalAccountBinding:
      keyID: <EAB_KID>
      keySecretRef:
        name: encryptionsign-eab
        key: secret
    solvers:
      - dns01:
          cnameStrategy: Follow            # 跟随 _acme-challenge 的 CNAME 委托
          cloudflare:                      # 按所用 DNS 服务商配置对应的 solver
            apiTokenSecretRef:
              name: cloudflare-api-token
              key: api-token
# 示例:Ingress 通过注解引用 ClusterIssuer,证书与私钥写入 web-example-tls
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
  annotations:
    cert-manager.io/cluster-issuer: encryptionsign
spec:
  ingressClassName: nginx
  tls:
    - hosts: [www.example.com]
      secretName: web-example-tls
  rules:
    - host: www.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80

以上均为通用示例,使用前请替换占位值。EncryptionSign 的 ACME 目录地址、EAB 凭据以及可通过 ACME 签发的品牌与产品,请在控制台获取与确认。EAB HMAC 密钥等同于账户凭据,应保存在 CI 的密钥管理或 Kubernetes Secret 中,不要写入代码仓库或打印到流水线日志。

RESTful API 与 Webhook 适合做什么?

  • 流水线中的证书准备:新服务上线前,在部署阶段调用 API 申请证书,签发完成后再继续发布,避免“服务已上线、证书还没好”;
  • 内部自助平台:业务团队在内部门户中申请证书,由平台工程团队通过 API 统一下单、按项目归属,避免各团队各自购买、各自过期;
  • 事件驱动:订阅 Webhook 事件通知与告警,触发配置下发、通知值班或更新 CMDB 记录;
  • 不在自动部署列表中的平台:通过 API 获取新证书,由团队自己的发布工具推送,同样纳入监控。

DNS-01 与 CNAME 委托:如何在自动验证时控制凭据与私钥风险?

在云与 DevOps 环境中,推荐把 dns-01 作为默认验证方式,并用 CNAME 委托把验证所需的 DNS 写权限限制在一个专用区域内。dns-01 不要求服务对公网开放,不受负载均衡与 CDN 影响,也是通配符证书在 ACME 中唯一可用的验证方式;CNAME 委托则解决了 dns-01 最大的安全顾虑——为了自动验证,不得不把能修改整个域名解析的 API 密钥交给流水线。

ACME 验证方式在云原生环境中的对比
验证方式原理通配符需要服务对公网开放适合场景
http-01CA 通过 80 端口访问 /.well-known/acme-challenge/ 下的文件不可以需要可被公网直接访问的单个 Web 服务或 Ingress
dns-01在 _acme-challenge 主机名下添加 TXT 记录可以不需要通配符、内网服务(使用公网域名)、多 CDN、多区域部署
dns-01 + CNAME 委托_acme-challenge 以 CNAME 指向验证专用区域,TXT 写在委托目标上可以不需要不希望下发主域名 DNS 密钥的流水线、多团队共用一个主域名

CNAME 委托如何配置?

  1. 在主域名 DNS 中一次性添加委托记录,例如 _acme-challenge.example.com. CNAME example-com.acme-validation.example.net.;使用 EncryptionSign 平台验证时,以控制台给出的记录值为准。
  2. 只为验证专用区域(如 acme-validation.example.net)创建 DNS API 凭据,交给 acme.sh(--challenge-alias)、cert-manager(cnameStrategy: Follow),或由平台托管。
  3. 验证时 TXT 记录写入委托目标,CA 查询 _acme-challenge.example.com 时沿 CNAME 读到它;验证完成后自动清理。
  4. CAA 检查仍针对被签发的域名本身(RFC 8659),确认 example.com 的 CAA 记录授权了所选 CA。

CNAME 委托把“能改网站解析”与“能完成证书验证”两种权限分开:即使验证凭据泄露,攻击者也无法篡改 A 记录、MX 记录等业务解析。但委托区域的写权限依然可以用来为该域名申请证书,凭据仍需加密保存并定期轮换。

只在内网访问的服务如何申请证书?

Grafana、制品仓库、内部 API 网关等只在内网访问的服务,只要使用已注册的公网域名(如 grafana.ops.example.com),就可以通过 dns-01 申请公共信任证书:CA 只检查公网权威 DNS 中的验证记录,不需要访问服务本身。采用内外网分离解析(split-horizon DNS)时,_acme-challenge 记录必须写在公网权威 DNS 中。.local 等内部名称与私有 IP 自 2015 年起不能出现在公共信任证书中;证书还会写入公开的 CT 日志(Chrome 自 2018 年 4 月起要求新证书带有 SCT,RFC 6962),内部主机名会因此可被查询,命名时应避免暴露敏感信息。

私钥在哪里生成、保存在哪里?

  • 在使用私钥的地方生成:cert-manager、acme.sh 与 certbot 都在本地生成私钥,只把 CSR 发送给 CA。EncryptionSign 同样支持在您自己的服务器上本地生成 CSR 与私钥,私钥无需上传平台;选择由平台生成时,私钥加密存储,仅通过加密通道下发到您授权的部署目标。
  • Kubernetes Secret 需要额外保护:为 etcd 启用静态加密,用 RBAC 限制对 TLS Secret 的读取;在 Certificate 资源中设置 privateKey.rotationPolicy: Always,让每次续期同时轮换私钥。
  • 私钥不进代码仓库:GitOps 仓库中只保存 Issuer、Certificate 与 Ingress 等声明,私钥、EAB HMAC 密钥与 DNS API 密钥放在密钥管理系统中。

如何避免通配符私钥扩散?

通配符证书的便利来自“一张证书到处可用”,风险也来自这里。同一域名可以同时持有多张有效证书,因此更稳妥的做法是:每个集群、每家 CDN 使用各自申请的证书与私钥,某一处泄露时只需吊销并替换那一张;确实需要通配符的场景(如 SaaS 多租户子域名 tenant.example.com),把通配符证书限制在统一的入口网关上,后端服务之间使用各自的证书。证书数量增加带来的管理成本,正是 ACME 与平台自动化要消除的部分。

Recommended

云与 DevOps 场景推荐哪些证书?

云与 DevOps 场景推荐的证书组合是:对外服务与 API 以 DV 为主、全自动签发,需要组织身份时用 OV,多租户子域名用通配符,政企与密评场景用国产品牌,发布流水线中的安装包用代码签名。DV、OV、EV 加密强度相同,区别在于身份验证与自动化程度。

云与 DevOps 推荐证书组合
业务系统 / 场景推荐证书类型推荐品牌理由
Kubernetes Ingress 与对外 Web 服务DV 单域名或多域名Sectigo、PositiveSSL、GeoTrust无人工审核,适合 cert-manager 按 Ingress 自动申请;每个服务独立证书,私钥不出集群
公共 API 网关与开放平台DV;合作方要求组织身份时用 OVDigiCert、GlobalSign、Sectigo调用方只校验证书链与域名;OV 组织信息复用期 398 天,审核通过后服务期内重签与部署自动完成
SaaS 多租户子域名通配符(DV / OV)AlphaSSL、Sectigo、GlobalSign新租户上线无需重签;只能 DNS 验证,私钥限制在入口网关,只覆盖一级子域名
多云 CDN 与负载均衡加速域名DV / OV 单域名或多域名,每家云厂商独立证书GeoTrust、Sectigo、GoGetSSL平台通过云 API 推送到阿里云、腾讯云、华为云 CDN 等并自动校验;分开签发便于单独吊销
测试、预发布与临时环境(公网域名)DV 单域名或通配符PositiveSSL、AlphaSSL成本低、签发快;纯内网名称与私有 IP 不能申请公共信任证书
公网 IP 直连的边缘节点与设备接口公网 IP 证书(DV / OV)GoGetSSL(Public IP SAN)、KeepTrust没有域名时为公网 IP 启用 HTTPS;IP 证书的验证方式以 CA 要求为准
面向政企、需要等保或密评的云上系统OV;国密 SM2 与 RSA / ECC 双证书sslTrus、KeepTrust国产品牌提供 SM2 国密版本,KeepTrust 审核签发在国内完成;国密需服务器与客户端支持 TLCP
发布流水线中的 Windows 安装包与驱动代码签名证书(OV / EV)Sectigo、DigiCert、Certum私钥须在硬件或云签名服务中(如 DigiCert KeyLocker、Certum SimplySign),可在 CI/CD 中远程签名;需咨询订购
可通过 ACME 自动签发的品牌与产品,以及各产品是否附带根域名、是否支持公网 IP,以控制台显示为准;OV 证书需先完成组织审核。代码签名证书暂不支持在线下单,请联系证书顾问。电商大促与多 CDN 场景可参考电商零售解决方案,政企国密场景可参考政企与教育解决方案。
Platform

EncryptionSign 的平台能力如何落地到 DevOps 场景?

EncryptionSign 把证书申请、验证、部署、续期与监控做成可编程的自动化流水线,下面是云与 DevOps 团队最常用的六项能力。

ACME 与 EAB

提供标准 ACME 目录与 EAB 外部账户绑定,兼容 certbot、acme.sh 与 cert-manager,现有自动化脚本只需更换目录地址并加入 EAB 凭据。

RESTful API 与 Webhook

在流水线、内部自助平台或 CMDB 中调用 API 发起与查询订单,通过 Webhook 接收证书事件通知与告警,驱动后续发布或通知(事件类型以控制台为准)。

DNS API 与 CNAME 委托验证

对接阿里云 DNS、腾讯云 DNSPod、华为云 DNS、Cloudflare、AWS Route 53、百度智能云 DNS、火山引擎 DNS、GoDaddy、西部数码、Name.com,自动添加并清理验证记录;也支持 CNAME 委托与 HTTP 文件验证。

多云自动部署与回滚

通过部署代理 / SSH 或云平台 API,把证书推送到 Nginx、Apache、IIS、Tomcat、Kubernetes 以及阿里云 CDN / SLB、腾讯云 CDN / CLB、华为云 CDN、七牛云、又拍云,部署后自动校验,支持回滚。

监控与多渠道告警

30 / 15 / 7 / 1 天多级到期提醒,检测证书链、吊销状态、域名匹配与 TLS 配置;平台外签发的证书也可纳入监控,告警发送到邮件、短信、企业微信、钉钉、飞书或 Webhook。

项目权限与操作审计

证书资产集中管理,按项目分配成员与角色,分别控制申请、部署与查看权限;申请、验证、部署全过程记录操作审计日志,便于追溯每一次变更。

Implementation

DevOps 团队如何分四步落地证书自动化?

从盘点存量证书到演练续期,DevOps 团队通常按以下四步完成接入;建议先选一个业务线或一个集群试点,再逐步推广。

  1. 盘点现有证书

    把现有域名导入证书监控(包括平台外签发的证书),按业务线建立项目并分配成员与角色,找出即将到期、证书链不完整或分散在多处的证书。

  2. 配置验证与凭据

    授权 DNS 服务商 API,或为 _acme-challenge 配置 CNAME 委托;在控制台获取 ACME 目录地址与 EAB 凭据,存入 CI 密钥管理或 Kubernetes Secret。

  3. 接入集群与流水线

    在集群中创建 cert-manager ClusterIssuer,服务器上配置 acme.sh 或 certbot,流水线中调用 RESTful API 并订阅 Webhook;CDN 与负载均衡配置平台自动部署。

  4. 校验、告警与演练

    开启部署后自动校验与回滚,把告警接入企业微信、钉钉、飞书或 Webhook;定期查看续期报告,并在测试环境演练一次完整的续期与替换。

云与 DevOps 证书管理需要关注哪些合规与安全要求?

在中国境内运营的云上业务,证书管理主要对应《网络安全法》《数据安全法》《个人信息保护法》与网络安全等级保护 2.0 中关于通信加密的要求;面向政企的系统可能还需要通过商用密码应用安全性评估(密评),处理银行卡数据的业务还需符合 PCI DSS v4.0。这些要求的共同点是:传输必须加密、证书必须持续有效、证书与密钥必须可盘点、操作必须可追溯——这正是自动化方案擅长的部分。

云与 DevOps 证书管理相关法规与标准
法规 / 标准与证书相关的要求对 DevOps 证书管理的含义
《网络安全法》《数据安全法》分别于 2017 年 6 月 1 日、2021 年 9 月 1 日施行,是网络与数据安全的基础性法律对外服务与服务间通信启用 TLS;证书过期导致的中断同样是可用性风险
《个人信息保护法》第五十一条2021 年 11 月 1 日施行,要求采取加密、去标识化等安全技术措施传输个人信息的 API、App 后端与管理后台全部使用有效证书加密
等保 2.0(GB/T 22239-2019)第三级要求采用密码技术保证通信过程中数据的完整性与保密性全链路 HTTPS / TLS;证书资产清单与操作审计日志有助于准备测评材料
《密码法》《商用密码管理条例》与密评《密码法》2020 年 1 月 1 日施行;《商用密码管理条例》2023 年修订、2023 年 7 月 1 日施行;GB/T 39786-2021《信息系统密码应用基本要求》需要通过密评的系统,评估国密 SSL(TLCP,GB/T 38636-2020,SM2 / SM3 / SM4)与 RSA / ECC 双证书部署
PCI DSS v4.0 / v4.0.14.2.1:公共网络传输持卡人数据须使用强加密,并确认证书有效、未过期、未吊销;4.2.1.1:维护受信任密钥与证书清单(2025 年 3 月 31 日起强制)监控检测有效期与吊销状态;证书资产集中管理形成证书清单
Apple ATS 与微信小程序App 默认使用 HTTPS(TLS 1.2 及以上);小程序网络请求必须使用 HTTPS 且证书有效移动端与小程序后端 API 的证书过期或链不完整会直接导致请求失败

证书自动化中的安全要点

  • 凭据最小化:DNS API 密钥只授予验证所需的权限,优先使用 CNAME 委托;EAB 凭据与 DNS 凭据保存在密钥管理系统中并定期轮换。
  • 配置 CAA 记录:CA 自 2017 年 9 月起必须在签发前检查 CAA(RFC 8659)。为正在使用的 CA 配置 CAA,可阻止其他 CA 为你的域名签发证书;更换品牌前先更新 CAA。
  • 关注证书透明度日志:所有公共证书都会写入 CT 日志,可定期在 crt.sh 等工具中检索自己的域名,发现非预期签发的证书。
  • 部署完整证书链:各 CA 正在迁移到 TLS 专用根证书,始终使用签发时提供的完整证书链,不要在镜像或配置中硬编码旧的中间证书。
  • 变更可追溯:证书申请、验证与部署由平台记录操作审计日志,Issuer 与 Certificate 声明纳入 Git 评审,出现问题时能快速定位是谁、在何时、改了什么。
Best Practices

云与 DevOps 证书管理最佳实践清单

以下做法可直接用作证书自动化上线前的检查清单,左侧为推荐做法,右侧为需要避免的做法。

推荐做法

  • 把 ClusterIssuer、Certificate 与 Ingress 声明纳入 Git 管理与代码评审,凭据与私钥除外;
  • 默认使用 dns-01 验证,并通过 CNAME 委托把 DNS 写权限限制在验证专用区域;
  • 每个集群、每个服务独立申请证书,私钥在使用它的地方生成;
  • 在剩余有效期约三分之一时开始续期,为失败重试留出时间;
  • 部署后校验线上证书的序列号、到期时间、证书链与域名匹配;
  • 为 ACME 账户、EAB 与 DNS 凭据设置轮换周期,人员变动时及时回收项目权限;
  • 平台外签发的证书也纳入监控,告警接入值班渠道。

应避免的做法

  • 把私钥、EAB HMAC 密钥或 DNS API 密钥提交到代码仓库或打印到流水线日志;
  • 把同一张通配符证书的私钥复制到所有集群、CDN 与开发者电脑;
  • 在镜像或配置中硬编码中间证书,或沿用旧证书的证书链文件;
  • 依赖邮箱验证或人工上传证书作为长期方案;
  • 只监控证书到期时间,不检测证书链、域名匹配与 TLS 配置;
  • 把 .local 等内部名称或私有 IP 写入公共证书申请。
FAQ

云与 DevOps 证书自动化常见问题

关于 ACME 与 EAB、cert-manager、通配符自动续期、DNS 凭据安全与内网服务证书,DevOps 与 SRE 团队最常问的问题。

商业 SSL 证书可以用 ACME 自动申请吗?EAB 是什么?

ACME(Automatic Certificate Management Environment,RFC 8555)是自动申请与续期证书的标准协议,并不只用于免费证书,商业 CA 同样可以通过 ACME 签发证书。为了把 ACME 账户与已付费的商业账户关联,RFC 8555 第 7.3.4 节定义了外部账户绑定(External Account Binding,EAB):客户端注册 ACME 账户时提交 CA 提供的 Key ID 与 HMAC 密钥,CA 据此确认该 ACME 账户归属于哪个已开通的商业账户。使用 EncryptionSign 时,在控制台获取 ACME 目录地址与 EAB 凭据,填入 certbot、acme.sh 或 cert-manager 即可;可通过 ACME 签发的品牌与产品以控制台显示为准。

cert-manager 能签发商业 CA 的证书吗?

cert-manager 是 Kubernetes 中最常用的证书控制器,它的 ACME Issuer 支持 externalAccountBinding 字段,因此可以对接提供 EAB 的商业 ACME 服务。在 ClusterIssuer 中填入 EncryptionSign 控制台提供的 ACME 目录地址与 EAB 凭据,再为 Ingress 添加 cert-manager.io/cluster-issuer 注解或创建 Certificate 资源,cert-manager 就会在集群内生成私钥、申请证书、写入 TLS Secret,并在到期前自动续期。配置示例见本页 ACME 与 EAB 接入一节。

通配符证书可以用 ACME 自动续期吗?

可以,但只能使用 dns-01 验证。ACME 的 http-01 只能证明对单个主机名的控制权,通配符证书在 ACME 中只能通过 DNS 验证。自动化的前提是 ACME 客户端或 EncryptionSign 平台能够写入 _acme-challenge 记录:可以授权 DNS 服务商 API,也可以把 _acme-challenge 用 CNAME 委托到验证专用的区域。还要注意 *.example.com 只覆盖一级子域名,不覆盖 a.b.example.com,是否附带根域名以产品为准。

不想把整个域名的 DNS 密钥放进 CI/CD,有什么办法?

使用 CNAME 委托验证。在主域名 DNS 中一次性添加 _acme-challenge.example.com 指向验证专用域名(或 EncryptionSign 控制台给出的委托记录值)的 CNAME 记录,此后验证用的 TXT 记录写在委托目标上,CA 查询时会沿 CNAME 读到它。流水线或平台只需要验证专用区域的写权限,即使凭据泄露,也无法篡改网站的 A 记录、MX 记录等业务解析。需要注意,委托区域的写权限仍可用于为该域名申请证书,因此同样要妥善保管。acme.sh 的 --challenge-alias 与 cert-manager 的 cnameStrategy: Follow 都支持这种方式。

只在内网访问的服务能申请公共 SSL 证书吗?

取决于服务使用的名称。只要使用已注册的公网域名(例如 grafana.ops.example.com),即使它只在内网解析、不对公网开放,也可以通过 dns-01 验证申请公共信任证书,因为 CA 只检查公网权威 DNS 中的验证记录,不需要访问服务本身。但 .local 等内部名称以及 10.x、192.168.x 等私有 IP 自 2015 年起不能出现在公共信任证书中,这类场景只能使用企业自建的私有 CA。另外,公共证书会写入公开的证书透明度(CT)日志,内部主机名会因此可被查询。

证书有效期缩短到 47 天,对 DevOps 团队意味着什么?

根据 CA/浏览器论坛 SC-081 决议,单张 SSL/TLS 证书最长有效期 2026 年 3 月 15 日起为 200 天,2027 年 3 月 15 日起为 100 天,2029 年 3 月 15 日起为 47 天;域名验证结果复用期同步缩短到 200 天、100 天与 10 天。到 2029 年,每张证书一年至少更换约 8 次,并且几乎每次都要重新验证域名。任何依赖人工的环节——手工添加 DNS 记录、登录控制台上传证书、凭日历提醒续期——都会成为故障来源,证书的申请、验证、部署与生效校验必须全部自动化,并由监控告警兜底。

对外 API 用 DV 证书还是 OV 证书?

DV、OV、EV 证书的加密强度相同,区别在于身份验证。API 的调用方通常是程序,只校验证书链、有效期与域名,不会展示组织名称,因此大多数公共 API、Webhook 回调与移动应用后端使用 DV 证书即可,也最容易全自动化。合作方安全评估、招投标或行业要求在证书中体现组织身份时,选择 OV 证书:组织身份信息可复用 398 天,审核通过后,服务期内的重签与部署同样由平台自动完成。

多个 Kubernetes 集群可以共用一张通配符证书吗?

技术上可以,但不建议作为默认做法。通配符证书的私钥一旦复制到多个集群、多家 CDN 与开发者电脑,任何一处泄露都需要吊销证书并替换所有位置。在 ACME 自动化下,多签发一张证书几乎没有额外的运维成本,更好的做法是每个集群、每个服务各自申请证书,私钥在各自集群内生成、不离开集群;只有 SaaS 多租户子域名等确实需要通配符证书的场景才使用通配符,并把私钥限制在入口网关上。

证书自动部署失败会影响线上服务吗?

EncryptionSign 自动部署后会校验新证书是否已在目标上生效,并支持部署回滚,异常时可以把目标恢复到上一版本证书,同时通过邮件、短信、企业微信、钉钉、飞书或 Webhook 告警。由于续期在到期前提前进行,旧证书此时仍在有效期内,一次部署失败不会立即造成中断,团队有时间排查原因。建议同时开启证书监控,持续检测线上证书的有效期、证书链、域名匹配与 TLS 配置。

参考资料与更新说明

本文由 EncryptionSign 证书技术团队依据以下公开标准与资料整理,最后更新于 。CA 产品名称、验证规则与行业政策可能调整,请以 CA 官方与 CA/浏览器论坛最新发布为准;如需确认,请联系 support@encryptionsign.com。

  1. RFC 8555:自动证书管理环境(ACME),第 7.3.4 节外部账户绑定(EAB)
  2. CA/浏览器论坛(CA/Browser Forum):TLS 证书基线要求与 SC-081 有效期决议
  3. RFC 8659:DNS 证书颁发机构授权(CAA)资源记录
  4. RFC 6962:证书透明度(Certificate Transparency)
  5. cert-manager 官方文档:ACME Issuer、External Account Binding 与 DNS01 验证
  6. GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》
  7. 证书透明度日志查询(crt.sh),可检索域名已签发的全部证书

让证书跟上你的流水线

注册即可获取 ACME 目录地址与 EAB 凭据,用 certbot、acme.sh、cert-manager 或 RESTful API 自动申请证书,并自动部署到 Kubernetes 与多云 CDN。