1. 证书基础认知:X.509、证书链与PKI核心概念
说实话,很多人一上来就让我配HTTPS、配mTLS,结果连证书长什么样都没搞清楚。我见过太多线上事故——证书过期、链没配全、根证书不信任……说白了,都是基础没打牢。
这一章,咱们就把地基夯实。你搞懂了X.509、证书链和PKI,后面批量管理才能玩得转。
1.1 X.509证书——你到底长什么样?
X.509是国际电信联盟(ITU-T)定义的一个标准。它规定了公钥证书的格式。现在用的基本都是X.509 v3版本。
我习惯把证书想象成「数字身份证」。你想想看,身份证上有姓名、照片、发证机关、有效期。证书也一样——它绑定了一个身份和一把公钥。
一个标准的X.509 v3证书包含以下核心字段:
| 字段 | 说明 | 我踩过的坑 |
|---|---|---|
| 版本号 | 目前主流是v3(值为2) | 有人用v1,不支持扩展,导致客户端校验失败 |
| 序列号 | CA签发的唯一编号 | 吊销时靠它,别搞重复了 |
| 签名算法 | 如SHA256-RSA、ECDSA | SHA1已被弃用,别用了 |
| 颁发者 | 签发该证书的CA名称 | 链拼接时,颁发者和主体必须对上 |
| 有效期 | notBefore ~ notAfter | 时间不同步?证书直接废了 |
| 主体 | 证书持有者身份 | CN和SAN别填错,否则浏览器报警 |
| 公钥 | RSA/ECC公钥信息 | 密钥长度别低于2048位 |
| 扩展 | v3核心,如SAN、密钥用法 | 缺了SAN,现代浏览器直接拒绝 |
核心要点:证书的本质是「公钥 + 身份信息 + CA的数字签名」。你信任CA,就信任这个证书。
1.2 证书链与信任模型——信任是怎么传递的?
你不可能信任每一个证书。那怎么办?信任是传递的。
证书链(Certificate Chain)就是一条信任路径:
- 根证书:自签名,信任锚点。浏览器/操作系统内置。
- 中间证书:由根CA签发,用于签发终端证书。
- 终端证书:你服务器上用的那个,也叫叶子证书。
我记得有一次帮客户排查问题,他们只配了终端证书,没配中间证书。结果安卓手机全报错,因为安卓不信任那个中间CA。嗯,这就是链不完整的问题。
下面这张图,我建议你多看两眼。它解释了信任是怎么一层层传递的:
我的建议:部署时永远把「终端证书 + 中间证书」拼接成一个文件。Nginx的ssl_certificate就指向它。别只放终端证书。
1.3 公钥基础设施(PKI)——谁在背后撑起这一切?
PKI不是某个软件,而是一套体系。它包括策略、硬件、软件、人员,用来管理密钥和证书的整个生命周期。
PKI的核心角色有这几个:
- CA(证书颁发机构):签发和吊销证书。核心中的核心。
- RA(注册机构):审核申请者身份,把审核结果告诉CA。
- VA(验证机构):提供证书状态查询,比如OCSP响应器。
- 证书库:存储证书和CRL的地方,通常是目录服务。
- 终端实体:使用证书的人或设备,比如你的Web服务器。
我曾经帮一家金融公司搭过内部PKI。他们之前用自签名证书,每个服务一套,管理全靠Excel。结果证书过期了没人知道,生产环境直接挂了。嗯,这就是没有PKI体系的代价。
PKI的核心流程,说白了就三件事:
- 注册与签发:生成密钥对 → 提交CSR → CA审核 → 签发证书。
- 使用与验证:TLS握手时出示证书 → 对方验证证书链 → 建立信任。
- 更新与吊销:证书到期前续期 → 私钥泄露时吊销 → 发布CRL/OCSP。
注意:私钥一旦泄露,证书必须立即吊销。别想着「先凑合用」。我曾经见过一个案例,私钥泄露后拖了3天才吊销,结果被中间人攻击,数据全丢了。
1.4 信任模型——你信谁,怎么信?
PKI里有几种常见的信任模型。我挑两个最常用的说说:
| 信任模型 | 原理 | 适用场景 | 我的看法 |
|---|---|---|---|
| 层次模型 | 一个根CA,下面挂中间CA,树状结构 | 互联网公开PKI、企业内部PKI | 最常用,管理清晰,根CA离线更安全 |
| 网状模型 | 多个CA互相交叉签名 | 联盟组织、跨公司合作 | 灵活性高,但信任路径复杂,容易出环 |
我个人更推荐层次模型。你想想看,根CA离线保存,中间CA在线服务。就算中间CA被攻破,根CA一吊销,整个子树就废了,但根CA本身没事。这就是分层的好处。
1.5 本章小结——你该带走什么?
- X.509证书 = 公钥 + 身份 + CA签名。v3扩展里的SAN字段,现代浏览器必看。
- 证书链 = 根CA → 中间CA → 终端证书。部署时链必须完整。
- PKI = 一套管理证书生命周期的体系。CA、RA、VA各司其职。
- 信任模型:层次模型最稳,根CA离线保存是铁律。