9.2. CS.cfg 文件


证书系统子系统的运行时属性由一组配置参数管理。这些参数存储在服务器启动期间读取的文件中,其 CS.cfg.

在首次安装子系统时,创建 CS.cfg (一个 ASCII 文件)并填充适当的配置参数。修改实例功能的方式是通过子系统控制台进行更改的方式,这是推荐的方法。管理控制台中所做的更改反映在配置文件中。

也可以直接编辑 CS.cfg 配置文件,在某些情况下,这是管理子系统的最简单方法。

9.2.1. 查找 CS.cfg 文件

证书系统子系统的每个实例都有自己的配置文件 CS.cfg。每个子系统实例的文件内容会根据子系统配置的方式不同,额外的设置和配置(如添加新配置集或启用自tests)以及子系统类型。

CS.cfg 文件位于实例的配置目录中。

/var/lib/pki/instance_name/subsystem_type/conf
Copy to Clipboard Toggle word wrap

例如:

/var/lib/pki/instance_name/ca/conf
Copy to Clipboard Toggle word wrap

9.2.2. 编辑配置文件

WARNING

在不熟悉配置参数,或者不确保服务器可以接受更改的情况下,不要直接编辑配置文件。如果配置文件被错误地修改,则证书系统无法启动。不正确的配置还可能导致数据丢失。因此,强烈建议您在进行任何更改前保存配置文件的备份。

修改 CS.cfg 文件:

  1. 停止子系统实例。

    # pki-server stop instance_name
    Copy to Clipboard Toggle word wrap

    或者,如果使用 Nuxwdog watchdog:

    # systemctl stop pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap

    实例启动时,配置文件存储在缓存中。通过控制台对实例所做的任何更改都会在文件的缓存版本中更改。当服务器停止或重启时,存储在缓存中的配置文件将写入磁盘。在编辑配置文件前停止服务器,否则当服务器停止时,缓存的版本将覆盖更改。

  2. 打开 /var/lib/pki/instance_name/subsystem_type/conf 目录。
  3. 在文本编辑器中打开 CS.cfg 文件。
  4. 编辑文件中的参数并保存更改。
  5. 启动子系统实例。

    # pki-server start instance_name
    Copy to Clipboard Toggle word wrap

    或者,如果使用 Nuxwdog watchdog:

    # systemctl start pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap

9.2.3. CS.cfg 配置文件概述

每个子系统实例都有自己的主配置文件 CS.cfg,其中包含实例的所有设置,如插件和用于配置的 Java 类。参数和具体设置根据子系统类型的不同而有所不同,但通常而言,CS.cfg 文件定义了子系统实例的这些部分:

  • 基本子系统实例信息,如名称、端口分配、实例目录和主机名
  • 日志记录
  • 对实例用户目录(authorization)进行身份验证的插件和方法
  • 实例所属的安全域
  • 子系统证书
  • 子系统实例使用的其他子系统
  • 子系统使用的数据库类型和实例
  • 与 PKI 相关的任务设置,如 TKS 中的密钥配置文件、CA 中的证书配置文件,以及 KRA 中密钥恢复所需的代理

许多配置参数(与 PKI 任务不同)在 CA、OCSP、KRA 和 TKS 之间非常相似,因为它们都使用基于 Java 的控制台,因此在控制台中管理的配置设置都有类似的参数。

CS.cfg 文件基本参数 =值 格式。

#comment
parameter=value
Copy to Clipboard Toggle word wrap

CS.cfg 文件中,许多参数块都有描述性注释,并用 pound (:)字符注释掉。服务器会忽略注释、空白行、未知参数或拼写错误的参数。

配置实例相同区域的参数往往被分组到同一块中。

例 9.1. CS.cfg 文件中的日志记录设置

log.instance.SignedAudit._000=##
log.instance.SignedAudit._001=## Signed Audit Logging
log.instance.SignedAudit._002=##
log.instance.SignedAudit._003=## To list available audit events:
log.instance.SignedAudit._004=## $ pki-server ca-audit-event-find
log.instance.SignedAudit._005=##
log.instance.SignedAudit._006=## To enable/disable audit event:
log.instance.SignedAudit._007=## $ pki-server ca-audit-event-enable/disable <event name>
log.instance.SignedAudit._008=##
log.instance.SignedAudit.bufferSize=512
log.instance.SignedAudit.enable=true
log.instance.SignedAudit.events=ACCESS_SESSION_ESTABLISH,ACCESS_SESSION_TERMINATED,AUDIT_LOG_SIGNING,AUDIT_LOG_STARTUP,AUTH,AUTHORITY_CONFIG,AUTHZ,CERT_PROFILE_APPROVAL,CERT_REQUEST_PROCESSED,CERT_SIGNING_INFO,CERT_STATUS_CHANGE_REQUEST,CERT_STATUS_CHANGE_REQUEST_PROCESSED,CLIENT_ACCESS_SESSION_ESTABLISH,CLIENT_ACCESS_SESSION_TERMINATED,CMC_REQUEST_RECEIVED,CMC_RESPONSE_SENT,CMC_SIGNED_REQUEST_SIG_VERIFY,CMC_USER_SIGNED_REQUEST_SIG_VERIFY,CONFIG_ACL,CONFIG_AUTH,CONFIG_CERT_PROFILE,CONFIG_CRL_PROFILE,CONFIG_ENCRYPTION,CONFIG_ROLE,CONFIG_SERIAL_NUMBER,CONFIG_SIGNED_AUDIT,CONFIG_TRUSTED_PUBLIC_KEY,CRL_SIGNING_INFO,DELTA_CRL_GENERATION,FULL_CRL_GENERATION,KEY_GEN_ASYMMETRIC,LOG_PATH_CHANGE,OCSP_GENERATION,OCSP_SIGNING_INFO,PROFILE_CERT_REQUEST,PROOF_OF_POSSESSION,RANDOM_GENERATION,ROLE_ASSUME,SCHEDULE_CRL_GENERATION,SECURITY_DOMAIN_UPDATE,SELFTESTS_EXECUTION,SERVER_SIDE_KEYGEN_REQUEST,SERVER_SIDE_KEYGEN_REQUEST_PROCESSED
log.instance.SignedAudit.expirationTime=0
log.instance.SignedAudit.fileName=/var/lib/pki/rhcs10-ECC-SubCA/logs/ca/signedAudit/ca_audit
log.instance.SignedAudit.filters.CMC_SIGNED_REQUEST_SIG_VERIFY=(Outcome=Failure)
log.instance.SignedAudit.filters.CMC_USER_SIGNED_REQUEST_SIG_VERIFY=(Outcome=Failure)
log.instance.SignedAudit.filters.DELTA_CRL_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.filters.FULL_CRL_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.filters.OCSP_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.filters.RANDOM_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.flushInterval=5
log.instance.SignedAudit.level=1
log.instance.SignedAudit.logSigning=true
log.instance.SignedAudit.maxFileSize=2000
log.instance.SignedAudit.pluginName=file
log.instance.SignedAudit.rolloverInterval=2592000
log.instance.SignedAudit.signedAudit=_002=##
log.instance.SignedAudit.signedAuditCertNickname=NHSM-CONN-XC:auditSigningCert cert-rhcs10-ECC-SubCA CA
log.instance.SignedAudit.type=signedAudit
Copy to Clipboard Toggle word wrap

某些功能区域通过插件来实施,如自助测试、作业和授权来访问子系统。对于这些参数,插件实例具有唯一标识符(因为存在多个为子系统调用的相同插件的实例)、实施插件名称和 Java 类。

例 9.2. 子系统授权设置

authz.impl._000=##
authz.impl._001=## authorization manager implementations
authz.impl._002=##
authz.impl.BasicAclAuthz.class=com.netscape.cms.authorization.BasicAclAuthz
authz.instance.BasicAclAuthz.pluginName=BasicAclAuthz
Copy to Clipboard Toggle word wrap
注意

配置参数的值必须正确格式化,因此它们必须遵循两个规则:

  • 需要本地化的值必须采用 UTF8 字符。
  • CS.cfg 文件在参数值中支持正斜杠(/)。如果值中需要后斜杠(\),则必须使用 back 斜杠进行转义,这意味着必须使用行中的两个后端斜杠。

以下小节是 CS.cfg 文件设置和参数的快照。这些不是 CS.cfg 文件参数的详细参考或示例。此外,每个子系统配置文件中可用的参数也非常不同,尽管存在相似性。

9.2.3.1. 基本子系统设置

基本设置特定于实例本身,而不直接与子系统的功能或行为相关。这包括实例名称、根目录、进程的用户 ID 和端口号的设置。首次安装和配置实例时分配的许多设置都以 pkispawn 开头。

例 9.3. CA 的基本实例参数:pkispawn 文件 ca.cfg

[DEFAULT]
pki_admin_password=Secret.123
pki_client_pkcs12_password=Secret.123
pki_ds_password=Secret.123
# Optionally keep client databases
pki_client_database_purge=False
# Separated CA instance name and ports
pki_instance_name=pki-ca
 pki_http_port=18080
pki_https_port=18443
# This Separated CA instance will be its own security domain
pki_security_domain_https_port=18443

[Tomcat]
# Separated CA Tomcat ports
pki_ajp_port=18009
pki_tomcat_server_port=18005
Copy to Clipboard Toggle word wrap
重要

虽然与端口设置等信息 包含在 CS.cfg 文件中,但它不会在 CS.cfg 中设置。服务器配置在 server.xml 文件中设置。

CS.cfgserver.xml 中的端口 必须与 正常工作的 RHCS 实例匹配。

9.2.3.2. 日志记录设置

根据子系统的类型,可以配置几种不同类型的日志。每种日志在 CS.cfg 文件中都有自己的配置条目。

例如,CA 具有此条目用于签名的审计日志,允许日志轮转、缓冲的日志记录、日志签名和日志级别,以及其他设置:

log.instance.SignedAudit._000=##
log.instance.SignedAudit._001=## Signed Audit Logging
log.instance.SignedAudit._002=##
log.instance.SignedAudit._003=## To list available audit events:
log.instance.SignedAudit._004=## $ pki-server ca-audit-event-find
log.instance.SignedAudit._005=##
log.instance.SignedAudit._006=## To enable/disable audit event:
log.instance.SignedAudit._007=## $ pki-server ca-audit-event-enable/disable <event name>
log.instance.SignedAudit._008=##
log.instance.SignedAudit.bufferSize=512
log.instance.SignedAudit.enable=true
log.instance.SignedAudit.events=ACCESS_SESSION_ESTABLISH,ACCESS_SESSION_TERMINATED,AUDIT_LOG_SIGNING,AUDIT_LOG_STARTUP,AUTH,AUTHORITY_CONFIG,AUTHZ,CERT_PROFILE_APPROVAL,CERT_REQUEST_PROCESSED,CERT_SIGNING_INFO,CERT_STATUS_CHANGE_REQUEST,CERT_STATUS_CHANGE_REQUEST_PROCESSED,CLIENT_ACCESS_SESSION_ESTABLISH,CLIENT_ACCESS_SESSION_TERMINATED,CMC_REQUEST_RECEIVED,CMC_RESPONSE_SENT,CMC_SIGNED_REQUEST_SIG_VERIFY,CMC_USER_SIGNED_REQUEST_SIG_VERIFY,CONFIG_ACL,CONFIG_AUTH,CONFIG_CERT_PROFILE,CONFIG_CRL_PROFILE,CONFIG_ENCRYPTION,CONFIG_ROLE,CONFIG_SERIAL_NUMBER,CONFIG_SIGNED_AUDIT,CONFIG_TRUSTED_PUBLIC_KEY,CRL_SIGNING_INFO,DELTA_CRL_GENERATION,FULL_CRL_GENERATION,KEY_GEN_ASYMMETRIC,LOG_PATH_CHANGE,OCSP_GENERATION,OCSP_SIGNING_INFO,PROFILE_CERT_REQUEST,PROOF_OF_POSSESSION,RANDOM_GENERATION,ROLE_ASSUME,SCHEDULE_CRL_GENERATION,SECURITY_DOMAIN_UPDATE,SELFTESTS_EXECUTION,SERVER_SIDE_KEYGEN_REQUEST,SERVER_SIDE_KEYGEN_REQUEST_PROCESSED
log.instance.SignedAudit.expirationTime=0
log.instance.SignedAudit.fileName=/var/lib/pki/rhcs10-ECC-SubCA/logs/ca/signedAudit/ca_audit
log.instance.SignedAudit.filters.CMC_SIGNED_REQUEST_SIG_VERIFY=(Outcome=Failure)
log.instance.SignedAudit.filters.CMC_USER_SIGNED_REQUEST_SIG_VERIFY=(Outcome=Failure)
log.instance.SignedAudit.filters.DELTA_CRL_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.filters.FULL_CRL_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.filters.OCSP_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.filters.RANDOM_GENERATION=(Outcome=Failure)
log.instance.SignedAudit.flushInterval=5
log.instance.SignedAudit.level=1
log.instance.SignedAudit.logSigning=true
log.instance.SignedAudit.maxFileSize=2000
log.instance.SignedAudit.pluginName=file
log.instance.SignedAudit.rolloverInterval=2592000
log.instance.SignedAudit.signedAudit=_002=##
log.instance.SignedAudit.signedAuditCertNickname=NHSM-CONN-XC:auditSigningCert cert-rhcs10-ECC-SubCA CA
log.instance.SignedAudit.type=signedAudit
Copy to Clipboard Toggle word wrap

有关这些参数及其值的更多信息,请参阅 第 13.1 节 “日志设置”。只要启用了审计日志记录,这些值不会影响合规性。

9.2.3.3. 身份验证和授权设置

CS.cfg 文件设置如何识别用户访问子系统实例(身份验证)以及每个经过身份验证的用户批准哪些操作(authorization)。

CS 子系统使用身份验证插件来定义登录子系统的方法。

以下示例显示了名为 SharedToken 的身份验证实例,它实例化一个名为 SharedSecret 的 JAVA 插件。

auths.impl.SharedToken.class=com.netscape.cms.authentication.SharedSecret
auths.instance.SharedToken.pluginName=SharedToken
auths.instance.SharedToken.dnpattern=
auths.instance.SharedToken.ldap.basedn=ou=People,dc=example,dc=org
auths.instance.SharedToken.ldap.ldapauth.authtype=BasicAuth
auths.instance.SharedToken.ldap.ldapauth.bindDN=cn=Directory Manager
auths.instance.SharedToken.ldap.ldapauth.bindPWPrompt=Rule SharedToken
auths.instance.SharedToken.ldap.ldapauth.clientCertNickname=
auths.instance.SharedToken.ldap.ldapconn.host=server.example.com
auths.instance.SharedToken.ldap.ldapconn.port=636
auths.instance.SharedToken.ldap.ldapconn.secureConn=true
auths.instance.SharedToken.ldap.ldapconn.version=3
auths.instance.SharedToken.ldap.maxConns=
auths.instance.SharedToken.ldap.minConns=
auths.instance.SharedToken.ldapByteAttributes=
auths.instance.SharedToken.ldapStringAttributes=
auths.instance.SharedToken.shrTokAttr=shrTok
Copy to Clipboard Toggle word wrap

对于某些授权设置,可以选择使用 LDAP 数据库存储用户条目的授权方法,在这种情况下,数据库设置与插件一同配置,如下所示。

authz.impl.DirAclAuthz.class=com.netscape.cms.authorization.DirAclAuthz
authz.instance.DirAclAuthz.ldap=internaldb
authz.instance.DirAclAuthz.pluginName=DirAclAuthz
authz.instance.DirAclAuthz.ldap._000=##
authz.instance.DirAclAuthz.ldap._001=## Internal Database
authz.instance.DirAclAuthz.ldap._002=##
authz.instance.DirAclAuthz.ldap.basedn=dc=server.example.com-pki-ca
authz.instance.DirAclAuthz.ldap.database=server.example.com-pki-ca
authz.instance.DirAclAuthz.ldap.maxConns=15
authz.instance.DirAclAuthz.ldap.minConns=3
authz.instance.DirAclAuthz.ldap.ldapauth.authtype=SslClientAuth
authz.instance.DirAclAuthz.ldap.ldapauth.bindDN=cn=Directory Manager
authz.instance.DirAclAuthz.ldap.ldapauth.bindPWPrompt=Internal LDAP Database
authz.instance.DirAclAuthz.ldap.ldapauth.clientCertNickname=
authz.instance.DirAclAuthz.ldap.ldapconn.host=localhost
authz.instance.DirAclAuthz.ldap.ldapconn.port=11636
authz.instance.DirAclAuthz.ldap.ldapconn.secureConn=true
authz.instance.DirAclAuthz.ldap.multipleSuffix.enable=false
Copy to Clipboard Toggle word wrap

有关安全配置 LDAP 和参数说明的更多信息,请参阅 第 7.13.13 节 “启用从 CS 到 DS 的 TLS 相互身份验证”。参数路径与显示的内容不同,但在两个位置都允许相同的名称和值。

CA 还必须具有批准用户请求的机制。与配置授权一样,这通过识别适当的身份验证插件并为它配置实例来完成:

auths.impl.AgentCertAuth.class=com.netscape.cms.authentication.AgentCertAuthentication
auths.instance.AgentCertAuth.agentGroup=Certificate Manager Agents
auths.instance.AgentCertAuth.pluginName=AgentCertAuth
Copy to Clipboard Toggle word wrap

9.2.3.4. 子系统证书设置

一些子系统包含配置文件中各个子系统证书的条目。

ca.sslserver.cert=MIIDmDCCAoCgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBAMR4wHAYDVQQKExVSZWR...
ca.sslserver.certreq=MIICizCCAXMCAQAwRjEeMBwGA1UEChMVUmVkYnVkY29tcHV0ZXIgRG9tYWluMSQwIgYDV...
ca.sslserver.nickname=Server-Cert cert-pki-ca
ca.sslserver.tokenname=Internal Key Storage Token
Copy to Clipboard Toggle word wrap

9.2.3.5. 所需的子系统的设置

至少,每个子系统依赖于 CA,这意味着必须在子系统设置中配置 CA (以及任何其他必要的子系统)。与另一个子系统的任何连接都以 conn 开头,然后是子系统类型和编号。以下是 TPS 实例的 CS.cfg 中的"conn"部分示例:

conn.ca1.clientNickname=subsystemCert cert-pki-tps
conn.ca1.hostadminport=server.example.com:8443
conn.ca1.hostagentport=server.example.com:8443
conn.ca1.hostport=server.example.com:9443
conn.ca1.keepAlive=true
conn.ca1.retryConnect=3
conn.ca1.servlet.enrollment=/ca/ee/ca/profileSubmitSSLClient
conn.ca1.servlet.renewal=/ca/ee/ca/profileSubmitSSLClient
conn.ca1.servlet.revoke=/ca/subsystem/ca/doRevoke
conn.ca1.servlet.unrevoke=/ca/subsystem/ca/doUnrevoke
conn.ca1.timeout=100
Copy to Clipboard Toggle word wrap

9.2.3.6. 数据库设置

所有子系统都使用 LDAP 目录来存储其信息。此内部数据库在 internaldb 参数中配置。以下是 CA CS.cfg 中的 internaldb 部分的示例:

internaldb._000=##
internaldb._000=##
internaldb._001=## Internal Database
internaldb._002=##
internaldb.basedn=o=pki-tomcat-ca-SD
internaldb.database=pki-tomcat-ca
internaldb.maxConns=15
internaldb.minConns=3
internaldb.ldapauth.authtype=SslClientAuth
internaldb.ldapauth.clientCertNickname=HSM-A:subsystemCert pki-tomcat-ca
internaldb.ldapconn.host=example.com
internaldb.ldapconn.port=11636
internaldb.ldapconn.secureConn=true
internaldb.multipleSuffix.enable=false
Copy to Clipboard Toggle word wrap

除了 internaldb 参数外,TPS 引入了 tokendb 参数,使其包含与智能卡令牌相关的更多配置设置。有关安全配置 LDAP 和参数说明的详情,请参考 第 7.13.13 节 “启用从 CS 到 DS 的 TLS 相互身份验证”。在作为 第 7.13.13 节 “启用从 CS 到 DS 的 TLS 相互身份验证” 一部分完成的之外,不需要额外的配置。

9.2.3.7. 启用和配置发布队列

注册过程的一部分包括将发布的证书发布到任何目录或文件。这基本上会关闭初始证书请求。但是,向外部网络发布证书可能会显著减慢颁发过程的速度 - 这导致请求开放。

为避免这种情况,管理员可以启用 发布队列。发布队列将发布操作(可能涉及外部 LDAP 目录)与请求和注册操作(使用单独的请求队列)分开。请求队列会立即更新,以显示注册过程已完成,而发布队列则以网络流量的速度发送信息。

发布队列设置一个已定义的、有限数量的线程,用于发布生成的证书,而不是为每个批准的证书打开新线程。

流程

通过编辑 CS.cfg 文件启用发布队列可让管理员设置发布其他选项,如用于发布操作的线程数量和队列页面大小。

  1. 停止 CA 服务器,以便您可以编辑配置文件。

    # systemctl stop pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
  2. 打开 CA 的 CS.cfg 文件。

    # vim /var/lib/pki/instance_name/ca/conf/CS.cfg
    Copy to Clipboard Toggle word wrap
  3. ca.publish.queue.enable 设置为 true。如果该参数不存在,请按如下所示添加一行:

    ca.publish.queue.enable=true
    Copy to Clipboard Toggle word wrap
  4. 设置其他相关的发布队列参数:

    • ca.publish.queue.maxNumberOfThreads 设置为发布操作打开的最大线程数。默认值为 3。
    • ca.publish.queue.priorityLevel 设置发布操作的优先级。优先级值范围从-2 (最低优先级)到 2 ( 最高优先级)。零(0)是正常优先级,也是默认值。
    • ca.publish.queue.pageSize 设置发布队列页面中可存储的最大请求数。默认值为 40。
    • ca.publish.queue.saveStatus 设置间隔,以保存每个指定数量的发布操作的状态。如果 CA 重启或崩溃,这允许恢复发布队列。默认值为 200,但任何非零数字将在 CA 重启时恢复队列。将此参数设置为 0 可禁用队列恢复。

      ca.publish.queue.maxNumberOfThreads=1
      	ca.publish.queue.priorityLevel=0
      	ca.publish.queue.pageSize=100
      	ca.publish.queue.saveStatus=200
      Copy to Clipboard Toggle word wrap
      TIP

      ca.publish.queue.enable 设置为 false,ca.publish.queue.maxNumberOfThreads 设为 0 可禁用发布队列,并使用单独的线程来发布证书。

  5. 重启 CA 服务器。

    # systemctl start pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap

9.2.3.8. PKI 任务设置

CS.cfg 文件用于为每个子系统配置 PKI 任务。每个子系统的参数都有所不同,没有任何重叠。

例如,KRA 具有恢复密钥所需的代理设置。

kra.noOfRequiredRecoveryAgents=1
Copy to Clipboard Toggle word wrap

查看每个子系统的 CS.cfg 文件以熟悉其 PKI 任务设置;文件中的注释是学习不同参数的重点指南。

  • CA 配置文件列出所有证书配置文件和策略设置,以及生成 CRL 的规则。
  • TPS 配置不同的令牌操作。
  • TKS 列出从不同密钥类型派生密钥的配置集。
  • OCSP 为不同的密钥集设置密钥信息。

9.2.3.9. 在 CA 发布的证书中更改 DN 属性

在证书系统发布的证书中,DNS 识别拥有证书的实体。在所有情况下,如果证书系统与目录服务器连接,则证书中的 DN 格式应该与目录中 DN 的格式匹配。名称不完全匹配;证书映射允许证书中的主题 DN 与目录中的不同。

在证书系统中,DN 基于 X.509 标准中定义的组件或属性。表 9.8 “值类型允许的字符” 列出默认支持的属性。一组属性可扩展。

Expand
表 9.8. 值类型允许的字符
属性值类型对象标识符

cn

DirectoryString

2.5.4.3

ou

DirectoryString

2.5.4.11

o

DirectoryString

2.5.4.10

c

PrintableString,双字符

2.5.4.6

l

DirectoryString

2.5.4.7

st

DirectoryString

2.5.4.8

street

DirectoryString

2.5.4.9

title

DirectoryString

2.5.4.12

uid

DirectoryString

0.9.2342.19200300.100.1.1

mail

IA5String

1.2.840.113549.1.9.1

dc

IA5String

0.9.2342.19200300.100.1.2.25

serialnumber

PrintableString

2.5.4.5

unstructuredname

IA5String

1.2.840.113549.1.9.2

unstructuredaddress

PrintableString

1.2.840.113549.1.9.8

默认情况下,证书系统支持 表 9.8 “值类型允许的字符” 中指定的属性。此支持的属性列表可以通过创建或添加新属性来扩展。添加额外的 X.500Name 属性或组件的语法如下:

X500Name.NEW_ATTRNAME.oid=n.n.n.n
X500Name.NEW_ATTRNAME.class=string_to_DER_value_converter_class
Copy to Clipboard Toggle word wrap

值转换器类将字符串转换为 ASN.1 值;此类必须实施 netscape.security.x509.AVAValueConverter 接口。string-to-value converter 类可以是以下之一:

  • Netscape.security.x509.PrintableConverter 将字符串转换为 PrintableString 值。字符串必须具有可打印的字符。
  • Netscape.security.x509.IA5StringConverter 将字符串转换为 IA5String 值。字符串必须具有 IA5String 字符。
  • Netscape.security.x509.DirStrConverter 将字符串转换为 DirectoryString。根据 RFC 2253,字符串应该采用 DirectoryString 格式。
  • Netscape.security.x509.GenericValueConverter 按以下顺序将字符串字符转换为最大:

    • PrintableString
    • IA5String
    • BMPString
    • 通用字符串

属性条目类似如下:

X500Name.MY_ATTR.oid=1.2.3.4.5.6
X500Name.MY_ATTR.class=netscape.security.x509.DirStrConverter
Copy to Clipboard Toggle word wrap
9.2.3.9.1. 添加新或自定义属性

要在证书系统模式中添加一个新的或专有属性,请执行以下操作:

  1. 停止证书管理器。

    # systemctl stop pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
  2. 打开 /var/lib/pki/cs_instance/conf/ 目录。
  3. 打开配置文件 CS.cfg
  4. 在配置文件中添加新属性。

    例如,要添加三个专有属性 MYATTR1,它是 DirectoryString,MYATTR2,它是一个 IA5String,并且 MYATTR3PrintableString,请在配置文件末尾添加以下行:

    X500Name.attr.MYATTR1.oid=1.2.3.4.5.6
    X500Name.attr.MYATTR1.class=netscape.security.x509.DirStrConverter
    X500Name.attr.MYATTR2.oid=11.22.33.44.55.66
    X500Name.attr.MYATTR2.class=netscape.security.x509.IA5StringConverter
    X500Name.attr.MYATTR3.oid=111.222.333.444.555.666
    X500Name.attr.MYATTR3.class=netscape.security.x509.PrintableConverter
    Copy to Clipboard Toggle word wrap
  5. 保存更改,并关闭该文件。
  6. 重启证书管理器。

    # systemctl start pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
  7. 重新加载注册页面并验证更改;新属性应当以表单显示。
  8. 要验证新属性是否有效,请使用手动注册表单请求证书。

    输入新属性的值,以便可以验证它们出现在证书主题名称中。例如,为新属性输入以下值,并在主题名称中查找它们:

    MYATTR1: a_value
    MYATTR2: a.Value
    MYATTR3: aValue
    cn: John Doe
    o: Example Corporation
    Copy to Clipboard Toggle word wrap
  9. 打开 agent services 页面,并批准请求。
  10. 发布证书后,检查主题名称。证书应该在主题名称中显示新属性值。
9.2.3.9.2. 更改 DER-encoding 顺序

可以更改 DirectoryString 的 DER-encoding 顺序,以便可以配置字符串,因为不同的客户端支持不同的编码。

更改 DirectoryString 的 DER-encoding 顺序的语法如下:

X500Name.directoryStringEncodingOrder=encoding_list_separated_by_commas
Copy to Clipboard Toggle word wrap

可能的编码值如下:

  • PrintableString
  • IA5String
  • UniversalString
  • BMPString
  • UTF8String

例如,DER-encoding 排序可以列出如下:

X500Name.directoryStringEncodingOrder=PrintableString,BMPString
Copy to Clipboard Toggle word wrap

