3. CA 日志类型:访问日志、错误日志、审计日志、安全日志的区别与用途

咱们做 CA 运维的,每天打交道最多的就是日志。但说实话,我刚入行的时候,也分不清「访问日志」和「审计日志」到底有啥不同。直到有一次线上出了漏洞,我需要倒查半年数据,才发现——日志分类不清,查起来简直是大海捞针。

CA 系统里,日志按用途分四类:访问日志、错误日志、审计日志、安全日志。每类记录的信息不同,采集策略和存储周期也千差万别。下面我挨个讲清楚。

3.1 访问日志(Access Log)

说白了,谁在什么时候,通过什么方式,连了 CA 的哪个服务——全记在访问日志里。HTTP 请求、证书申请接口调用、OCSP 查询、CRL 下载,这些都是。

我见过最典型的一个坑:某天突然 CA 响应变慢,大家第一反应去看错误日志,啥也没发现。结果我翻了一下访问日志,好家伙,某个 IP 每秒发了几千次 OCSP 查询。这就是典型的 DDoS 前兆。嗯,从此以后,我养成了定期扫访问日志的习惯。

个人习惯:访问日志的保留周期可以短一些(30-90天),但一定要开实时监控。建议用 ELK 或者 Loki 做流式采集,发现问题马上报警。

3.2 错误日志(Error Log)

错误日志是最直接的问题定位工具。CA 模块启动失败、证书签名超时、数据库连接断开、权限校验不过——全都写在这里。

记得有一次,客户说证书签发总报 500 错误。我检查错误日志,发现一行:ERROR: CRL file not found。原来是 CRL 轮转脚本没跑通。如果没有错误日志,这问题排查起来得费半天劲。

注意:错误日志里的信息往往是“症状”而非“病因”。比如你看到database connection failed,别急着去修数据库,先看看是不是网络防火墙把端口封了。我在项目上吃过这个亏,白忙了俩小时。

错误日志的典型内容包括:

  • 时间戳 + 级别(ERROR / FATAL)
  • 模块名称 + 进程 ID
  • 错误码 + 英文描述
  • 异常堆栈(Java 环境常见)

3.3 审计日志(Audit Log)

审计日志是“谁做了什么事”的完整记录。它和安全日志有点像,但侧重点不同——审计日志偏操作行为,安全日志偏攻击与防御。

举个例子:管理员 A 在上午 10:00 吊销了一张证书。审计日志会记下操作员账号、操作时间、操作类型(吊销)、目标证书序列号。而安全日志可能只记录这个操作是否通过了身份校验、是否有异常 IP 接入。

我建议把审计日志的保留周期设长一些——至少一年。合规性检查时,审计日志就是你的救命稻草。有一次等保评测,评审专家翻出我三年前的一条日志,问“这个操作当时是谁批准的?” 好在我留了完整记录。

日志类型 典型事件 保留周期建议
审计日志 管理员登录、证书签发/吊销、策略修改、密钥备份 1~3年(法规要求有的更长)
安全日志 暴力破解尝试、异常 IP 访问、权限提升失败、证书路径校验失败 6个月~1年
访问日志 HTTP API 调用、OCSP/CRL 请求、Web 页面浏览 30~90天
错误日志 签名失败、数据库异常、配置错误、内存溢出 30天(重要事故保留更久)

3.4 安全日志(Security Log)

安全日志关注的是“有没有人在搞破坏”。它和审计日志记录的对象不同:审计日志记录的是合法操作,安全日志更倾向于异常尝试。

比如,你设置了一个 HSM PIN 重试次数限制。如果连续输错 3 次,安全日志会记一条 HSM PIN retry exceeded。再比如,客户端证书链校验失败,安全日志也会记录。

我曾经碰到一个案例:某客户 CA 突然停止响应证书申请。查安全日志发现,有一台外置 RA 服务器的证书过期了,导致中间双向认证反复失败。安全日志里完整记录了每一次认证失败的指纹和原因。没有它,我得一台台服务器排查证书状态。

关键区别一句话总结:

  • 访问日志告诉你“谁来过”
  • 错误日志告诉你“哪里出事了”
  • 审计日志告诉你“谁做了什么”
  • 安全日志告诉你“谁在尝试做坏事”

3.5 四类日志的关系图

下面这张图把四类日志的数据源、采集位置和典型流向画了出来。你可以理解为:CA 核心模块(签名引擎、HSM、数据库)产生原始事件,经过日志分类器后流入各自的通道。

CA 四类日志关系图 CA 日志分类与流向 CA 核心模块 访问日志 错误日志 审计日志 安全日志 日志采集建议 • 访问日志:使用通用日志采集器(Filebeat / Fluentd)实时发送到集中存储 • 错误日志:按模块单独采集,建议加告警规则(ERROR 级别就发告警) • 审计日志:必须签名保护,防止篡改;建议使用 WORM 存储 • 安全日志:与 SIEM 系统对接,做关联分析和攻击溯源

3.6 如何区分与选择采集策略

你可能会问:我到底该优先采集哪个?我的建议是:全采,但分级存储。

几种日志可以走不同的管道:

  • 访问日志:数据量大、价值低,走轻量级队列(Kafka / Redis)+ 冷存储。
  • 错误日志:数据量小、紧急度高,实时推送告警平台。
  • 审计日志:不可篡改+长期保留,用专用的审计日志库(比如 Rsyslog + 加密传输)。
  • 安全日志:建议入 SIEM,做关联分析。
曾经踩过的坑:我把审计日志和访问日志混在一起存,等保评审时被质疑“无法保证审计日志的完整性”。后来不得不单独抽出来搞签名链存储。记住:审计日志一定要有数字签名或者哈希链,否则出事了法官不认。

嗯,日志分类这事,说起来简单,真正落地的时候细节很多。但从概念上先把四类日志的目的捋清楚,后面选工具、定策略、建告警就有章可循了。