什么是 PKI

概述

PKI (Public Key Infrastructure,公钥基础设施) 是一整套围绕非对称加密建立的制度与技术,用来:

  • 标识与认证身份(谁是谁)
  • 分发与管理密钥/证书
  • 建立信任链(我为什么要相信这张证书)
  • 支持撤销与审计(证书被盗/失效如何处理)

它既包括技术构件(证书、算法、协议),也包含流程与治理(身份审核、吊销策略、审计留痕)。

例如通过浏览器打开baidu,在地址栏的左边会显示一个小锁,点击小锁,就有提示“连接安全”:

PKI体系介绍_PKI

但是打开某些网站,就会出现“不安全”的提示,即使是使用https的方式:

PKI体系介绍_PKI_02

这就是通过PKI体系,对一个web应用进行认证,以确定打开的web是否安全。

PKI体系中的概念及角色

在PKI体系中,核心概念包含如下几点:

  • 公钥/私钥:非对称加密的基石。私钥保密,公钥可分发。
  • 数字证书(X.509):把“公钥 + 身份信息 + 使用目的 + 有效期”等打包,并由签发者用其私钥签名。
  • 证书链:服务器证书 → 中间 CA → 根 CA,逐级签名构成“从叶子到信任锚”的路径。
  • 根 CA(Root CA):处于最顶层,其公钥(根证书)预装在操作系统/浏览器的信任库中。他是一个自签名证书。根 CA 的私钥至关重要,一旦泄露,整个信任体系就崩了。通常根 CA 离线保存,只在需要签发中间 CA 时使用。
  • 中间 CA(Intermediate CA):由根 CA 签发,用于日常证书签发,可以在线,方便操作。这样即使中间 CA 泄露,也只需要撤销该中间 CA,不会破坏整个体系。
  • CRL/ OCSP:证书吊销机制。CRL 是列表文件,OCSP 是在线查询。
  • EKU/Key Usage:证书可做什么(如 serverAuth、clientAuth 等)。
  • SAN(Subject Alternative Name):放域名/IP 的扩展字段;浏览器以 SAN 为准进行主机名匹配。

PKI体系认证过程

PKI的认证过程,就是如何验证一份数字证书是否合法、可信的过程。它依赖于证书链(Chain of Trust)和 CA 的签名。

下面通过用户用浏览器访问一个HTTPS网站,介绍认证流程:

服务器出示证书

网站服务器(如 https://example.com)在 TLS 握手时,会把自己的证书发给客户端(浏览器)。

证书里包含:

  • 公钥
  • 域名信息
  • 有效期
  • 签发 CA 信息
  • CA 的签名

证书内容包含的内容如下:

PKI体系介绍_证书认证_03

浏览器验证证书

客户端(如浏览器)在 TLS 握手时,会对服务器发送过来的证书进行如下检查,只有全部满足的证书才会标记为安全连接,其它都会提示“不安全”:

  • 域名匹配:检查证书中的SAN 是否与访问的域名一致。
  • 时间有效性:检查证书是否在有效期内。
  • 吊销状态:通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)检查证书是否被吊销。
  • 从服务器证书后开始,沿着证书链向上验证:网站证书 -> 中间CA(可能有多级) -> 根CA;每一级证书都由上一级CA签名,浏览器用上一级的公钥来验证本级的签名。证书链最终会追溯到一个根CA证书,只有在操作系统或浏览器的“受信任的根证书颁发机构”中的根CA才算认证通过。

从服务器证书到根CA的证书链如图:

PKI体系介绍_PKI_04

“受信任的根证书颁发机构”为操作系统或者浏览器信任的根证书,一般为操作系统或者浏览器自动添加,也可以人工添加或删除:

PKI体系介绍_签名证书_05

根证书的产生

在 PKI 体系 中,根 CA(Root CA) 是整个信任链的最顶端,地位相当于“最高法院”,所有下级的中间 CA(Intermediate CA)和最终颁发的证书都要依赖它的信任。服务器出示证书。

下面从技术角度和信任角度分析根证书产生的过程。

技术角度分析

与中间 CA 或普通证书不同,根 CA 没有上级机构给它签名。因此,根 CA 使用 自己的私钥 对包含自身公钥和身份信息的证书进行签名,这就是 自签名根证书。

根证书内容包含:根 CA 的 公钥,组织信息(如 "VeriSign Root CA"),有效期(一般很长,比如 20-30 年),签名算法(如 sha256WithRSAEncryption),根 CA 的自签名。

根私钥极度敏感,一旦泄露,整个信任体系都会崩溃。

同时,任何人或者机构都可以生成根CA,关键要看操作系统或者浏览器是否信任这个根CA

     信任角度分析

各大厂商都会维护受信任的根证书列表(Root Certificate Store),这个列表就是“信任的起点”。所以安装完Windows或者Linux操作系统,系统内就会自带一个“受信任的根证书颁发机构”,同时安装完浏览器,也会有浏览器自带的“受信任的根证书颁发机构”。在后续的认证过程,都以这个“受信任的根证书颁发机构”作为认证的起点。

商业 CA(比如 DigiCert、GlobalSign、Sectigo)需要向操作系统/浏览器厂商提交申请,证明自己符合安全标准。厂商会对 CA 进行严格审核,一旦审核通过,CA 的根证书会被打包到操作系统/浏览器的根证书库中,并通过系统更新/浏览器更新推送给用户。

如果某个 CA 发生重大事故(例如:颁发了错误的证书,根私钥泄露,内部管理混乱),操作系统/浏览器厂商会立即将它的根证书移出受信任列表,或者标记为“不用于 TLS”。