要更改 DirectoryString 编码,请执行以下操作:

  1. 停止证书管理器。

    # systemctl stop pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
  2. 打开 /var/lib/pki/cs_instance/conf/ 目录。
  3. 打开 CS.cfg 配置文件。
  4. 将编码顺序添加到配置文件。

    例如,要指定两个编码值,即 PrintableStringUniversalString,编码顺序是 PrintableString first 和 UniversalString,请在配置文件末尾添加以下行:

    X500Name.directoryStringEncodingOrder=PrintableString,UniversalString
    Copy to Clipboard Toggle word wrap
  5. 保存更改,并关闭该文件。
  6. 启动证书管理器。

    # systemctl start pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
  7. 要验证编码顺序是否有效,请使用手动注册表单注册证书。对 cn 使用 John_Doe
  8. 打开 agent services 页面,并批准请求。
  9. 签发证书后,使用 dumpasn1 工具检查证书的编码。

    主题名称的 cn 组件应编码为 UniversalString

  10. 使用 cnJohn Smith 创建并提交一个新请求。

    主题名称的 cn 组件应编码为 PrintableString

证书管理器使用与 OCSP 签名证书对应的密钥对来签署证书和证书撤销列表(CRL)。要使用其他密钥对为证书管理器生成的 CRL 签名,可以创建一个 CRL 签名证书。证书管理器的 CRL 签名证书必须由自己签名或发布。

要让证书管理器使用不同的密钥对为 CRL 签名,请执行以下操作:

  1. 使用 CMC 为证书管理器请求并安装 CRL 签名证书。有关请求系统证书的详情,请查看 管理指南(Common criteria Edition) 中的第 5.3.2.1 获取 系统和 服务器证书。

    请注意,用于获取证书的配置文件必须使用 keyUsageExtDefaultImpl 类 ID,对应的 keyUsageCrlSign 参数设置为 true

    policyset.userCertSet.6.default.class_id=keyUsageExtDefaultImpl
    policyset.userCertSet.6.default.params.keyUsageCrlSign=true
    Copy to Clipboard Toggle word wrap
  2. 生成 CRL 签名证书后,在证书管理器的加密模块数据库中安装证书。

  3. 停止证书管理器。

    # pki-server stop instance_name
    Copy to Clipboard Toggle word wrap
  4. 更新证书管理器的配置,以识别新密钥对和证书。

    1. 更改到证书管理器实例配置目录。

      # cd /var/lib/pki/instance-name/ca/conf/
      Copy to Clipboard Toggle word wrap
    2. 打开 CS.cfg 文件并添加以下行:

      ca.crl_signing.cacertnickname=nickname cert-instance_ID
      ca.crl_signing.defaultSigningAlgorithm=signing_algorithm
      ca.crl_signing.tokenname=token_name
      Copy to Clipboard Toggle word wrap

      nickname 是分配给 CRL 签名证书的名称。

      instance_ id 是证书管理器实例的名称。

      如果安装的 CA 是基于 RSA 的 CA,则 signing_algorithm 可以是 SHA256withRSASHA384withRSASHA512withRSA。如果安装的 CA 是基于 EC 的 CA,则 signing_algorithm 可以是 SHA256withEC,SHA384 带有EC,SHA512withEC

      token_name 是用于生成密钥对和证书的令牌名称。如果使用内部/软件令牌,请使用 Internal Key Storage Token 作为值。

      例如,条目可能类似如下:

      ca.crl_signing.cacertnickname=crlSigningCert cert-pki-ca
      ca.crl_signing.defaultSigningAlgorithm=SHA512withRSA
      ca.crl_signing.tokenname=Internal Key Storage Token
      Copy to Clipboard Toggle word wrap
    3. 保存更改,并关闭该文件。
  5. 重启证书管理器。

    # pki-server restart instance_name
    Copy to Clipboard Toggle word wrap

    现在,证书管理器可以使用 CRL 签名证书为其生成的 CRL 签名。

9.2.3.11. 从 CS.cfg 中的缓存配置 CRL 生成

CRL 缓存是一种简单机制,允许从内存中维护的撤销信息中获取证书撤销信息。为了获得最佳性能,建议启用此功能,它已经代表默认行为。以下配置信息(这是默认设置)用于信息,或者是否需要更改。

  1. 停止 CA 服务器。

    systemctl stop pki-tomcatd-nuxwdog@instance_name.service*
    Copy to Clipboard Toggle word wrap
  2. 打开 CA 配置目录。

    # cd /var/lib/instance_name/conf/
    Copy to Clipboard Toggle word wrap
  3. 编辑 CS.cfg 文件,将 enableCRLCacheenableCacheRecovery 参数设置为 true :

    ca.crl.MasterCRL.enableCRLCache=true
    ca.crl.MasterCRL.enableCacheRecovery=true
    Copy to Clipboard Toggle word wrap
  4. 启动 CA 服务器。

    # systemctl start pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap

9.2.3.12. 在 CS.cfg 中为 CRL 配置更新间隔

下面介绍如何配置 CRL 系统,以反映所需的行为。目标是根据两种类型的部分调度来配置 CRL 更新。一种类型允许显式时间列表,另一个类型由更新之间的间隔长度组成。另外,还有一种混合的场景,它们都启用了它们来考虑偏移。下方的备注条目实际上代表开箱即用的情况。

默认场景列出如下:

ca.crl.MasterCRL.updateSchema=3
ca.crl.MasterCRL.enableDailyUpdates=true
ca.crl.MasterCRL.enableUpdateInterval=true
ca.crl.MasterCRL.autoUpdateInterval=240
ca.crl.MasterCRL.dailyUpdates=1:00
ca.crl.MasterCRL.nextUpdateGracePeriod=0
Copy to Clipboard Toggle word wrap

仅在需要更加详细且需要特定更新调度时与此问题分离。本节的其余部分将讨论如何完成这一目的。

CS.cfg 文件中为 full 和 delta CRL 配置设置涉及编辑参数。

Expand
表 9.9. CRL 扩展间隔参数
参数描述接受的值

updateSchema

设置每个完整 CRL 生成多少 delta CRL 的比率

