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
例如:
/var/lib/pki/instance_name/ca/conf
9.2.2. 编辑配置文件 复制链接链接已复制到粘贴板!
在不熟悉配置参数,或者不确保服务器可以接受更改的情况下,不要直接编辑配置文件。如果配置文件被错误地修改,则证书系统无法启动。不正确的配置还可能导致数据丢失。因此,强烈建议您在进行任何更改前保存配置文件的备份。
修改 CS.cfg 文件:
停止子系统实例。
# pki-server stop instance_name或者,如果使用 Nuxwdog watchdog:
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service实例启动时,配置文件存储在缓存中。通过控制台对实例所做的任何更改都会在文件的缓存版本中更改。当服务器停止或重启时,存储在缓存中的配置文件将写入磁盘。在编辑配置文件前停止服务器,否则当服务器停止时,缓存的版本将覆盖更改。
-
打开
/var/lib/pki/instance_name/subsystem_type/conf目录。 -
在文本编辑器中打开
CS.cfg文件。 - 编辑文件中的参数并保存更改。
启动子系统实例。
# pki-server start instance_name或者,如果使用 Nuxwdog watchdog:
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
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
在 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
某些功能区域通过插件来实施,如自助测试、作业和授权来访问子系统。对于这些参数,插件实例具有唯一标识符(因为存在多个为子系统调用的相同插件的实例)、实施插件名称和 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
配置参数的值必须正确格式化,因此它们必须遵循两个规则:
- 需要本地化的值必须采用 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
虽然与端口设置等信息 包含在 CS.cfg 文件中,但它不会在 CS.cfg 中设置。服务器配置在 server.xml 文件中设置。
CS.cfg 和 server.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
有关这些参数及其值的更多信息,请参阅 第 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
对于某些授权设置,可以选择使用 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
有关安全配置 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
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
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
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
除了 internaldb 参数外,TPS 引入了 tokendb 参数,使其包含与智能卡令牌相关的更多配置设置。有关安全配置 LDAP 和参数说明的详情,请参考 第 7.13.13 节 “启用从 CS 到 DS 的 TLS 相互身份验证”。在作为 第 7.13.13 节 “启用从 CS 到 DS 的 TLS 相互身份验证” 一部分完成的之外,不需要额外的配置。
9.2.3.7. 启用和配置发布队列 复制链接链接已复制到粘贴板!
注册过程的一部分包括将发布的证书发布到任何目录或文件。这基本上会关闭初始证书请求。但是,向外部网络发布证书可能会显著减慢颁发过程的速度 - 这导致请求开放。
为避免这种情况,管理员可以启用 发布队列。发布队列将发布操作(可能涉及外部 LDAP 目录)与请求和注册操作(使用单独的请求队列)分开。请求队列会立即更新,以显示注册过程已完成,而发布队列则以网络流量的速度发送信息。
发布队列设置一个已定义的、有限数量的线程,用于发布生成的证书,而不是为每个批准的证书打开新线程。
流程
通过编辑 CS.cfg 文件启用发布队列可让管理员设置发布其他选项,如用于发布操作的线程数量和队列页面大小。
停止 CA 服务器,以便您可以编辑配置文件。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service打开 CA 的
CS.cfg文件。# vim /var/lib/pki/instance_name/ca/conf/CS.cfg将
ca.publish.queue.enable设置为 true。如果该参数不存在,请按如下所示添加一行:ca.publish.queue.enable=true设置其他相关的发布队列参数:
-
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=200TIP将
ca.publish.queue.enable设置为 false,ca.publish.queue.maxNumberOfThreads设为 0 可禁用发布队列,并使用单独的线程来发布证书。
-
重启 CA 服务器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
9.2.3.8. PKI 任务设置 复制链接链接已复制到粘贴板!
CS.cfg 文件用于为每个子系统配置 PKI 任务。每个子系统的参数都有所不同,没有任何重叠。
例如,KRA 具有恢复密钥所需的代理设置。
kra.noOfRequiredRecoveryAgents=1
查看每个子系统的 CS.cfg 文件以熟悉其 PKI 任务设置;文件中的注释是学习不同参数的重点指南。
- CA 配置文件列出所有证书配置文件和策略设置,以及生成 CRL 的规则。
- TPS 配置不同的令牌操作。
- TKS 列出从不同密钥类型派生密钥的配置集。
- OCSP 为不同的密钥集设置密钥信息。
9.2.3.9. 在 CA 发布的证书中更改 DN 属性 复制链接链接已复制到粘贴板!
在证书系统发布的证书中,DNS 识别拥有证书的实体。在所有情况下,如果证书系统与目录服务器连接,则证书中的 DN 格式应该与目录中 DN 的格式匹配。名称不完全匹配;证书映射允许证书中的主题 DN 与目录中的不同。
在证书系统中,DN 基于 X.509 标准中定义的组件或属性。表 9.8 “值类型允许的字符” 列出默认支持的属性。一组属性可扩展。
| 属性 | 值类型 | 对象标识符 |
|---|---|---|
|
|
| 2.5.4.3 |
|
|
| 2.5.4.11 |
|
|
| 2.5.4.10 |
|
|
| 2.5.4.6 |
|
|
| 2.5.4.7 |
|
|
| 2.5.4.8 |
|
|
| 2.5.4.9 |
|
|
| 2.5.4.12 |
|
|
| 0.9.2342.19200300.100.1.1 |
|
|
| 1.2.840.113549.1.9.1 |
|
|
| 0.9.2342.19200300.100.1.2.25 |
|
|
| 2.5.4.5 |
|
|
| 1.2.840.113549.1.9.2 |
|
|
| 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
值转换器类将字符串转换为 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
9.2.3.9.1. 添加新或自定义属性 复制链接链接已复制到粘贴板!
停止证书管理器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service-
打开
/var/lib/pki/cs_instance/conf/目录。 -
打开配置文件
CS.cfg。 在配置文件中添加新属性。
例如,要添加三个专有属性
MYATTR1,它是DirectoryString,MYATTR2,它是一个IA5String,并且MYATTR3是PrintableString,请在配置文件末尾添加以下行: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- 保存更改,并关闭该文件。
重启证书管理器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service- 重新加载注册页面并验证更改;新属性应当以表单显示。
要验证新属性是否有效,请使用手动注册表单请求证书。
输入新属性的值,以便可以验证它们出现在证书主题名称中。例如,为新属性输入以下值,并在主题名称中查找它们:
MYATTR1: a_value MYATTR2: a.Value MYATTR3: aValue cn: John Doe o: Example Corporation- 打开 agent services 页面,并批准请求。
- 发布证书后,检查主题名称。证书应该在主题名称中显示新属性值。
9.2.3.9.2. 更改 DER-encoding 顺序 复制链接链接已复制到粘贴板!
可以更改 DirectoryString 的 DER-encoding 顺序,以便可以配置字符串,因为不同的客户端支持不同的编码。
更改 DirectoryString 的 DER-encoding 顺序的语法如下:
X500Name.directoryStringEncodingOrder=encoding_list_separated_by_commas
可能的编码值如下:
-
PrintableString -
IA5String -
UniversalString -
BMPString -
UTF8String
例如,DER-encoding 排序可以列出如下:
X500Name.directoryStringEncodingOrder=PrintableString,BMPString
要更改 DirectoryString 编码,请执行以下操作:
停止证书管理器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service-
打开
/var/lib/pki/cs_instance/conf/目录。 -
打开
CS.cfg配置文件。 将编码顺序添加到配置文件。
例如,要指定两个编码值,即
PrintableString和UniversalString,编码顺序是PrintableStringfirst 和UniversalString,请在配置文件末尾添加以下行:X500Name.directoryStringEncodingOrder=PrintableString,UniversalString- 保存更改,并关闭该文件。
启动证书管理器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service-
要验证编码顺序是否有效,请使用手动注册表单注册证书。对
cn使用John_Doe。 - 打开 agent services 页面,并批准请求。
签发证书后,使用
dumpasn1工具检查证书的编码。主题名称的
cn组件应编码为UniversalString。使用
cn的John Smith创建并提交一个新请求。主题名称的
cn组件应编码为PrintableString。
9.2.3.10. 将 CA 设置为使用不同的证书为 CRL 进行签名 复制链接链接已复制到粘贴板!
证书管理器使用与 OCSP 签名证书对应的密钥对来签署证书和证书撤销列表(CRL)。要使用其他密钥对为证书管理器生成的 CRL 签名,可以创建一个 CRL 签名证书。证书管理器的 CRL 签名证书必须由自己签名或发布。
要让证书管理器使用不同的密钥对为 CRL 签名,请执行以下操作:
使用 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生成 CRL 签名证书后,在证书管理器的加密模块数据库中安装证书。
- 如果使用 HSM,请遵循 第 10.4 节 “硬件安全模块”
-
如果您没有使用 HSM,请按照 第 10.5 节 “将证书导入到 NSS 数据库中” But 而不是
PKICertImport使用certutil命令,如 第 10.1.3 节 “certutil常用命令” 所述。
停止证书管理器。
# pki-server stop instance_name更新证书管理器的配置,以识别新密钥对和证书。
更改到证书管理器实例配置目录。
# cd /var/lib/pki/instance-name/ca/conf/打开
CS.cfg文件并添加以下行:ca.crl_signing.cacertnickname=nickname cert-instance_ID ca.crl_signing.defaultSigningAlgorithm=signing_algorithm ca.crl_signing.tokenname=token_namenickname 是分配给 CRL 签名证书的名称。
instance_ id 是证书管理器实例的名称。
如果安装的 CA 是基于 RSA 的 CA,则 signing_algorithm 可以是
SHA256withRSA、SHA384withRSA或SHA512withRSA。如果安装的 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- 保存更改,并关闭该文件。
重启证书管理器。
# pki-server restart instance_name现在,证书管理器可以使用 CRL 签名证书为其生成的 CRL 签名。
9.2.3.11. 从 CS.cfg 中的缓存配置 CRL 生成 复制链接链接已复制到粘贴板!
CRL 缓存是一种简单机制,允许从内存中维护的撤销信息中获取证书撤销信息。为了获得最佳性能,建议启用此功能,它已经代表默认行为。以下配置信息(这是默认设置)用于信息,或者是否需要更改。
停止 CA 服务器。
systemctl stop pki-tomcatd-nuxwdog@instance_name.service*打开 CA 配置目录。
# cd /var/lib/instance_name/conf/编辑
CS.cfg文件,将enableCRLCache和enableCacheRecovery参数设置为 true :ca.crl.MasterCRL.enableCRLCache=true ca.crl.MasterCRL.enableCacheRecovery=true启动 CA 服务器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
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
仅在需要更加详细且需要特定更新调度时与此问题分离。本节的其余部分将讨论如何完成这一目的。
在 CS.cfg 文件中为 full 和 delta 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 更新间隔
停止 CA 服务器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service进入 CA 配置目录。
# cd /var/lib/instance_name/conf/编辑
CS.cfg文件,并添加以下行来设置更新间隔:ca.crl.MasterCRL.updateSchema=3默认间隔为 1,这意味着每次生成 CRL 时都会生成完整的 CRL。
updateSchema间隔可以设置为任何整数。通过指定循环间隔或设置时间来设置更新频率:
通过启用
enableDailyUpdates参数指定设置时间,并将所需的时间添加到dailyUpdates参数中:ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=false ca.crl.MasterCRL.dailyUpdates=0:50,04:55,06:55此字段会在应更新 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
根据您的环境设置以下参数:
如果您运行没有 OCSP 子系统的 CA,请设置:
ca.crl.MasterCRL.nextUpdateGracePeriod=0如果您使用 OCSP 子系统运行 CA,请设置:
ca.crl.MasterCRL.nextUpdateGracePeriod=time_in_minutesca.crl.MasterCRL.nextUpdateGracePeriod参数定义时间(以分钟为单位),值必须足够大,以便 CA 将新的 CRL 传播到 OCSP。您必须将参数设置为非零值。如果您的环境中还有 OCSP 克隆,还要设置:
ocsp.store.defStore.refreshInSec=time_in_secondsocsp.store.defStore.refreshInSec参数设置频率(以秒为单位),克隆 OCSP 实例会通过主 OCSP 实例的 LDAP 复制更新来告知 CRL 更新。
有关参数的详情,请查看 表 9.9 “CRL 扩展间隔参数”。
重启 CA 服务器。
systemctl start pki-tomcatd-nuxwdog@instance_name.service
根据间隔更新 CRL 时,可能会发生调度偏移。通常,因为手动更新和 CA 重启,会进行偏移。
要防止调度偏移,请将 enableDailyUpdates 和 enableUpdateInterval 参数设置为 true,并将所需的值添加到 autoUpdateInterval 和 dailyUpdates :
ca.crl.MasterCRL.enableDailyUpdates=true
ca.crl.MasterCRL.enableUpdateInterval=true
ca.crl.MasterCRL.autoUpdateInterval=240
ca.crl.MasterCRL.dailyUpdates=1:00
在以间隔更新 CRL 时,只接受一个 dailyUpdates 值。
间隔更新会每 24 小时使用 dailyUpdates 值重新同步。
9.2.3.13. 更改子系统的访问控制设置 复制链接链接已复制到粘贴板!
默认情况下,访问控制规则会首先评估拒绝规则,然后通过评估允许规则来应用。要更改顺序,请更改 CS.cfg 中的 authz.evaluateOrder 参数。
authz.evaluateOrder=deny,allow
此外,还可以从本地 web.xml 文件(基本 ACL)评估访问控制规则,或者通过检查 LDAP 数据库来访问更复杂的 ACL。authz.sourceType 参数标识要使用的授权类型。
authz.sourceType=web.xml
在编辑 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
证书系统支持范围的 BigInteger 值。
9.2.3.15. 设置 pkiconsole 的要求以使用 TLS 客户端证书身份验证 复制链接链接已复制到粘贴板!
pkiconsole 已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然 pkiconsole 在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与 pkiconsole 等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。
编辑每个子系统的 CS.cfg 文件,搜索 authType 参数并将其设置如下:
authType=sslclientauth
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 实例,并在您完成更改后重启它。
请参阅 第 3.3 节 “允许的哈希功能”。
9.2.3.17. 禁用直接 CA-OCSP CRL 发布 复制链接链接已复制到粘贴板!
当将 OCSP 管理器配置为使用 LDAP 目录时,您需要禁用直接 CA→OCSP CRL 发布方法:
停止 SubCA:
# pki-server stop rhcs10-RSA-SubCA编辑 CA 的
CS.cfg配置文件(例如/var/lib/pki/rhcs10-RSA-SubCA/ca/conf/CS.cfg),并将其设置为false:ca.publish.rule.instance.ocsprule-<host/port info>.enable=false例如:
ca.publish.rule.instance.ocsprule-rhcs10-example-com-32443.enable=false启动 CA 以使更改生效:
# pki-server start rhcs10-RSA-SubCA
9.2.3.18. 使用 OCSP 中最新的 CRL 启用客户端证书验证 复制链接链接已复制到粘贴板!
这是在 OCSP 子系统中启用撤销检查的替代方法。首选方法在 第 7.13.10.2 节 “为 CA / KRA / TKS / TPS 启用 OCSP” 中进行了详细介绍。
当正确设置时,OCSP 系统在内部具有最新的 CRL 来验证其自身的客户端。要做到这一点,您需要同时启用 ocsp.store.ldapStore.validateConnCertWithCRL 和 auths.revocationChecking.enabled 参数。
编辑 OCSP 的
CS.cfg配置文件(例如/var/lib/pki/rhcs10-OCSP-subca/ca/conf/CS.cfg)并设置以下内容:ocsp.store.ldapStore.validateConnCertWithCRL=true auths.revocationChecking.enabled=true除了在
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禁用证书发布的 CA
CS.cfg文件示例:ca.publish.enable=true ca.publish.cert.enable=false禁用 CRL 发布的 CA
CS.cfg文件示例:ca.publish.enable=true ca.publish.crl.enable=false