1. PKI 基础概念:公钥基础设施、数字证书、证书颁发机构

说到 PKI,很多人第一反应就是「哦,证书那个东西」。其实没那么简单。PKI 是一整套体系,包括硬件、软件、人和策略。我早年刚接触这行的时候,也觉得 PKI 就是个发证书的工具,后来踩了几个坑才明白,它本质上解决的是网络世界里「你是谁」和「你说了算不算」的问题。

你想想看,互联网上两个人要通信,怎么保证对方不是假冒的?怎么保证消息没被篡改?PKI 就是干这个的。它提供了一套信任机制,让互不相识的双方能建立安全通道。

核心要点: PKI 不是单一技术,而是一个包含证书颁发、密钥管理、策略约束的基础设施。没有 PKI,现在的电子商务、网上银行、电子邮件安全都玩不转。

1.1 公钥基础设施到底是什么

说白了,PKI 就是一套「信任管理」的框架。它包含了几个核心组件:

  • 证书颁发机构(CA): 负责签发和管理数字证书,是整个体系的信任锚点。
  • 注册机构(RA): 负责验证申请者的身份,RA 确认后 CA 才签发证书。很多中小型场景下 CA 和 RA 是合在一起的。
  • 证书库: 存放已签发证书和证书吊销列表(CRL)的地方,一般用 LDAP 目录或 HTTP 服务器。
  • 密钥备份与恢复系统: 我见过不少公司把私钥丢了,结果整个加密数据都打不开。所以这个组件虽然不常被提起,但真出事的时候特别要命。

我个人习惯把 PKI 比作现实世界的「身份证系统」。CA 就是公安局,负责发身份证;RA 是派出所,核实你是不是本人;证书就是身份证本身;而证书库就是全国人口信息库。这个类比虽然不完美,但用来入门理解足够了。

1.2 数字证书:网络世界的身份证

数字证书的核心作用是把一个公钥和某个实体(个人、服务器、组织)绑定起来。它遵循 X.509 标准,这东西是国际电信联盟(ITU)定义的,现在用的最多的是 X.509 v3 版本。

字段 说明 我在项目中踩过的坑
版本号 标识 X.509 版本号,v1、v2、v3 v2 基本没人用了,直接上 v3 就对了
序列号 CA 签发的唯一编号 曾经遇到过序列号重复的奇葩情况,后来发现是 CA 软件 bug
签名算法 CA 签名时使用的算法,比如 SHA256-RSA 别用 SHA1,早就被攻破了,我亲眼见过 SHA1 证书被浏览器报红
颁发者 签发该证书的 CA 名称 根证书和中间证书的颁发者字段要仔细核对,链条不对谁都救不了
有效期 证书生效和失效时间 我最怕浏览器突然弹「证书已过期」,每次排查都是一身汗
主体 证书持有者的信息,比如域名或组织名 Common Name(CN)和 Subject Alternative Name(SAN)的坑我后面会详细说
公钥 持有者的公钥信息 密钥长度建议至少 2048 位,1024 位的现在基本不推荐了
扩展字段 v3 新增的功能,包含密钥用法、基础约束等 Key Usage 和 Extended Key Usage 写错了,证书可能就用不了

看一个实际的证书结构,用 OpenSSL 就能查看:

openssl x509 -in example.crt -text -noout

这条命令会把证书所有字段解析出来。我刚入行的时候,最喜欢用这条命令来检查证书对不对,现在也经常这么干。

注意: 证书的「主体公钥信息」字段里存的是公钥,而私钥是不能放进证书里的。我曾经帮一家公司排查问题,发现他们居然把私钥也写进了证书扩展字段里——那不就等于把银行卡密码写在了身份证上吗?

1.3 证书颁发机构:信任的起点

CA 是整个 PKI 体系的核心。它负责签发、管理和撤销数字证书。CA 自己也有一个证书,叫「自签名证书」,也就是根证书。浏览器和操作系统里内置的那些根证书,就是各大 CA 的自签名证书。

CA 的信任是链式的。以我们常见的 Web 场景为例:

  • 根 CA: 信任的起点,自签名,一般离线保存。我记得有一次帮客户搭私有 PKI,根 CA 的私钥我用硬件安全模块(HSM)锁起来了,物理上断网,生怕被偷了。
  • 中间 CA: 受根 CA 签发,用于分担风险。根 CA 一般不直接签发终端证书,而是签发几个中间 CA,由中间 CA 去签发用户证书。
  • 终端证书: 最终给服务器或个人用的证书,由中间 CA 签发。

这样做的好处很明显——如果中间 CA 出了问题,吊销它就行,不影响根 CA。我待过的一家公司,曾经因为中间 CA 的私钥被泄露,整个中间 CA 证书都被吊销了,好在根 CA 没事,重新签发了一套中间证书就搞定了。

CA 的操作主要分几个阶段:证书申请、身份验证、证书签发、证书分发、证书续期、证书吊销。每个阶段都有对应的日志,这些日志就是我们后面要做 ELK 监控的核心数据来源。

经验之谈: 做 PKI 日志监控,一定要把 CA 的审计日志、证书申请日志、证书吊销日志这三个来源抓好。我早期做监控时,只抓了证书过期日志,结果忽略了证书被恶意申请的告警,差点出大事。

1.4 一张图看懂 PKI 核心架构

下面这张图是我自己总结的 PKI 核心流程。从用户开始,到 RA 验证,再到 CA 签发,最后把证书投入使用。整个流程就是一条信任链:

PKI 核心架构与信任链 PKI 核心架构与信任链 用户 / 申请者 注册机构 (RA) 证书颁发 (CA) 数字证书 证书库 / 证书吊销列表 (CRL) 信赖方 / 浏览器 信任链说明: 根 CA → 中间 CA → 终端证书,每一级都由上级签发。信赖方(浏览器)验证整条链是否指向预置的根证书。

这个流程里,每一步都会产生日志:用户申请有申请日志,RA 验证有审核日志,CA 签发有签发日志,证书库更新有同步日志。嗯,这些日志就是我们后面做 ELK 监控的原材料。你想,如果有人在 CA 上签了一个不该签的证书,而没有日志记录,那会是什么后果?

关键认知: PKI 的安全不是靠「藏着掖着」,而是靠「透明可审计」。日志就是审计的基础。我经历过一次安全事件,对方伪造了证书,但 CA 日志里留下了清晰的签发记录,最终帮助我们锁定了问题原因。从那以后,我对 PKI 日志监控的重视程度可以说是拉满了。

好了,这一章我们聊了 PKI 的核心概念。公钥基础设施是一个体系,数字证书是这个体系里的身份证,CA 是签发身份证的机构。三者的关系,其实就是「体系 - 凭证 - 颁发」的三角关系。明白了这些,后续搭建日志监控的时候,你才能知道哪些日志是关键的,哪些日志可以忽略。