1. PKI基础回顾:数字证书、CA中心、证书链的概念与作用
各位同学好。咱们这门课讲的是CRL和OCSP,说白了就是怎么查证书有没有被吊销。但在动手之前,我觉得有必要先把PKI的基础再过一遍。你可能会说:“这些我都知道啊。”——嗯,我理解。但我在项目里见过太多人,就是因为基础概念没吃透,结果排查证书问题时绕了一大圈。
所以这一章,咱们把数字证书、CA中心、证书链这三个东西彻底捋清楚。我保证,不会讲成教科书式的枯燥定义,而是结合我踩过的坑来讲。
1.1 数字证书:到底是个什么东西?
数字证书,很多人叫它“证书”或“公钥证书”。它本质上就是一个电子身份证。
你想想看,现实生活中你拿身份证证明“我是我”。在网络上,服务器拿证书证明“我是合法的服务器”。证书里绑定了公钥和身份信息,并且由权威机构做了数字签名。
一个标准的X.509 v3证书,里面包含哪些关键字段?我列个表,你对照着看:
| 字段 | 含义 | 我的备注 |
|---|---|---|
| 版本号 (Version) | 通常是v3 (值为2) | v3才支持扩展项,比如CRL分发点 |
| 序列号 (Serial Number) | CA分配给证书的唯一编号 | 吊销时就是靠这个号来找证书 |
| 签名算法 (Signature Algorithm) | 如SHA256WithRSA | CA用这个算法给证书签名 |
| 颁发者 (Issuer) | 签发该证书的CA名称 | DN格式,比如CN=MyCA, O=MyOrg |
| 有效期 (Validity) | notBefore 和 notAfter | 过期证书直接不信任,不用查吊销 |
| 主体 (Subject) | 证书持有者的身份 | 服务器证书通常是域名 |
| 公钥 (Subject Public Key Info) | 持有者的公钥 | 这是证书最核心的价值 |
| 扩展项 (Extensions) | v3新增的附加信息 | CRL分发点、OCSP响应器地址都在这里 |
openssl x509 -in cert.pem -text -noout 来查看证书的完整内容。尤其是扩展项里的 CRL Distribution Points 和 Authority Information Access,这两个字段直接决定了客户端去哪里查吊销状态。后面几章我们会反复用到。
1.2 CA中心:谁来发证书?
CA(Certificate Authority),就是证书颁发机构。它负责签发、管理和吊销证书。
CA中心不是随便谁都能当的。它必须被客户端信任。怎么信任?客户端的信任存储区里预置了CA的根证书。比如你的浏览器里就内置了几十个全球公认的根CA证书。
CA分两种:
- 公共CA:比如DigiCert、Let's Encrypt。给互联网上公开的网站发证书。需要付费或通过自动化验证。
- 私有CA:企业内部自己搭的。比如用OpenSSL或微软AD CS搭建。只给内部系统用,不对外公开。
我记得有一次帮一家金融客户排查问题。他们的内部系统之间做TLS双向认证,但客户端总是报“证书不可信”。查了半天,发现是客户端没有导入私有CA的根证书。你看,CA的信任关系一旦断了,整个PKI就玩不转。
1.3 证书链:信任是怎么传递的?
证书链,也叫信任链。它解决了一个问题:我怎么相信一张证书是合法的?
答案很简单:一层一层往上查,直到找到一个你信任的根。
典型的证书链有三层:
- 根证书 (Root CA):自签名的。它是信任的锚点。客户端必须预置它。
- 中间证书 (Intermediate CA):由根CA签发。它负责给终端实体发证书。这样做的好处是,根CA可以离线保存,更安全。
- 终端实体证书 (End Entity / Leaf):就是服务器或客户端实际使用的证书。由中间CA签发。
验证过程是这样的:
- 客户端拿到服务器证书(叶子证书)。
- 检查签发者是谁,找到中间CA证书。
- 用中间CA的公钥验证叶子证书的签名。
- 再检查中间CA的签发者,找到根CA证书。
- 用根CA的公钥验证中间证书的签名。
- 根CA是自签名的,客户端信任它(因为预置了)。
- 验证通过,信任建立。
这个过程,我画了一张图,你一看就明白:
在实际部署中,服务器需要把完整的证书链(叶子证书 + 中间证书)发给客户端。如果只发叶子证书,客户端找不到中间证书,验证就会失败。我遇到过好几次,运维人员只配置了服务器证书,没配中间证书,结果手机App死活连不上——这就是典型的“证书链不完整”问题。
1.4 为什么证书链这么重要?
证书链的设计,解决了几个关键问题:
- 安全性:根CA可以离线保存,即使中间CA被攻破,根CA还在,可以吊销中间CA证书,重新签发。
- 灵活性:一个根CA可以签发多个中间CA,每个中间CA负责不同的场景(比如一个给Web服务器用,一个给代码签名用)。
- 可扩展性:全球几十亿张证书,不可能都由一个根CA直接签发。分层结构让CA体系可以无限扩展。
核心要点: 证书链的本质是信任的传递。从你信任的根开始,一层一层签名下去,最终信任叶子证书。任何一环断了,信任就不成立。而CRL和OCSP,就是在验证过程中额外加的一道保险——检查证书有没有被提前吊销。