3. 公钥基础设施(PKI)简介:CA、根证书、中间证书、证书链
聊完了对称和非对称加密,咱们得聊聊信任这件事。
你想想看,我给你一个公钥,你怎么确定这个公钥真的是我的?万一中间有人换掉了呢?
公钥基础设施(PKI),就是来解决这个信任问题的。它不是一个软件,而是一套完整的管理框架。
这套框架定义了谁来发证书、怎么发、怎么验证、怎么撤销。说白了,就是给数字世界建立一套身份证体系。
我刚开始接触这个的时候,觉得挺绕的。什么根证书、中间证书、证书链,名字听着就头大。但搞懂了核心逻辑,其实很简单。
3.1 CA——证书的签发机构
CA,全称 Certificate Authority,也就是证书授权中心。
它是整个PKI里最值得信任的那个角色。CA的唯一工作,就是给别人签发数字证书。
你可以把CA理解为公安局。公安局给你发身份证,证明你是你。CA给你发数字证书,证明这个公钥属于你。
CA的三大核心职责:
- 身份验证——签发证书前,必须核实申请人的真实身份
- 证书签发——用CA自己的私钥,对申请人的公钥和身份信息签名
- 证书管理——维护证书有效期,处理证书吊销
我早年做项目时,自己建过一个内部CA。刚开始图省事,直接用根证书签所有服务器证书。后来线上出了故障,想把某个服务踢出去,才发现根证书一旦泄露,所有证书都得重签……那个教训太深刻了。
3.2 根证书——信任的起点
根证书,是CA证书链里最顶层的那一个。它自己签自己,所以也叫自签名证书。
“那它凭什么被信任?”你可能会问。
好问题。根证书之所以被信任,是因为它被预装在你的操作系统或浏览器里了。
Windows、macOS、各大浏览器,都内置了一批公认的根证书。这些根证书就是信任的锚点。
注意:根证书的私钥是整个PKI里最敏感的东西。一旦根私钥泄露,攻击者可以伪造任何由该CA签发的证书。
我见过的安全做得好的公司,根私钥都存在离线机器上,平时不通网,需要时得两个人分别输入密码才能解锁。
3.3 中间证书——承上启下的安全层
直接用根证书签每一个终端证书,其实很危险。
你想啊,根证书签发一次,私钥就得被调用一次。调用次数越多,泄露风险越大。
所以现代PKI引入了中间证书(Intermediate Certificate)。
根证书 → 中间证书 → 终端实体证书,三层结构是目前的主流做法。
这样做的好处很直观:
- 根证书私钥——常年锁在保险柜里,几乎不碰
- 中间证书私钥——负责日常签发,即使泄露也能单独吊销
- 终端证书——就是你的网站、服务器、客户端用的具体证书
分层之后,风险被隔离了。就算中间证书出问题,换一个新的就行,根证书纹丝不动。
3.4 证书链——信任的传递
证书链,就是一条信任的传递路径。
我们从根证书出发,经过中间证书,最后到终端证书。每个上级证书都签名了它的下级证书。
验证的时候,系统会沿着这条链向上查,直到遇到一个内置的根证书。
证书链的典型结构(PEM格式):
-----BEGIN CERTIFICATE-----
// 终端服务器证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
// 中间证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
// 根证书(可选,通常不包含)
-----END CERTIFICATE-----
很多新手配置HTTPS时,只上传了服务器证书,忘了中间的证书。结果浏览器提示“证书不受信任”。
我排查过好几次这种问题。客户端收到证书后,找不到中间证书,链断了,信任建立不起来。
| 层级 | 角色 | 私钥安全要求 | 有效期 | 自签名 |
|---|---|---|---|---|
| 根证书 | 信任锚点 | 极高(离线保管) | 10-20年 | 是 |
| 中间证书 | 承上启下 | 高(在线但独立) | 5-10年 | 否 |
| 终端证书 | 实际使用 | 一般(随用随配) | 1-2年 | 否(自签名证书除外) |
一句话总结:
根证书定信任,中间证书传信任,终端证书用信任。
你信任根证书,所以信任它签发的中间证书,进而信任中间证书签发的服务器证书。
这张图展示的就是完整的证书链结构。根在最上面,中间在中间,终端在底下。
客户端(比如浏览器)收到你的服务器证书时,会先看是谁签发的。如果是中间证书签的,它再去找中间证书,看中间证书是谁签的。一路追溯到根证书。最后发现根证书在自己的信任列表里,就认为整个链条可信。
配置 mTLS 时,服务端得把完整的证书链发给客户端,不能只发最末端的服务器证书。
我曾经遇到过一个坑:客户端验证总是报错,查了半天才发现服务端没把中间证书发过来。客户端链条断了,信任自然建立不起来。
3.5 自签名证书在PKI中的位置
咱们这门课讲的是自签名证书。在PKI体系里,自签名证书就是“自己当自己的CA”。
你不是去公开CA申请证书,而是自己生成根证书,自己给自己签发。
自签名证书的典型应用场景:
- 内部开发环境——测试HTTPS、mTLS功能
- 企业内网通信——微服务之间用mTLS加密
- IoT设备——设备证书由厂商自己的CA签发
- 学习和实验——理解PKI原理的最佳方式
它的好处是灵活,完全自己掌控。但代价是,你的自签名根证书不会被系统内置信任,所以所有用这个根证书签发的终端证书,都需要你在客户端手动导入根证书。
说白了就是,你得自己告诉客户端:“喂,我家的根证书是可信的。”
生产环境建议用公开CA签发的证书。自签名证书只适合内部实验、开发和测试。尤其是mTLS的场景,如果做对外服务,客户端不可能手动导入你的根证书。
好了,这就是PKI的大致框架。CA负责发证,根证书是信任的起点,中间证书是安全隔离层,证书链把信任一级一级传下去。
你回头看PKI这三字——公钥基础设施。其实核心就一句话:用一套可信的体系,把公钥绑定到真实的实体上。
理解了这个,后面我们做自签名证书,心里就有底了。