企业证书资产发现与清单管理:从 Shadow IT 到全面可见性的 PKI 运维实战

PKI 体系 · 2026-06-07 · 5 阅读

前言

2024 年,某大型电商平台的核心支付接口突然中断。事故根因令人意外:一张藏在内部负载均衡器背后的 TLS 证书过期了。这张证书不在任何监控系统中,也没有人知道它的存在——它是典型的"Shadow证书":无人知晓、无人管理、无人负责。

这类事件并非孤例。根据 Ponemon Institute 的调查,超过 60% 的企业证书过期导致的停机事件,源于"不知道自己有哪些证书"。在微服务、容器化、多云和 DevOps 自动化的时代,证书的数量和分布复杂度呈指数级增长,传统的电子表格管理方式早已不堪重负。

本文将系统性地介绍企业证书资产发现与清单管理的完整方案:从技术手段到流程建设,从开源工具到商业平台,帮助读者建立从"看不见"到"全可见"的证书管理能力。

证书为什么变得"不可见"?

现代基础设施的复杂性

过去,企业的证书数量有限——可能只有几十张,集中在几台关键服务器上。但现在:

  • 微服务架构:每个服务可能需要独立的 TLS 证书,一个包含 200 个微服务的系统可能拥有上千张证书
  • 容器化部署:Kubernetes 集群中的 Pod 频繁创建和销毁,每个 Pod 可能使用独立的短生命周期证书
  • 多云环境:AWS、Azure、GCP 各有自己的证书管理服务(ACM、Key Vault 等),形成信息孤岛
  • CDN 和边缘节点:CloudFront、Cloudflare 等 CDN 服务可能管理着你不知道的证书
  • IoT 设备:大量边缘设备使用证书进行身份认证,但往往缺乏统一管理
  • CI/CD 流水线:自动化部署过程中动态申请的证书可能未被记录

Shadow 证书的来源

Shadow 证书通常来自以下场景:

来源典型场景风险等级
开发者自签证书开发/测试环境中使用,后被误部署到生产
临时证书排障或演示时创建,事后未清理
第三方集成SaaS 供应商部署的证书,企业不知情
遗留系统老系统无人维护,证书自动续期失败
自动扩缩容云环境自动创建的实例附带证书
影子 IT未经 IT 部门审批的系统和证书极高

真实案例

案例 1:某金融机构的核心系统停机 某银行的 SSL VPN 证书过期,导致远程办公全部中断。事后排查发现,该证书由三年前离职的员工申请,记录在个人电脑的电子表格中,无人交接。停机持续了 6 小时,影响 2000+ 名员工。

案例 2:Kubernetes 集群的大规模证书失效 某互联网公司的 K8s 集群中,Istio Service Mesh 使用的中间 CA 证书过期,导致集群内所有 mTLS 通信失败。由于该证书由 cert-manager 自动管理,但 cert-manager 自身的存储后端(etcd)损坏未能触发续期,最终导致整个集群的服务间通信中断。

证书发现的技术手段

方法一:网络扫描

通过主动扫描网络中的 TLS 服务,获取证书信息。这是发现外部和内部证书最直接的方法。

#### 使用 OpenSSL 手动扫描

BASH
# 扫描单个域名的证书
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -subject -issuer -dates -fingerprint 2>/dev/null

# 批量扫描多个域名
for domain in $(cat domains.txt); do
  echo "=== $domain ==="
  echo | openssl s_client -servername "$domain" -connect "$domain:443" 2>/dev/null | \
    openssl x509 -noout -subject -issuer -dates -ext subjectAltName 2>/dev/null
done

#### 使用 Nmap 脚本扫描

BASH
# 使用 ssl-cert 脚本扫描证书信息
nmap --script ssl-cert -p 443,8443,993,995 -iL targets.txt -oA cert-scan

# 使用 ssl-enum-ciphers 获取更详细的 TLS 信息
nmap --script ssl-enum-ciphers -p 443 -iL targets.txt -oA tls-scan

#### 使用 Python 批量扫描

方法二:云平台和 API 查询

主流云服务提供商都提供了证书管理 API,可以通过 API 获取已部署的证书列表:

BASH
# AWS ACM 证书
aws acm list-certificates --region us-east-1

# Azure Key Vault 证书
az keyvault certificate list --vault-name my-vault

# GCP Certificate Manager
gcloud compute ssl-certificates list

# Cloudflare API
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/ssl/certificates" \
  -H "Authorization: Bearer $CF_API_TOKEN"

方法三:Kubernetes 集群内扫描

对于 Kubernetes 集群,可以使用以下方法发现证书:

BASH
# 扫描所有 Secret 中的证书
kubectl get secrets --all-namespaces -o json | \
  jq '.items[] | select(.type == "kubernetes.io/tls") | {namespace: .metadata.namespace, name: .metadata.name}'

# 扫描 cert-manager 管理的证书
kubectl get certificates --all-namespaces

# 扫描 Istio mTLS 证书
istioctl proxy-config secret <pod-name> -n <namespace>

方法四:证书透明度(CT)日志查询

证书透明度日志记录了所有公开签发的 TLS 证书,可以用于发现企业拥有的证书:

BASH
# 使用 crt.sh 查询
curl -s "https://crt.sh/?q=example.com&output=json" | \
  jq '.[] | {name_value, issuer_name, not_before, not_after}'

# 使用 Cert Spotter API
curl -s "https://api.certspotter.com/v1/issuances?domain=example.com&include_subdomains=true&expand=dns_names" | \
  jq '.[].dns_names'

证书清单管理平台建设

发现证书只是第一步,还需要建立一个持续维护的证书清单管理平台。

核心功能需求

一个企业级证书清单管理平台应具备以下功能:

  • 自动发现:定期扫描网络、云平台、K8s 集群,自动发现新证书
  • 集中存储:将所有证书的元信息存储在统一的数据库中
  • 生命周期跟踪:跟踪每张证书的签发时间、到期时间、续期状态
  • 告警通知:在证书即将过期时自动发送告警
  • 所有权管理:记录每张证书的负责人、所属团队、关联服务
  • 合规检查:检查证书是否符合企业安全策略(密钥长度、算法、CA 等)
  • 审计日志:记录所有证书操作的审计日志
  • API 集成:与 CI/CD、CMDB、ITSM 等系统集成

开源方案:使用 ShoeL 或 Lemur

ShoeL 是一个开源的证书发现和分析工具,可以扫描网络中的 TLS 证书并生成报告。

Lemur 是由 Netflix 开源的证书管理工具,支持多种 CA 后端,提供证书申请、续期和部署功能。

商业方案选型要点

如果企业规模较大(超过 500 张证书),建议考虑商业 CLM(证书生命周期管理)平台。选型时重点关注:

  • 发现能力:支持的网络范围、云平台、容器平台
  • 自动化能力:ACME 支持、自动续期、自动部署
  • 国密支持:是否支持 SM2/SM4 证书管理
  • 合规报告:是否提供合规审计报告
  • API 集成:是否提供完整的 REST API
  • 高可用性:平台的高可用架构

国密双证书环境的特殊挑战

双证书并行的复杂性

在国内合规环境中,许多企业需要同时使用国密证书和国际证书:

  • 国密证书:使用 SM2 算法,由国内 CA 签发,满足密评合规要求
  • 国际证书:使用 RSA/ECC 算法,由国际 CA 签发,确保浏览器兼容性
这意味着证书数量翻倍,且需要分别管理两套证书的生命周期。国密证书的自动化管理工具生态尚不成熟,很多操作仍需通过 CA 的 Web 门户手动完成。

国密证书发现的关键点

  • 国密证书的识别:国密证书的 OID 包含国密标识(如 1.2.156.10197.1.301),可以通过解析证书扩展字段识别
  • 国密 CA 的识别:国密 CA 的根证书和中间证书需要单独维护信任库
  • 密评合规检查:检查证书是否符合 GM/T 0054-2018 等标准的要求

国密证书清单管理建议

  • 单独建账:国密证书和国际证书分开管理,但统一在同一个平台
  • 双证书关联:将同一域名/服务的国密证书和国际证书关联管理
  • 密评映射:将证书与密评要求中的密码应用点关联
  • 合规报告:自动生成密评所需的证书合规报告

证书清单管理的最佳实践

1. 建立证书所有权制度

每张证书必须有明确的"所有者"(Owner),负责:

  • 证书的日常监控和续期
  • 证书相关配置的正确性
  • 证书过期时的应急响应

2. 定期审计

  • 月度:审查即将过期的证书,提前安排续期
  • 季度:全面审计证书清单,清理无用证书
  • 年度:评估证书管理流程,更新安全策略

3. 自动化优先

将证书管理的每个环节尽可能自动化:

  • 自动发现 → 自动录入清单
  • 自动监控 → 自动告警
  • 自动续期 → 自动部署
  • 自动验证 → 自动报告

4. 与 CMDB 集成

将证书作为配置项纳入 CMDB(配置管理数据库),与服务器、应用、服务等资产关联。这样当服务器下线时,可以自动检查并清理关联的证书。

5. 制定证书策略

制定企业级的证书管理策略,明确:

  • 允许使用的 CA 列表
  • 允许使用的密钥算法和长度
  • 证书有效期要求
  • 证书续期的审批流程
  • 证书过期的应急响应流程

总结

证书资产发现与清单管理是 PKI 运维的基础。在没有完整清单的情况下,任何自动化续期、安全审计和合规检查都无从谈起。

对于企业而言,建立证书清单管理能力的关键步骤是:先"看见"(发现),再"管住"(清单),最后"自动化"(续期)。这个过程不是一蹴而就的,但每一步都能显著降低证书相关的安全风险。

在国密双证书环境下,挑战更为复杂,但也更为重要。因为国密证书直接关系到密评合规,一旦国密证书过期导致服务中断,不仅是技术问题,更是合规问题。

记住:你无法管理你不知道的东西。第一步,先知道你有哪些证书。

参考来源