17.2. 管理日志
证书系统子系统日志文件记录了与该特定子系统实例中操作相关的事件。对于每个子系统,针对安装、访问和 Web 服务器等问题保留不同的日志。
所有子系统都有类似的日志配置、选项和管理路径。
17.2.1. 日志设置概述
配置日志的方式可能会影响证书系统性能。例如,日志文件轮转会变得太大,这会减慢子系统性能。本节介绍证书系统子系统记录的不同类型的日志,并涵盖日志文件轮转、缓冲日志记录和可用日志级别等重要概念。
17.2.1.1. 日志记录的服务
到日志文件的证书系统日志消息的所有主要组件和协议。下表列出了默认日志记录的服务。要查看特定服务记录的消息,请相应地自定义日志设置。详情请查看 第 17.3.1 节 “在控制台中查看日志”。
Service | 描述 |
---|---|
ACL | 日志与访问控制列表相关的事件。 |
管理 | 记录与管理活动相关的事件,如控制台和实例之间的 HTTPS 通信。 |
All | 记录与所有服务相关的事件。 |
身份验证 | 使用身份验证模块记录与活动相关的事件。 |
证书颁发机构 | 记录与证书管理器相关的事件。 |
数据库 | 记录与内部数据库相关的事件。 |
HTTP | 记录与服务器 HTTP 活动相关的事件。请注意,HTTP 事件实际记录到属于证书系统附带的 Apache 服务器的错误日志,以提供 HTTP 服务。 |
密钥恢复授权 | 记录与 KRA 相关的事件。 |
LDAP | 日志与 LDAP 目录相关的事件,用于发布证书和 CRL。 |
OCSP | 记录与 OCSP 相关的事件,如 OCSP 状态 GET 请求。 |
其他 | 记录与其他活动相关的事件,如命令行工具和其他进程。 |
请求队列 | 记录与请求队列活动相关的事件。 |
用户和组 | 记录与实例的用户和组相关的事件。 |
17.2.1.2. 日志级别(消息类别)
证书系统服务记录的不同事件由日志级别决定,这有助于识别和过滤事件。下表中列出了不同的证书系统日志级别。
日志级别通过数字表示服务器要执行的日志级别的详细程度。
较高的优先级级别意味着较少的详细信息,因为仅记录高优先级的事件。
日志级别 | 消息类别 | 描述 |
---|---|---|
0-1 | Tracing | 这些消息包含精细的调试信息。此级别不应定期使用,因为它可能会影响性能。 |
2-5 | 调试 | 这些消息包含调试信息。不建议使用这个级别,因为它会生成太多的信息。 |
6-10 | informational | 这些消息提供有关证书系统状态的一般信息,包括 证书系统初始化完成 和 请求成功操作的状态消息。 |
11-15 | 警告 | 这些消息只是警告,不表示服务器正常操作中的任何故障。 |
>15 | 失败 | 这些消息指示阻止服务器正常运行的错误和失败,包括执行证书服务操作失败(用户身份验证 失败或 证书撤销)的故障,以及可能导致不可撤销的错误(服务器无法通过来自客户端的同一频道发送其处理的请求)。设置以上 15 的级别将最小化日志,因为仅记录失败。 |
日志级别可用于根据事件的严重性过滤日志条目。默认日志级别为 10。
日志数据可能比较广泛,特别是在较低(更详细的)日志级别。确保主机机器对所有日志文件有足够的磁盘空间。务必要定义日志级别、日志轮转和 server-backup 策略,以便备份所有日志文件,并且主机系统不会过载;否则,信息可能会丢失。
17.2.1.3. buffered 和 unbuffered 日志记录
Java 子系统支持对所有类型的日志进行缓冲的日志记录。可以为缓冲或未缓冲的日志配置服务器。
如果配置了缓冲的日志,服务器会为对应的日志创建缓冲区,并尽可能将消息保存到缓冲区中。只有在出现以下条件之一时,服务器才会将信息清除到日志文件:
-
缓冲区已满。当缓冲区大小等于或大于
bufferSize
配置参数指定的值时,缓冲区已满。此参数的默认值为 512 KB。 -
已达到缓冲区的冲刷间隔。当自上次缓冲区刷新的时间间隔等于或大于
flushInterval
配置参数指定的值时,就会达到 flush 间隔。此参数的默认值为 5 秒。 - 从控制台读取当前日志时。服务器在查询当前日志时检索最新的日志。
如果为未缓冲的日志配置了服务器,服务器会在生成到日志文件中时清除消息。由于服务器每次生成消息时执行 I/O 操作(写入日志文件),因此配置服务器以提高性能。
设置日志参数在 第 17.2.2 节 “在控制台中配置日志” 中进行了描述。
17.2.1.4. 日志文件轮转
子系统日志具有一个可选的日志设置,允许轮转并启动新的日志文件,而不是让日志文件无限期增长。当出现以下任一情况时,日志文件会被轮转:
-
达到相应文件的大小限制。对应日志文件的大小等于或大于
maxFileSize
配置参数指定的值。此参数的默认值为 100 KB。 -
达到相应文件的年龄限制。对应的日志文件等于或早于
rolloverInterval
配置参数指定的间隔。此参数的默认值为 2592000 秒(每 30 天)。
将这些参数都设置为 0 可有效地禁用日志文件轮转。
轮转日志文件时,使用带附加时间戳的文件的名称命名旧文件。附加的时间戳是一个整数,表示轮转相应活跃日志文件的日期和时间。日期和时间具有 YYYYMMDD (年、月、天)和 HHMMSS (小时、分钟、秒)。
日志文件(特别是审计日志文件)包含重要信息。通过将整个 Java'log' 目录复制到存档介质,来定期归档这些文件到一些备份介质。
证书系统不提供归档日志文件的任何工具或工具。
证书系统提供了一个命令行实用程序 signtool
,它会在归档日志文件作为一种方式篡改检测前为日志文件签名。详情请查看 第 17.2.4.5 节 “签名日志文件”。
签名日志文件是签名的审计日志功能的替代选择。签名的审计日志会创建使用子系统签名证书自动签名的审计日志。有关签名的审计日志的详情,请查看 第 17.2.4.3 节 “在控制台中配置签名的审计日志”。
轮转的日志文件不会被删除。
17.2.2. 在控制台中配置日志
日志可以通过子系统控制台和子系统的 Java 的CS.cfg 文件进行配置。也可以通过控制台或配置文件创建专用日志,如签名的审计日志和自定义日志。
可以通过子系统控制台为 CA、OCSP、TKS 和 KRA 子系统配置审计日志。TPS 日志仅通过配置文件配置。
- 在 Configuration 选项卡的导航树中,选择 Log。
Log Event Listener Management 选项卡列出了当前配置的监听程序。
要创建新日志实例,请单击 Select Log Event Listener Plug-in Implementation 窗口中的列表中选择模块插件。
,然后从- 在 Log Event Listener Editor 窗口中设置或修改字段。下表中列出了不同的参数。
字段 | 描述 |
---|---|
日志事件 Listener ID | 提供标识监听程序的唯一名称。名称可以有字母的任意组合(A 到 zZ)、数字(0 到 9)、下划线(_)和连字符(-),但它不能包含其他字符或空格。 |
type | 提供日志文件的类型。事务 记录审计日志。 |
enabled |
设置日志是否活跃。只有启用的日志才会记录事件。该值可以是 |
level | 在文本字段中设置日志级别。必须在字段中输入该级别,没有选择菜单。选择为 Debug,Information,Warning,Failure,Misconfiguration,Catastrophe, 和 Security。如需更多信息,请参阅 第 17.2.1.2 节 “日志级别(消息类别)”。 |
fileName | 将完整路径(包括文件名)提供给日志文件。子系统用户应具有文件的读/写权限。 |
bufferSize | 为日志设置缓冲区大小(KB)。缓冲区达到这个大小后,缓冲区的内容将被清除并复制到日志文件中。默认大小为 512 KB。有关缓冲的日志的更多信息,请参阅 第 17.2.1.3 节 “buffered 和 unbuffered 日志记录”。 |
flushInterval | 设置缓冲区内容被清除并添加到日志文件中的时间。默认间隔为 5 秒。 |
maxFileSize | 以 KB 为单位设置日志文件的大小,然后再轮转日志文件。达到这个大小后,文件将复制到轮转的文件,日志文件将启动新的文件。有关日志文件轮转的详情,请参考 第 17.2.1.4 节 “日志文件轮转”。默认大小为 2000 KB。 |
rolloverInterval | 设置服务器轮转活跃日志文件的频率。可用选项包括每小时、每天、每周、每月和年。默认值为 monthly。如需更多信息,请参阅 第 17.2.1.4 节 “日志文件轮转”。 |
17.2.3. 在 CS.cfg 文件中配置日志
有关如何通过编辑 Java 的CS.cfg' 文件配置日志的说明,请参阅 Red Hat Certificate System 规划、安装和部署指南中的 配置 CS.cfg 文件中的日志 部分。
17.2.4. 管理审计日志
审计日志包含已设置为可记录事件的事件的记录。如果 logSigning
属性设为 true
,则审计日志将使用属于该服务器的日志签名证书进行签名。审核员可以使用此证书来验证日志没有被篡改。
默认情况下,常规审计日志位于 Java'/var/log/pki/ instance_name/subsystem_name/' 目录中,而签名的审计日志则写入 Java'/var/log/pki/ instance_name/subsystem_name/signedAudit/'。可以通过修改配置来更改日志的默认位置。
签名的审计日志会创建一个日志记录系统事件,并从潜在的事件列表中选择事件。启用后,签名的审计日志会记录一组有关所选事件活动的详细信息。
当实例首次创建时,会默认配置签名的审计日志,但可以在安装后配置签名的审计日志。(请参阅 第 17.2.4.2 节 “安装后启用签名的审计日志记录”。)也可以在配置后编辑配置或更改签名证书,如 第 17.2.4.3 节 “在控制台中配置签名的审计日志” 所述。
17.2.4.1. 审计事件列表
有关证书系统中的审计事件列表,请参阅 附录 E, 审计事件。
17.2.4.2. 安装后启用签名的审计日志记录
在首次使用 pki_audit_group 部署参数及 pkispawn
命令创建实例时,可以默认启用签名的审计日志。但是,如果在创建实例时没有配置签名的审计日志,可以在之后将审计日志目录的所有权重新分配给 auditor 系统用户组来启用,如 pkiaudit
。
停止实例:
# pki-server stop instance_name
将已签名的审计日志目录的组所有权设置为 PKI 审核员操作系统组,如
pkiaudit
。这允许 PKI auditors 组中的用户具有 Java'signedAudit' 目录所需的读取访问权限,以验证日志文件上的签名。没有用户(除证书系统用户帐户,pkiuser
)不应具有对此目录中日志文件的写入权限。chgrp -R pkiaudit /var/log/pki/ instance_name/subsystem_name/signedAudit
重启实例:
# pki-server start instance_name
17.2.4.3. 在控制台中配置签名的审计日志
当实例首次创建时,会默认配置签名的审计日志,但可以在配置后编辑配置或更改签名证书。
在文件系统中为签名的审计日志提供足够空间,因为它们可能较大。
通过设置 logSigning
参数,将日志设置为签名的审计日志,以启用
并提供用于为日志签名的证书的别名。在第一次配置子系统时会创建一个特殊的日志签名证书。
只有具有审核员权限的用户才能访问和查看签名的审计日志。审核员可以使用 AuditVerify
工具来验证签名的审计日志没有被修改。
在配置了子系统时,会创建并启用签名的审计日志,但需要额外的配置才能开始创建和签名审计日志。
打开控制台。
注意要通过编辑 Java 的CS.cfg' 文件来创建和配置审计日志,请参阅 Red Hat Certificate System 规划、安装和部署指南中的 配置 CS.cfg 文件中的日志 部分。
- 在 Configuration 选项卡的导航树中,选择 Log。
- 在 Log Event Listener Management 选项卡中,选择 SignedAudit 条目。
- 单击 。
Log Event Listener Editor 窗口中必须重置三个字段。
填写 signedAuditCertNickname。这是用于为审计日志签名的证书的别名。配置子系统时会创建一个审计签名证书,它有一个别名,如
auditSigningCert cert-instance_name[rep]subsystem_name
。注意要获取审计签名证书别名,请使用
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, 审计事件 列出可日志的事件。日志事件用逗号分开,没有空格。
为日志设置任何其他设置,如文件名、日志级别、文件大小或轮转计划。
注意默认情况下,常规审计日志位于 Java'/var/log/pki/ instance_name/subsystem_name/' 目录中,而签名的审计日志则写入 Java'/var/log/pki/ instance_name/subsystem_name/signedAudit/'。可以通过修改配置来更改日志的默认位置。
- 保存日志配置。
启用签名的审计日志记录后,通过创建用户并将该条目分配给 auditor 组来分配审核员用户。auditor 组的成员是唯一可以查看和验证签名的审计日志的用户。有关设置审核员的详情,请查看 第 16.3.2.1 节 “创建用户”。
审核员可以使用 AuditVerify
工具验证日志。有关 使用此工具的详情,请查看 auditVerify (1)
手册页。
17.2.4.4. 处理审计日志记录失败
有些事件可能会导致审计日志功能失败,因此无法将事件写入日志中。例如,当包含审计日志文件的文件系统已满或者日志文件的文件权限被意外更改时,审计日志记录可能会失败。如果审计日志记录失败,证书系统实例将以以下方式关闭。
- servlet 被禁用,也不会处理新的请求。
- 所有待处理的和新请求都会被终止。
- 子系统已关闭。
发生这种情况时,管理员和审核员应当与操作系统管理员一起工作,以解决磁盘空间或文件权限问题。当 IT 问题得到解决时,审核员应确保最后的审计日志条目已被签名。如果没有,则应该通过手动签名(第 17.2.4.5 节 “签名日志文件”)、归档和删除方式保留它们,以防止以后进行审核验证失败。完成此操作后,管理员可以重新启动证书系统。
17.2.4.5. 签名日志文件
证书系统可以在归档或分发用于审计目的之前数字签名日志文件。此功能允许检查文件以篡改。
这是签名的审计日志功能的替代选择。签名的审计日志功能会创建自动签名的审计日志 ; 此工具手动签署归档的日志。有关签名的审计日志的详情,请查看 第 17.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 指定包含日志文件的目录的路径。
17.2.4.6. 过滤审计事件
在证书系统中,管理员可以设置过滤器来配置将根据事件属性在审计文件中记录哪些审计事件。
过滤器的格式与 LDAP 过滤器相同。但是,证书系统只支持以下过滤器:
类型 | æ ¼å¼� | 示例 |
---|---|---|
存在 | (attribute=*) | (ReqID=*) |
ç›¸ç‰ | (属性=值) | (outcome=Failure) |
子字符串 | (属性=initial*any*…anyfinal) | (SubjectID=admin) |
| (&(filter_1)(filter_2)…(filter_n)) | (&(SubjectID=admin)(Outcome=Failure)) |
| (|(filter_1)(filter_2)…(filter_n)) | (|(SubjectID=admin)(Outcome=Failure)) |
| (! (filter)) | (!(SubjectID=admin)) |
有关 LDAP 过滤器的详情,请参阅 Red Hat Directory Server Administration Guide 中的 Using Compound Search Filters。
例 17.3. 过滤审计事件
为处理的证书请求记录失败的事件,以及将 InfoName
字段设置为 rejectReadon
或 cancelReason
的处理证书请求的事件:
编辑 Java'/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
17.2.5. 管理日志模块
允许的日志类型及其行为是通过 log 模块 插件配置的。可以创建新的日志记录模块,并用于编写自定义日志。
新的日志插件模块可以通过控制台注册。注册新模块涉及指定模块的名称以及实施日志接口的 Java™ 类的全名。
在注册插件模块前,请将模块的 Java™ 类放在 Java 类的 目录中;该实施必须在类路径中。
使用子系统实例注册日志插件模块:
-
创建自定义作业类。在本例中,自定义日志插件名为
MyLog.java
。 将新类编译到实例的 lib 目录中。
javac -d . /var/lib/pki/pki-tomcat/lib -classpath $CLASSPATH MyLog.java
在 CA 的 Java 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 Plug-in Implementation 窗口。
为插件模块和 Java™ 类名称指定名称。
Java™ 类名称是实施 Java™ 类的完整路径。如果这个类是软件包的一部分,请包含软件包名称。例如,在名为 Java'com.customplugins' 的软件包中注册一个名为
customLog
的类,类名称为com.customplugins.customLog
。- 点 。
可以通过控制台删除不需要的日志插件模块。在删除模块前,根据这个模块删除所有监听程序 ; 请参阅 第 17.2.1.4 节 “日志文件轮转”。