16.2. 管理日志
证书系统子系统日志文件记录了与该特定子系统实例中操作相关的事件。对于每个子系统,针对安装、访问和 Web 服务器等问题保留不同的日志。
所有子系统都有类似的日志配置、选项和管理路径。
16.2.1. 日志设置概述
配置日志的方式可能会影响证书系统性能。例如,日志文件轮转会变得太大,这会减慢子系统性能。本节介绍证书系统子系统记录的不同类型的日志,并涵盖日志文件轮转、缓冲日志记录和可用日志级别等重要概念。
16.2.1.1. 正在记录的服务
到日志文件的证书系统日志消息的所有主要组件和协议。表 16.1 “服务日志” 列出默认日志记录的服务。要查看特定服务记录的消息,请相应地自定义日志设置。详情请查看 第 16.3.1 节 “在控制台中查看日志”。
Service | 描述 |
---|---|
ACL | 日志与访问控制列表相关的事件。 |
管理 | 记录与管理活动相关的事件,如控制台和实例之间的 HTTPS 通信。 |
All | 记录与所有服务相关的事件。 |
身份验证 | 使用身份验证模块记录与活动相关的事件。 |
证书颁发机构 | 记录与证书管理器相关的事件。 |
数据库 | 记录与内部数据库相关的事件。 |
HTTP |
记录与服务器 HTTP 活动相关的事件。请注意,HTTP 事件实际记录到属于证书系统附带的 Apache 服务器的错误日志,以提供 HTTP 服务。
|
密钥恢复授权 | 记录与 KRA 相关的事件。 |
LDAP | 日志与 LDAP 目录相关的事件,用于发布证书和 CRL。 |
OCSP | 记录与 OCSP 相关的事件,如 OCSP 状态 GET 请求。 |
其他 | 记录与其他活动相关的事件,如命令行工具和其他进程。 |
请求队列 | 记录与请求队列活动相关的事件。 |
用户和组 | 记录与实例的用户和组相关的事件。 |
16.2.1.2. 日志级别(Message Categories)
证书系统服务记录的不同事件由日志级别决定,这有助于识别和过滤事件。表 16.2 “日志级别和清理日志消息” 中列出了不同的证书系统日志级别。
日志级别通过数字表示服务器要执行的日志级别的详细程度。
较高的优先级级别意味着较少的详细信息,因为仅记录高优先级的事件。
日志级别 | 消息类别 | 描述 |
---|---|---|
0-1 | Tracing | 这些消息包含精细的调试信息。此级别不应定期使用,因为它可能会影响性能。 |
2-5 | 调试 | 这些消息包含调试信息。不建议使用这个级别,因为它会生成太多的信息。 |
6-10 | informational | 这些消息提供有关证书系统状态的一般信息,包括 证书系统初始化完成 和 请求成功操作的状态消息。 |
11-15 | 警告 | 这些消息只是警告,不表示服务器正常操作中的任何故障。 |
> 15 | 失败 | 这些消息指示阻止服务器正常运行的错误和失败,包括执行证书服务操作失败(用户身份验证 失败或 证书撤销)的故障,以及可能导致不可撤销的错误(服务器无法通过来自客户端的同一频道发送其处理的请求)。设置以上 15 的级别将最小化日志,因为仅记录失败。 |
16.2.1.3. 缓冲和不缓冲的日志记录
如果配置了缓冲的日志,服务器会为对应的日志创建缓冲区,并尽可能将消息保存到缓冲区中。只有在出现以下条件之一时,服务器才会将信息清除到日志文件:
- 缓冲区已满。当缓冲区大小等于或大于 bufferSize 配置参数指定的值时,缓冲区已满。此参数的默认值为 512 KB。
- 已达到缓冲区的冲刷间隔。当最后一次缓冲区刷新等于或大于 flushInterval 配置参数指定的值时,达到 flush 间隔。此参数的默认值为 5 秒。
- 从控制台读取当前日志时。服务器在查询当前日志时检索最新的日志。
如果为未缓冲的日志配置了服务器,服务器会在生成到日志文件中时清除消息。由于服务器每次生成消息时执行 I/O 操作(写入日志文件),因此配置服务器以提高性能。
第 16.2.2 节 “在控制台中配置日志” 中描述了设置日志参数。
16.2.1.4. 日志文件轮转
- 达到相应文件的大小限制。对应的日志文件的大小等于或大于 maxFileSize 配置参数指定的值。此参数的默认值为 100 KB。
- 达到相应文件的年龄限制。对应的日志文件等于或早于 rolloverInterval 配置参数指定的间隔。此参数的默认值为 2592000 秒(每 30 天)。
注意
将这些参数都设置为 0 可有效地禁用日志文件轮转。
轮转日志文件时,使用带附加时间戳的文件的名称命名旧文件。附加的时间戳是一个整数,表示轮转相应活跃日志文件的日期和时间。日期和时间具有 YYYYMMDD (年、月、天)和 HHMMSS (小时、分钟、秒)。
注意
证书系统不提供归档日志文件的任何工具或工具。
证书系统提供了一个命令行工具 signtool,它将在归档日志文件作为篡改检测方式签名。详情请查看 第 16.2.4.5 节 “签名日志文件”。
签名日志文件是签名的审计日志功能的替代选择。签名的审计日志会创建使用子系统签名证书自动签名的审计日志。有关签名审计日志的详情,请查看 第 16.2.4.3 节 “在控制台中配置签名的审计日志”。
轮转的日志文件不会被删除。
16.2.2. 在控制台中配置日志
日志可以通过子系统控制台和子系统的
CS.cfg
文件进行配置。也可以通过控制台或配置文件创建专用日志,如签名的审计日志和自定义日志。
可以通过子系统控制台为 CA、OCSP、TKS 和 KRA 子系统配置审计日志。TPS 日志仅通过配置文件配置。
- 在 Configuration 选项卡的导航树中,选择 Log。
- Log Event Listener Management 选项卡列出了当前配置的监听程序。要创建新日志实例,请点 Select Log Event Listener Plug-in Implementation 窗口中的列表中选择模块插件。,然后从
- 设置或修改 Log Event Listener Editor 窗口中的字段。不同的参数列在 表 16.3 “日志事件 Listener 字段” 中。
字段 | 描述 |
---|---|
日志事件 Listener ID | 提供标识监听程序的唯一名称。名称可以有字母的任意组合(A 到 zZ)、数字(0 到 9)、下划线(_)和连字符(-),但它不能包含其他字符或空格。 |
type | 提供日志文件的类型。事务 记录审计日志。 |
enabled | 设置日志是否活跃。只有启用的日志才会记录事件。该值可以是 true 或 false。 |
level | 在文本字段中设置日志级别。必须在字段中输入该级别,没有选择菜单。选择是 Debug、info、warning、Failed、Misconfiguration、Catastrophe 和 Security。 如需更多信息,请参阅 第 16.2.1.2 节 “日志级别(Message Categories)”。 |
fileName | 将完整路径(包括文件名)提供给日志文件。子系统用户应具有文件的读/写权限。 |
bufferSize | 为日志设置缓冲区大小(KB)。缓冲区达到这个大小后,缓冲区的内容将被清除并复制到日志文件中。默认大小为 512 KB。有关缓冲的日志的详情,请参考 第 16.2.1.3 节 “缓冲和不缓冲的日志记录”。 |
flushInterval | 设置缓冲区内容被清除并添加到日志文件中的时间。默认间隔为 5 秒。 |
maxFileSize | 以 KB 为单位设置日志文件的大小,然后再轮转日志文件。达到这个大小后,文件将复制到轮转的文件,日志文件将启动新的文件。有关日志文件轮转的详情,请参考 第 16.2.1.4 节 “日志文件轮转”。默认大小为 2000 KB。 |
rolloverInterval | 设置服务器轮转活跃日志文件的频率。可用选项包括每小时、每天、每周、每月和年。默认值为 monthly。如需更多信息,请参阅 第 16.2.1.4 节 “日志文件轮转”。 |
16.2.3. 在 CS.cfg 文件中配置日志
有关如何通过编辑
CS.cfg
文件来配置日志的说明,请参阅 Red Hat Certificate System Planning、安装和部署指南中的 CS.cfg 文件中的配置日志 部分。
16.2.4. 管理审计日志
审计日志包含已设置为可记录事件的事件的记录。如果 logSigning 属性设置为 true,则审计日志会使用属于服务器的日志签名证书进行签名。审核员可以使用此证书来验证日志没有被篡改。
默认情况下,常规审计日志位于带有其他类型的日志的
/var/log/pki/instance_name/subsystem_name/
目录中,而签名的审计日志被写入 /var/log/pki/instance_name/subsystem_name/signedAudit/
。可以通过修改配置来更改日志的默认位置。
签名的审计日志会创建一个日志记录系统事件,并从潜在的事件列表中选择事件。启用后,签名的审计日志会记录一组有关所选事件活动的详细信息。
当实例首次创建时,会默认配置签名的审计日志,但可以在安装后配置签名的审计日志。(请参阅 第 16.2.4.2 节 “安装后启用签名的审计日志”。) 也可以在配置后编辑配置或更改签名证书,如 第 16.2.4.3 节 “在控制台中配置签名的审计日志” 所述。
16.2.4.1. 审计事件列表
有关证书系统中的审计事件列表,请参阅 附录 E, 审计事件。
16.2.4.2. 安装后启用签名的审计日志
当实例首次使用
pki_audit_group
部署参数和 pkispawn 命令时,可以默认启用签名的审计日志。但是,如果在创建实例时没有配置签名的审计日志,可通过将审计日志目录的所有权重新分配给审核员系统用户组来启用它们。
- 停止实例:
# pki-server stop instance_name
- 将签名的审计日志目录的组所有权设置为 PKI 审核员操作系统组,如
pkiaudit
。这允许 PKI 审核员组中的用户具有对signedAudit
目录所需的读取访问权限,以验证日志文件上的签名。除了证书系统用户帐户 pkiuser外,用户没有对这个目录中日志文件的写入权限。chgrp -R pkiaudit /var/log/pki/instance_name/subsystem_name/signedAudit
- 重启实例:
# pki-server start instance_name
16.2.4.3. 在控制台中配置签名的审计日志
当实例首次创建时,会默认配置签名的审计日志,但可以在配置后编辑配置或更改签名证书。
注意
在文件系统中为签名的审计日志提供足够空间,因为它们可能较大。
通过设置 logSigning 参数 来启用 并提供用于签署日志的证书 nickname,将日志设置为签名的审计日志。在第一次配置子系统时会创建一个特殊的日志签名证书。
只有具有审核员权限的用户才能访问和查看签名的审计日志。审核员可以使用 auditVerify 工具来验证签名的审计日志没有被篡改。
在配置了子系统时,会创建并启用签名的审计日志,但需要额外的配置才能开始创建和签名审计日志。
- 打开控制台。注意要通过编辑
CS.cfg
文件来创建和配置审计日志,请参阅 Red Hat Certificate System Planning, Installation, and Deployment Guide 中的 CS.cfg 文件中的配置日志。 - 在 Configuration 选项卡的导航树中,选择 Log。
- 在 Log Event Listener Management 选项卡中,选择 SignedAudit 条目。
- 点。
- 在 Log Event Listener Editor 窗口中必须重置三个字段。
- 填写 signedAuditCertNickname。这是用于为审计日志签名的证书的别名。在配置了子系统时会创建一个审计签名证书,它有一个别名,如 auditSigningCert cert-instance_name subsystem_name。注意要获取审计签名证书 nickname,请使用 certutil 列出子系统的证书数据库中的证书。例如:
certutil -L -d /var/lib/pki-tomcat/alias Certificate Authority - Example Domain CT,c, subsystemCert cert-pki-tomcat u,u,u Server-Cert cert-pki-tomcat u,u,u auditSigningCert cert-pki-tomcat CA u,u,Pu
- 将 logSigning 字段设置为 true 以启用签名的日志记录。
- 设置记录到审计日志的任何事件。附录 E, 审计事件 列出可日志的事件。日志事件用逗号分开,没有空格。
- 为日志设置任何其他设置,如文件名、日志级别、文件大小或轮转计划。注意默认情况下,常规审计日志位于带有其他类型的日志的
/var/log/pki/instance_name/subsystem_name/
目录中,而签名的审计日志被写入/var/log/pki/instance_name/subsystem_name/signedAudit/
。可以通过修改配置来更改日志的默认位置。 - 保存日志配置。
启用签名的审计日志记录后,通过创建用户并将该条目分配给 auditor 组来分配审核员用户。auditor 组的成员是唯一可以查看和验证签名的审计日志的用户。有关设置审核员的详情,请查看 第 15.3.2.1 节 “创建用户”。
审核员可以使用 audit Verify 工具验证 日志。有关使用
此工具的详情,请查看 auditVerify (1)
手册页。
16.2.4.4. 处理审计日志失败
有些事件可能会导致审计日志功能失败,因此无法将事件写入日志中。例如,当包含审计日志文件的文件系统已满或者日志文件的文件权限被意外更改时,审计日志记录可能会失败。如果审计日志记录失败,证书系统实例将以以下方式关闭。
- servlet 被禁用,也不会处理新的请求。
- 所有待处理的和新请求都会被终止。
- 子系统已关闭。
发生这种情况时,管理员和审核员应当与操作系统管理员一起工作,以解决磁盘空间或文件权限问题。当 IT 问题得到解决时,审核员应确保最后的审计日志条目已被签名。如果没有,则应手动签名(第 16.2.4.5 节 “签名日志文件”)、存档和删除来保留它们,以防止以后进行审核验证失败。完成此操作后,管理员可以重新启动证书系统。
16.2.4.5. 签名日志文件
这是签名的审计日志功能的替代选择。签名的审计日志功能会创建自动签名的审计日志 ; 此工具手动签署归档的日志。有关签名审计日志的详情,请查看 第 16.2.4.3 节 “在控制台中配置签名的审计日志”。
对于签名日志文件,请使用名为 Signing Tool (signtool)的命令行工具。有关这个工具的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/。
实用程序使用子系统实例的证书、密钥和安全模块数据库中的信息。
作为具有审核员权限的用户,使用 signtool 命令为日志目录签名:
signtool -d secdb_dir -k cert_nickname -Z output input
- secdb_dir 指定包含 CA 的证书、密钥和安全模块数据库的目录的路径。
- cert_nickname 指定用于签名的证书的别名。
- output 指定 JAR 文件的名称(签名的 zip 文件)。
- input 指定包含日志文件的目录的路径。
16.2.4.6. 过滤审计事件
在证书系统管理员可以设置过滤器来配置根据事件属性在审计文件中记录哪些审计事件。
过滤器的格式与 LDAP 过滤器相同。但是,证书系统只支持以下过滤器:
类型 | æ ¼å¼� | 示例 |
---|---|---|
存在 | (attribute=*) | (ReqID=*) |
ç›¸ç‰ | (attribute=value) | (outcome=Failure) |
子字符串 | (attribute=initial*any*...*any*final) | (SubjectID=*admin*) |
AND 操作 | (&(filter_1)(filter_2)...(filter_n)) | (&(SubjectID=admin)(Outcome=Failure)) |
OR 操作 | (|(filter_1)(filter_2)...(filter_n)) | (|(SubjectID=admin)(Outcome=Failure)) |
不 操作 | (! (filter) | (!(SubjectID=admin)) |
有关 LDAP 过滤器的详情,请查看 红帽目录服务器管理指南中的使用 复合搜索过滤器。
例 16.3. 过滤审计事件
为配置文件证书请求记录失败的事件,以及将
InfoName
字段设置为 rejectReadon 或 cancelReason 的处理证书请求的事件:
- 编辑
/var/lib/pki/instance_name/subsystem_type/conf/CS.cfg
文件并设置以下参数:log.instance.SignedAudit.filters.PROFILE_CERT_REQUEST=(Outcome=Failure) log.instance.SignedAudit.filters.CERT_REQUEST_PROCESSED=(|(InfoName=rejectReason)(InfoName=cancelReason))
- 重启证书系统:
# pki-server restart instance_name
16.2.5. 管理日志模块
允许的日志类型及其行为是通过 log 模块 插件配置的。可以创建新的日志记录模块,并用于编写自定义日志。
在注册插件模块前,请将模块的 Java™ 类放在
类
目录中;实施必须位于类路径上。
使用子系统实例注册日志插件模块:
- 创建自定义作业类。在本例中,自定义日志插件名为
MyLog.java
。 - 将新类编译到实例的 lib 目录中。
javac -d . /var/lib/pki/pki-tomcat/lib -classpath $CLASSPATH MyLog.java
- 在 CA 的
WEB-INF
web 目录中创建一个目录来保存自定义类,以便 CA 可以访问它们。mkdir /var/lib/pki/pki-tomcat/webapps/ca/WEB-INF/classes
- 将所有者设置为证书系统用户(
pkiuser
)。chown -R pkiuser:pkiuser /var/lib/pki/pki-tomcat/lib
- 注册插件。
- 登录到控制台。
- 在 Configuration 选项卡中,从导航树中选择 Logs。然后选择 Log Event Listener 插件注册 选项卡。
- 点击。此时会出现 Register Log Event Listener 插件实施 窗口。
- 为插件模块和 Java™ 类名称指定名称。Java™ 类名称是实施 Java™ 类的完整路径。如果这个类是软件包的一部分,请包含软件包名称。例如,在名为
com.customplugins
的软件包中注册名为 customLog 的类,类名称为 com.customplugins.customLog。 - 点。