企业内部 PKI 建设实战:从根 CA 到证书自动化管理

PKI 体系 · 2026-06-03 · 9 阅读

前言

几乎所有中大型企业都需要内部 PKI(公钥基础设施),但大多数团队的 PKI 建设都停留在"用 OpenSSL 随便生成几张证书"的水平。一个生产级的内部 PKI 需要考虑:根 CA 的安全隔离、中间 CA 的层级设计、证书生命周期管理、吊销机制、以及与现有身份系统的集成。

本文从零开始,搭建一个完整的内部 PKI 体系,涵盖:

  • 根 CA 的创建与离线保护
  • 中间 CA 的签发与策略配置
  • 证书模板设计(TLS 服务器、TLS 客户端、代码签名)
  • 自动化证书签发(基于 ACME 协议或自建 API)
  • CRL 和 OCSP 吊销服务
  • 与 LDAP/AD 的集成

一、架构设计

1.1 推荐的两层 CA 架构

CODE
根 CA(Root CA)
├── 中间 CA - 生产环境(Prod Issuing CA)
│   ├── TLS 服务器证书
│   ├── TLS 客户端证书(mTLS)
│   └── 代码签名证书
├── 中间 CA - 测试环境(Test Issuing CA)
│   └── 测试用证书
└── 中间 CA - 代码签名(Code Signing CA)
    └── 内部软件签名证书

为什么用两层而不是直接由根 CA 签发?

  • 安全性:根 CA 的私钥一旦泄露,整个 PKI 体系崩溃。根 CA 应离线保存,仅用于签发中间 CA 证书。
  • 灵活性:不同用途的证书由不同的中间 CA 签发,可以设置不同的策略和有效期。
  • 合规性:GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》建议 CA 分层管理。

1.2 根 CA 的安全要求

根 CA 是整个 PKI 的信任锚,必须满足:

  • 物理隔离:根 CA 服务器不接入生产网络,最好离线保存
  • HSM 保护:根 CA 私钥存储在硬件安全模块(HSM)中
  • 多人控制:使用 M-of-N 分割知识方案,需要多个管理员同时操作才能使用根 CA
  • 审计日志:所有根 CA 操作必须有完整的审计日志

二、根 CA 创建

2.1 环境准备

根 CA 的操作应在离线环境中完成(断开网络的虚拟机或物理机)。

BASH
# 创建工作目录
mkdir -p /root/ca/{root-ca,intermediate-ca,certs,crl,newcerts,private}
chmod 700 /root/ca/private

# 创建必要的文件
touch /root/ca/index.txt
echo 1000 > /root/ca/serial
echo 1000 > /root/ca/crlnumber

2.2 根 CA 配置文件

2.3 生成根 CA 密钥和证书

三、中间 CA 签发

3.1 创建中间 CA

3.2 用根 CA 签发中间 CA 证书

BASH
# 在根 CA 环境中执行
openssl ca -config /root/ca/root-ca.cnf \
    -extensions v3_intermediate_ca \
    -days 3650 -notext -md sha256 \
    -in /root/ca/intermediate-ca/csr/intermediate-ca.csr \
    -out /root/ca/intermediate-ca/certs/intermediate-ca.crt

# 验证
openssl verify -CAfile /root/ca/certs/root-ca.crt \
    /root/ca/intermediate-ca/certs/intermediate-ca.crt

3.3 创建证书链文件

BASH
cat /root/ca/intermediate-ca/certs/intermediate-ca.crt \
    /root/ca/certs/root-ca.crt > /root/ca/intermediate-ca/certs/ca-chain.crt

四、证书模板设计

4.1 TLS 服务器证书模板

4.2 TLS 客户端证书模板(mTLS)

4.3 代码签名证书模板

五、自动化证书签发

5.1 签发脚本

5.2 证书续期脚本

六、CRL 和 OCSP 吊销服务

6.1 证书吊销

BASH
# 吊销证书
openssl ca -config /root/ca/intermediate-ca/intermediate-ca.cnf \
    -revoke /root/ca/intermediate-ca/newcerts/bad-cert.crt

# 生成 CRL
openssl ca -config /root/ca/intermediate-ca/intermediate-ca.cnf \
    -gencrl -out /root/ca/intermediate-ca/crl/intermediate-ca.crl

# 查看 CRL
openssl crl -in /root/ca/intermediate-ca/crl/intermediate-ca.crl -text -noout

6.2 OCSP 响应器

七、与 LDAP/AD 集成

7.1 将证书发布到 LDAP

7.2 从 LDAP 验证证书

BASH
# 从 LDAP 获取证书
ldapsearch -H ldap://ldap.example.com \
    -D "cn=admin,dc=example,dc=com" -w password \
    -b "cn=server.example.com,ou=certificates,dc=example,dc=com" \
    userCertificate;binary

# 将 LDAP 中的证书与本地证书对比
openssl x509 -in /path/to/local.crt -noout -modulus | md5sum

八、生产环境注意事项

8.1 根 CA 的离线保护

  • 根 CA 私钥应存储在 HSM 或加密的 USB 设备中
  • 根 CA 服务器在完成中间 CA 签发后应关机离线保存
  • 恢复根 CA 需要至少 M 个管理员中的 N 个同时在场

8.2 中间 CA 的高可用

  • 中间 CA 数据库(index.txt)应定期备份
  • 考虑部署 CA 集群(主从模式),避免单点故障
  • 证书签发 API 应有认证和审计

8.3 证书生命周期管理

证书类型有效期续期阈值密钥长度
根 CA10-20 年不适用RSA-4096 / SM2
中间 CA5-10 年到期前 6 个月RSA-4096 / SM2
TLS 服务器1 年到期前 30 天RSA-2048 / SM2
TLS 客户端1 年到期前 30 天RSA-2048 / SM2
代码签名1-3 年到期前 60 天RSA-2048 / SM2

8.4 监控和告警

总结

内部 PKI 建设是一个系统工程,不仅仅是"生成几张证书"。一个生产级的 PKI 需要考虑:

  • 安全架构:根 CA 离线保护,中间 CA 分层管理
  • 证书策略:不同类型证书的模板和生命周期
  • 自动化:签发、续期、吊销的自动化流程
  • 集成:与 LDAP/AD、监控系统、告警系统的集成
  • 合规:满足 GB/T 39786-2021 等标准的要求
本文提供的配置和脚本可以直接用于搭建内部 PKI,但生产环境中还需要根据实际需求调整安全策略和流程。

参考来源

  • 国家密码管理局. GM/T 0034-2014《基于 SM2 密码算法的证书认证系统密码及其相关安全技术规范》. 2014.
  • 国家密码管理局. GM/T 0037-2014《证书认证系统检测规范》. 2014.
  • 国家密码管理局. GM/T 0038-2014《证书认证密钥管理系统检测规范》. 2014.
  • GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》. 2021.
  • RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile.