强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

CA 证书详解:从原理到实践的完整教程 / 第 1 章:CA 证书概述

第 1 章:CA 证书概述

理解 CA 证书是掌握整个 PKI(Public Key Infrastructure,公钥基础设施)体系的起点。本章将从最基础的概念出发,逐步建立对 CA 生态系统的完整认知。


1.1 什么是数字证书

数字证书(Digital Certificate)是网络世界中的"身份证"。它由受信任的第三方机构签发,用于证明一个公钥(Public Key)确实属于某个实体(个人、组织或服务器)。

证书的本质

一个 X.509 格式的数字证书包含以下核心信息:

字段英文名说明
主体Subject证书持有者的身份信息(域名、组织名等)
颁发者Issuer签发该证书的 CA 信息
有效期Validity证书的生效时间和过期时间
公钥Public Key证书持有者的公钥(用于加密或验证签名)
序列号Serial Number证书的唯一编号
签名算法Signature AlgorithmCA 用于签名的算法(如 SHA-256 with RSA)
扩展信息Extensions密钥用途、主体备用名称等附加信息

查看一张真实证书

# 查看百度的证书信息
echo | openssl s_client -connect www.baidu.com:443 -servername www.baidu.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -serial

输出示例:

subject= /CN=www.baidu.com
issuer= /C=US/O=DigiCert Inc/CN=DigiCert Secure Site Pro CN CA G3
notBefore=Jan 15 00:00:00 2025 GMT
notAfter=Feb 13 23:59:59 2026 GMT
serial=0A1B2C3D4E5F6789...

💡 提示-servername 参数用于指定 SNI(Server Name Indication),在一台服务器托管多个域名证书时必须使用。


1.2 什么是 CA(Certificate Authority)

CA,即证书颁发机构(Certificate Authority),是 PKI 体系中的核心角色。CA 的职责包括:

  1. 验证身份:核实申请者对域名或组织的所有权
  2. 签发证书:使用 CA 的私钥对证书进行数字签名
  3. 吊销证书:在证书被泄露或不再需要时发布吊销信息
  4. 维护信任:遵守行业标准和审计要求,维持浏览器/操作系统的信任

CA 的分级体系

                    ┌─────────────┐
                    │  根 CA (Root) │  ← 自签名,预装在操作系统/浏览器中
                    │  信任的起点   │
                    └──────┬──────┘
                           │ 签发
                    ┌──────▼──────┐
                    │ 中间 CA       │  ← 由根 CA 签发,可多层级
                    │ (Intermediate)│
                    └──────┬──────┘
                           │ 签发
              ┌────────────┼────────────┐
              ▼            ▼            ▼
        ┌──────────┐ ┌──────────┐ ┌──────────┐
        │ 终端证书  │ │ 终端证书  │ │ 终端证书  │
        │ (Leaf)   │ │ (Leaf)   │ │ (Leaf)   │
        │ example  │ │ foo.com  │ │ bar.com  │
        └──────────┘ └──────────┘ └──────────┘

1.3 根证书(Root Certificate)

根证书是信任链的锚点(Trust Anchor)。它是 CA 自己签发给自己的证书(自签名证书),预装在操作系统和浏览器的信任存储中。

主要根 CA 一览

CA 名称所属机构备注
DigiCert Global Root CADigiCert Inc2017 年收购 Symantec 证书业务
ISRG Root X1Let’s Encrypt非营利组织,推动 HTTPS 普及
GlobalSign Root CAGMO GlobalSign日本 GMO 集团旗下
Baltimore CyberTrust RootDigiCert(原 Verizon)微软信任的根 CA
AAA Certificate ServicesSectigo(原 Comodo)市场份额较大的商业 CA
CFCA EV ROOT中国金融认证中心中国金融行业根 CA

查看系统根证书

# Debian/Ubuntu:查看 ca-certificates 包含的根证书
ls /etc/ssl/certs/

# 查看某个根证书的详细信息
openssl x509 -in /etc/ssl/certs/DigiCert_Global_Root_CA.pem -noout -text

# 仅查看关键字段
openssl x509 -in /etc/ssl/certs/DigiCert_Global_Root_CA.pem \
  -noout -subject -issuer -dates
# RHEL/CentOS/Fedora
ls /etc/pki/ca-trust/extracted/pem/
# 或使用 update-ca-trust 工具
trust list | head -30

⚠️ 注意:根证书的私钥通常存储在 HSM(Hardware Security Module,硬件安全模块)中,物理隔离,几乎从不直接用于签发终端证书。


1.4 中间证书(Intermediate Certificate)

中间证书位于根证书和终端证书之间,起到缓冲保护作用。

为什么需要中间证书

场景只有根 CA 的做法有中间 CA 的做法
日常签发根私钥频繁使用,风险极高中间 CA 私钥负责签发,根私钥离线保护
私钥泄露根 CA 从信任存储中移除,所有证书失效仅吊销中间 CA,影响范围可控
审计成本每次签发都要严格审计中间 CA 可批量审计

中间证书的层级

Root CA
  └── Intermediate CA L1
        └── Intermediate CA L2
              └── Leaf Certificate

💡 提示:在实际部署中,通常有 1-2 层中间证书。层数越多,TLS 握手时传输的数据量越大。

检查中间证书

# 查看网站证书链
echo | openssl s_client -connect www.google.com:443 -servername www.google.com \
  -showcerts 2>/dev/null | grep -E "s:|i:"

# 输出示例:
#  0 s:CN=www.google.com
#    i:C=US, O=Google Trust Services, CN=WR2
#  1 s:C=US, O=Google Trust Services, CN=WR2
#    i:C=US, O=Google Trust Services LLC, CN=GTS Root R1

1.5 信任链(Chain of Trust)

信任链是 PKI 体系的核心机制。验证一张证书是否可信,需要沿着证书链逐级向上验证,直到找到一个被本地信任存储所信任的根证书。

验证过程

客户端持有:Root CA(信任锚点)
服务器发送:Leaf + Intermediate

验证步骤:
  1. 用 Intermediate 的公钥验证 Leaf 的签名         ✓
  2. 用 Root CA 的公钥验证 Intermediate 的签名       ✓
  3. Root CA 在本地信任存储中                         ✓
  ──▶ 信任链验证通过

用 OpenSSL 手动验证信任链

# 1. 下载服务器证书和中间证书
echo | openssl s_client -connect www.baidu.com:443 -servername www.baidu.com \
  -showcerts 2>/dev/null > baidu_chain.pem

# 2. 提取服务器证书(第一个证书)
sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' baidu_chain.pem | \
  sed -n '1,/END CERTIFICATE/p' > baidu_leaf.pem

# 3. 提取中间证书
sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' baidu_chain.pem | \
  sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/{/END CERTIFICATE/p}' | \
  head -1 > /dev/null  # 定位
awk '/BEGIN CERTIFICATE/{n++} n==2' baidu_chain.pem > baidu_intermediate.pem

# 4. 使用系统信任存储验证
openssl verify -CApath /etc/ssl/certs baidu_leaf.pem

# 5. 手动指定中间证书验证
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt \
  -untrusted baidu_intermediate.pem baidu_leaf.pem

📋 业务场景:企业内网服务如果缺少中间证书,浏览器虽然能通过根证书验证信任链,但会多一步中间证书下载(AIA fetch),增加 TLS 握手延迟。务必在服务端配置完整的证书链。


1.6 CA 生态系统

CA/Browser Forum

CA/Browser Forum(CA/B 论坛)是制定 CA 行业标准的核心组织,成员包括:

  • 浏览器厂商:Google、Mozilla、Apple、Microsoft
  • CA 机构:DigiCert、Let’s Encrypt、Sectigo 等
  • 其他利益相关方

CA/B 论坛制定的主要规范:

规范说明
Baseline RequirementsCA 基线要求(域名验证、密钥长度、有效期等)
EV Guidelines扩展验证证书的指导方针
Code Signing Baseline Requirements代码签名证书的基线要求

信任机制

                  ┌───────────────┐
                  │ 浏览器/操作系统 │
                  │ 信任策略管理   │
                  └───────┬───────┘
                          │ 预置信任
                    ┌─────▼─────┐
                    │  根证书存储  │
                    │ Root Store │
                    └─────┬─────┘
                          │
            ┌─────────────┼─────────────┐
            ▼             ▼             ▼
      ┌──────────┐ ┌──────────┐ ┌──────────┐
      │ DigiCert │ │ Let's    │ │ 其他受信  │
      │          │ │ Encrypt  │ │ 任 CA     │
      └──────────┘ └──────────┘ └──────────┘

各平台信任存储

平台信任存储管理方式
WindowsWindows Certificate Storecertmgr.msc / PowerShell
macOSKeychain Accesssecurity 命令 / 系统偏好设置
AndroidSystem CA Store(只读)+ User CA Store设置 → 安全 → 信任的凭据
iOSTrust Store设置 → 通用 → 关于 → 证书信任设置
FirefoxNSS(独立信任存储)about:preferences#privacy
Linuxca-certificates / p11-kitupdate-ca-certificates / update-ca-trust

🔒 安全:Firefox 自带独立的 NSS 信任存储,与系统存储不共享。这意味着在系统中添加的自定义 CA 证书不会自动被 Firefox 信任。从 Firefox 49 开始,可设置 security.enterprise_roots.enabled = true 让 Firefox 使用系统根证书。


1.7 CA 证书的生命周期

一张证书从申请到废弃,经历以下阶段:

申请 ──▶ 验证 ──▶ 签发 ──▶ 部署 ──▶ 监控 ──▶ 续期/吊销

各阶段详情

阶段说明工具/服务
申请生成 CSR(证书签名请求)OpenSSL, certbot
验证CA 验证域名/组织所有权DNS TXT, HTTP 文件, 邮件验证
签发CA 用私钥对证书签名CA 后端系统
部署将证书安装到 Web 服务器Nginx, Apache, 负载均衡器
监控跟踪证书过期时间Prometheus, cert-monitor
续期证书到期前重新签发certbot renew, ACME
吊销私钥泄露或不再需要时撤销CRL, OCSP

1.8 本章小结

概念关键要点
数字证书包含公钥和身份信息,由 CA 签名
CA负责验证身份、签发证书、维护信任
根证书信任链的起点,自签名,预装在系统中
中间证书保护根私钥,承担日常签发任务
信任链从终端证书逐级验证到根证书
CA 生态CA/B 论坛制定标准,浏览器/OS 管理信任存储

📚 扩展阅读


下一章第 2 章:工作原理 — 深入了解 TLS 握手、证书验证过程和 OCSP 机制。