整数值

enableDailyUpdates

根据设定时间启用和禁用设置 CRL 更新

true 或 false

enableUpdateInterval

根据设定的间隔启用和禁用设置 CRL 更新

true 或 false

dailyUpdates

设置 CRL 应该更新的次数

以逗号分隔的时间列表

autoUpdateInterval

以分钟为单位设置间隔以更新 CRL

整数值

autoUpdateInterval.effectiveAtStart

允许系统尝试立即使用新值自动更新,而不是等待当前调度的 nextUpdate 时间

true 或 false

nextUpdateGracePeriod

将时间(以分钟为单位)添加到 CRL 有效周期,以确保 CRL 在发布或复制期间保持有效

整数值

refreshInSec

在克隆 OCSP 中设置线程的定期(以秒为单位),以检查 LDAP 是否有 CRL 的更新

整数值

重要

autoUpdateInterval.effectiveAtStart 参数需要系统重启才能应用新值。此参数的默认值为 false,它应该只由确保它们正在执行的操作的用户进行更改。

流程 :如何在 CS.cfg 中配置 CRL 更新间隔

  1. 停止 CA 服务器。

    # systemctl stop pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
  2. 进入 CA 配置目录。

    # cd /var/lib/instance_name/conf/
    Copy to Clipboard Toggle word wrap
  3. 编辑 CS.cfg 文件,并添加以下行来设置更新间隔:

    ca.crl.MasterCRL.updateSchema=3
    Copy to Clipboard Toggle word wrap

    默认间隔为 1,这意味着每次生成 CRL 时都会生成完整的 CRL。updateSchema 间隔可以设置为任何整数。

  4. 通过指定循环间隔或设置时间来设置更新频率:

    • 通过启用 enableDailyUpdates 参数指定设置时间,并将所需的时间添加到 dailyUpdates 参数中:

      ca.crl.MasterCRL.enableDailyUpdates=true
      	ca.crl.MasterCRL.enableUpdateInterval=false
      	ca.crl.MasterCRL.dailyUpdates=0:50,04:55,06:55
      Copy to Clipboard Toggle word wrap

      此字段会在应更新 CRL 时设置每日时间。要多次指定,请输入以逗号分隔的时间列表,如 01:50,04:55,06:55。要输入多个天数的调度,请输入以逗号分隔的列表来在同一天内设置时间,然后是一个分号分隔的列表,以标识不同天数的时间。例如,设置 01:50,04:55,06:55,02:00,05:00,17: 00,00 在周期的第 1 天、1:50am、4:55am 和 6:55am,然后第 2 天、5am 和 5pm 配置撤销。

      通过启用 enableUpdateInterval 参数来指定间隔,并将所需的间隔(以分钟为单位)添加到 autoUpdateInterval 参数:

      ca.crl.MasterCRL.enableDailyUpdates=false
      	ca.crl.MasterCRL.enableUpdateInterval=true
      	ca.crl.MasterCRL.autoUpdateInterval=240
      Copy to Clipboard Toggle word wrap
  5. 根据您的环境设置以下参数:

    • 如果您运行没有 OCSP 子系统的 CA,请设置:

      ca.crl.MasterCRL.nextUpdateGracePeriod=0
      Copy to Clipboard Toggle word wrap
    • 如果您使用 OCSP 子系统运行 CA,请设置:

      ca.crl.MasterCRL.nextUpdateGracePeriod=time_in_minutes
      Copy to Clipboard Toggle word wrap

      ca.crl.MasterCRL.nextUpdateGracePeriod 参数定义时间(以分钟为单位),值必须足够大,以便 CA 将新的 CRL 传播到 OCSP。您必须将参数设置为非零值。

      如果您的环境中还有 OCSP 克隆,还要设置:

      ocsp.store.defStore.refreshInSec=time_in_seconds
      Copy to Clipboard Toggle word wrap

      ocsp.store.defStore.refreshInSec 参数设置频率(以秒为单位),克隆 OCSP 实例会通过主 OCSP 实例的 LDAP 复制更新来告知 CRL 更新。

    有关参数的详情,请查看 表 9.9 “CRL 扩展间隔参数”

  6. 重启 CA 服务器。

    systemctl start pki-tomcatd-nuxwdog@instance_name.service
    Copy to Clipboard Toggle word wrap
注意

根据间隔更新 CRL 时,可能会发生调度偏移。通常,因为手动更新和 CA 重启,会进行偏移。

要防止调度偏移,请将 enableDailyUpdatesenableUpdateInterval 参数设置为 true,并将所需的值添加到 autoUpdateIntervaldailyUpdates

ca.crl.MasterCRL.enableDailyUpdates=true
ca.crl.MasterCRL.enableUpdateInterval=true
ca.crl.MasterCRL.autoUpdateInterval=240
ca.crl.MasterCRL.dailyUpdates=1:00
Copy to Clipboard Toggle word wrap

在以间隔更新 CRL 时,只接受一个 dailyUpdates 值。

间隔更新会每 24 小时使用 dailyUpdates 值重新同步。

9.2.3.13. 更改子系统的访问控制设置

默认情况下,访问控制规则会首先评估拒绝规则,然后通过评估允许规则来应用。要更改顺序,请更改 CS.cfg 中的 authz.evaluateOrder 参数。

authz.evaluateOrder=deny,allow
Copy to Clipboard Toggle word wrap

此外,还可以从本地 web.xml 文件(基本 ACL)评估访问控制规则,或者通过检查 LDAP 数据库来访问更复杂的 ACL。authz.sourceType 参数标识要使用的授权类型。

authz.sourceType=web.xml
Copy to Clipboard Toggle word wrap
注意

在编辑 CS.cfg 文件以加载更新的设置后,始终重启子系统。

9.2.3.14. 为请求和序列号配置范围

如果没有使用随机序列号,如果克隆的系统,管理员可以指定在 /etc/pki/instance_name/subsystem/CS.cfg 文件中用于请求和序列号的范围:

dbs.beginRequestNumber=1001001007001
			dbs.endRequestNumber=11001001007000
			dbs.requestIncrement=10000000000000
			dbs.requestLowWaterMark=2000000000000
			dbs.requestCloneTransferNumber=10000
			dbs.requestDN=ou=ca, ou=requests
			dbs.requestRangeDN=ou=requests, ou=ranges
			dbs.beginSerialNumber=1001001007001
			dbs.endSerialNumber=11001001007000
			dbs.serialIncrement=10000000000000
			dbs.serialLowWaterMark=2000000000000
			dbs.serialCloneTransferNumber=10000
			dbs.serialDN=ou=certificateRepository, ou=ca
			dbs.serialRangeDN=ou=certificateRepository, ou=ranges
			dbs.beginReplicaNumber=1
			dbs.endReplicaNumber=100
			dbs.replicaIncrement=100
			dbs.replicaLowWaterMark=20
			dbs.replicaCloneTransferNumber=5
			dbs.replicaDN=ou=replica
			dbs.replicaRangeDN=ou=replica, ou=ranges
			dbs.ldap=internaldb
			dbs.newSchemaEntryAdded=true
Copy to Clipboard Toggle word wrap
注意

证书系统支持范围的 BigInteger 值。

注意

pkiconsole 已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然 pkiconsole 在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与 pkiconsole 等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。

编辑每个子系统的 CS.cfg 文件,搜索 authType 参数并将其设置如下:

authType=sslclientauth
Copy to Clipboard Toggle word wrap

9.2.3.16. 更改签名算法

安装时首先通过 pkispawn 配置文件设置各种 PKI 对象的签名算法(certificates、CRL 和 OCSP 响应)。然后,可以在安装后通过编辑涉及的实例的 CS.cfg 文件来更改这些设置,如下所示:

ca :签名证书的默认签名算法
打开 CA 的 CS.cfg,并编辑 ca.signing.defaultSigningAlgorithm 以分配所需的签名算法。例如:
ca.signing.defaultSigningAlgorithm=SHA256withRSA
ca :签名 CRL 的默认签名算法
打开 CA 的 CS.cfg,并编辑 ca.crl.MasterCRL.signingAlgorithm 以分配所需的签名算法。例如:
ca.crl.MasterCRL.signingAlgorithm=SHA256withRSA
CA :签名 OCSP 响应的默认签名算法
打开 CA 的 CS.cfg,并编辑 ca.ocsp_signing.defaultSigningAlgorithm 以分配所需的签名算法。例如:
ca.ocsp_signing.defaultSigningAlgorithm=SHA256withRSA
OCSP :签名 OCSP 响应的默认签名算法
打开 OCSP 的 CS.cfg,并编辑 ocsp.signing.defaultSigningAlgorithm 来分配所需的签名算法。例如:
ocsp.signing.defaultSigningAlgorithm=SHA256withRSA

在编辑 CS.cfg 文件前,请确保停止 CS 实例,并在您完成更改后重启它。

注意

9.2.3.17. 禁用直接 CA-OCSP CRL 发布

当将 OCSP 管理器配置为使用 LDAP 目录时,您需要禁用直接 CA→OCSP CRL 发布方法:

  1. 停止 SubCA:

    # pki-server stop rhcs10-RSA-SubCA
    Copy to Clipboard Toggle word wrap
  2. 编辑 CA 的 CS.cfg 配置文件(例如 /var/lib/pki/rhcs10-RSA-SubCA/ca/conf/CS.cfg),并将其设置为 false

    ca.publish.rule.instance.ocsprule-<host/port info>.enable=false
    Copy to Clipboard Toggle word wrap

    例如:

    ca.publish.rule.instance.ocsprule-rhcs10-example-com-32443.enable=false
    Copy to Clipboard Toggle word wrap
  3. 启动 CA 以使更改生效:

    # pki-server start rhcs10-RSA-SubCA
    Copy to Clipboard Toggle word wrap
注意

这是在 OCSP 子系统中启用撤销检查的替代方法。首选方法在 第 7.13.10.2 节 “为 CA / KRA / TKS / TPS 启用 OCSP” 中进行了详细介绍。

当正确设置时,OCSP 系统在内部具有最新的 CRL 来验证其自身的客户端。要做到这一点,您需要同时启用 ocsp.store.ldapStore.validateConnCertWithCRLauths.revocationChecking.enabled 参数。

  • 编辑 OCSP 的 CS.cfg 配置文件(例如 /var/lib/pki/rhcs10-OCSP-subca/ca/conf/CS.cfg)并设置以下内容:

    ocsp.store.ldapStore.validateConnCertWithCRL=true
    
    auths.revocationChecking.enabled=true
    Copy to Clipboard Toggle word wrap

    除了在 CS.cfg 中启用这两个参数外,enableOCSP 参数应该在 /var/lib/pki/<ocsp 实例目录>/conf/server.xml 中保持设置为 false。

9.2.3.19. 为 CA 启用客户端证书和 CRL 发布

Red Hat Certificate System 使证书颁发机构能够发布证书,证书撤销列表(CRL)。

要为 CS.cfg 配置文件中的发布证书或证书撤销列表(CRLs)配置证书颁发机构(CA)设置,请按照以下示例操作:

  • 启用证书和 CRL 发布的 CA CS.cfg 文件示例:

    ca.publish.enable=true
    ca.publish.cert.enable=true
    ca.publish.crl.enable=true
    Copy to Clipboard Toggle word wrap
  • 禁用证书发布的 CA CS.cfg 文件示例:

    ca.publish.enable=true
    ca.publish.cert.enable=false
    Copy to Clipboard Toggle word wrap
  • 禁用 CRL 发布的 CA CS.cfg 文件示例:

    ca.publish.enable=true
    ca.publish.crl.enable=false
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat