管理指南
为 Red Hat Certificate System 10.4 更新
摘要
第 1 章 Red Hat Certificate System 子系统概述
1.1. 证书使用
1.2. 证书系统子系统的审阅
企业安全客户端
1.3. A Look at manage Certificates (Non-TMS)
1.4. 令牌管理系统(TMS)的 Look
1.5. Red Hat Certificate System 服务
部分 I. Red Hat Certificate System 用户界面
第 2 章 用户界面
2.1. 用户界面概述
- PKI 命令行界面和其他命令行工具
- PKI 控制台图形界面
- 证书系统 Web 界面。
~/.dogtag/nssdb/
目录中的 NSS 数据库。第 2.5.1.1 节 “pki CLI 初始化” 提供使用管理员证书和密钥初始化 NSS 数据库的详细步骤。第 2.5.1.2 节 “使用 "pki" CLI” 中描述了使用 PKI 命令行工具的一些示例。在指南的其余部分中显示了其他示例。
PKCS10Client
创建 CSR”。
pkiconsole
初始化” 描述了如何初始化这个控制台界面。第 2.3.2 节 “将 pkiconsole
用于 CA、OCSP、KRA 和 TKS 子系统” 提供有关使用它的概述。后续部分,如 第 3.2.2 节 “使用基于 Java 的管理控制台管理证书注册配置文件” 为特定操作进行了更详细的信息。
2.2. 客户端 NSS 数据库初始化
- 为客户端准备 NSS 数据库。这可以是新数据库或现有数据库。
- 导入 CA 证书链并信任它们。
- 具有证书和对应密钥。它们可以在 NSS 数据库中生成,或者从其它位置导入,例如从 PKCS the 文件中导入。
2.3. 图形界面
pkiconsole 已被弃用。
pkiconsole
是一个图形界面,专为具有管理员角色权限的用户而设计,以管理子系统本身。这包括添加用户、配置日志、管理配置集和插件以及许多其他功能。此实用程序使用客户端身份验证通过 TLS 与证书系统服务器通信,并可用于远程管理服务器。
2.3.1. pkiconsole
初始化
pkiconsole
接口,请指定新密码并使用以下命令:
$ pki -c password -d ~/.redhat-idm-console client-init
~/.redhat-idm-console/
目录中创建新客户端 NSS 数据库。
.p12
文件中提取 admin 客户端证书:
$ openssl pkcs12 -in file -clcerts -nodes -nokeys -out file.crt
$ PKICertImport -d ~/.redhat-idm-console -n "nickname" -t ",," -a -i file.crt -u C
$ pki -c password -d ~/.redhat-idm-console pkcs12-import --pkcs12-file file --pkcs12-password pkcs12-password
$ certutil -V -u C -n "nickname" -d ~/.redhat-idm-console
2.3.2. 将 pkiconsole
用于 CA、OCSP、KRA 和 TKS 子系统
pkiconsole https://server.example.com:admin_port/subsystem_type
https://192.0.2.1:8443/ca https://[2001:DB8::1111]:8443/ca
图 2.1. 证书系统控制台
- 用户和组
- 访问控制列表
- 日志配置
- 子系统证书(例如,在安全域或审计签名中)签发到子系统的证书。
2.4. Web 界面
2.4.1. 浏览器初始化
导入 CA 证书
- 点→ → → 。
- 选择 "权限 "选项卡,然后单击 按钮。
- 选择
ca.crt
文件并点击 。
导入客户端证书
- 点→ → → 。
- 选择 Your Certificates 选项卡。
- 单击,再选择客户端 p12 文件,如
ca_admin_cert.p12
。 - 在提示符处输入客户端证书的密码。
- 点。
- 验证您的证书下是否添加了 条目。
访问 Web 控制台
2.4.2. 管理接口
图 2.2. TPS Admin Page
2.4.3. 代理接口
图 2.3. 证书管理器的代理服务页面
- 证书管理器代理服务包括批准证书请求(签发证书)、撤销证书以及发布证书和 CRL。CA 发布的所有证书都可以通过其代理服务页面进行管理。
- TPS 代理服务(如 CA 代理服务)管理已格式化且已通过 TPS 向它们发布证书的所有令牌。令牌可以被代理注册、暂停和删除。另外两个角色(operator 和 admin)可在 Web 服务页面中查看令牌,但不能对令牌执行任何操作。
- KRA 代理服务页面处理密钥恢复请求,如果证书丢失,该请求是否允许使用现有密钥对来签发证书。
- OCSP 代理服务页面允许代理配置将 CRL 发布到 OCSP 的 CA,手动将 CRL 加载到 OCSP,并查看客户端 OCSP 请求的状态。
2.4.4. 最终用户页面
图 2.4. 证书管理器的端到端页面
2.5. 命令行界面
2.5.1. "pki" CLI
$
pki [CLI options] <command> [command parameters]
2.5.1.1. pki CLI 初始化
$
pki -c <password> client-init
~/.dogtag/nssdb
目录中创建新客户端 NSS 数据库。在使用客户端 NSS 数据库的所有 CLI 操作中必须指定密码。或者,如果密码存储在文件中,您可以使用 -C
选项指定该文件。例如:
$
pki -C password_file client-init
.p12
文件中提取 admin 客户端证书:
$ openssl pkcs12 -in file -clcerts -nodes -nokeys -out file.crt
$ PKICertImport -d ~/.dogtag/nssdb -n "nickname" -t ",," -a -i file.crt -u C
$
pki -c <password> pkcs12-import --pkcs12-file <file> --pkcs12-password <password>
certutil -V -u C -n "nickname" -d ~/.dogtag/nssdb
2.5.1.2. 使用 "pki" CLI
$
pki
$
pki ca
$
pki ca-cert
--help
选项:
$
pki --help
$
pki ca-cert-find --help
$
pki help
$
pki help ca-cert-find
$
pki ca-cert-find
$
pki -U <server URL> -n <nickname> -c <password> <command> [command parameters]
$
pki -n jsmith -c password ca-user-find ...
http://local_host_name:8080 与服务器通信
。要在不同位置与服务器通信,请使用 -U
选项指定 URL,例如:
$
pki -U https://server.example.com:8443 -n jsmith -c password ca-user-find
2.5.2. AtoB
$
AtoB input.ascii output.bin
2.5.3. AuditVerify
$ AuditVerify -d ~jsmith/auditVerifyDir -n Log Signing Certificate -a ~jsmith/auditVerifyDir/logListFile -P "" -v
~jsmith/auditVerifyDir
NSS 数据库(-d
)中的 Log Signing Certificate
(-n
)验证审计日志。要验证的日志列表(-a
)位于 ~jsmith/auditVerifyDir/logListFile
文件中,用逗号分开和排序。前面带有证书和密钥数据库文件名的前缀(-P
)为空。输出为详细(-v
)。
2.5.4. BtoA
$
BtoA input.bin output.ascii
2.5.5. CMCRequest
$
CMCRequest example.cfg
CMCRequest
吊销证书” 请求和接收证书。
2.5.6. CMCRevoke
2.5.8. CRMFPopClient
CRMFPopClient
工具是使用 NSS 数据库的证书请求消息格式(CRMF)客户端,并提供 Possession 的参与。
$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -t false -v -o /user_or_entity_database_directory/example.csr
-d
)中创建一个带有 cn=subject_name 主题 DN (-n)
的新 CSR,用于指定用于传输 kra.transport
(-b
)的证书,即 AES/CBC/PKCS5Padding key wrap 算法详细输出(-v
) 生成的 CSR 被写入 /user_or_entity_database_directory/example.csr
文件(-o)
。
CMCRequest
吊销证书”。
2.5.9. HttpClient
HttpClient
实用程序是用于提交 CMC 请求的 NSS 感知 HTTP 客户端。
$ HttpClient request.cfg
request.cfg
文件中。如需更多信息,请参阅 HttpClient --help 命令的输出。
2.5.10. OCSPClient
$ OCSPClient -h server.example.com -p 8080 -d /etc/pki/pki-tomcat/alias -c "caSigningCert cert-pki-ca" --serial 2
-p
)上查询 server.example.com
OCSP 服务器(-h
),以检查由 caSigningcet cert-pki-ca (-c
)签名的证书是否有效。
使用 /etc/pki/pki-tomcat/alias
目录中的 NSS 数据库。
2.5.11. PKCS10Client
PKCS10Client
工具为 RSA 和 EC 密钥创建一个 PKCS10 格式的 CSR,可选在 HSM 上。
$ PKCS10Client -d /etc/dirsrv/slapd-instance_name/ -p password -a rsa -l 2048 -o ~/ds.csr -n "CN=$HOSTNAME"
/etc/dirsrv/slapd-instance_name/
目录中创建一个新的 RSA (-a
)密钥,其 2048 位(-
l
)。
输出 CSR 存储在 ~/ds.cfg
文件(-o
)中,证书 DN 为 CN=$HOSTNAME (-n
)。
2.5.12. PrettyPrintCert
$ PrettyPrintCert ascii_data.cert
ascii_data.cert
文件的输出,并以人类可读格式显示其内容。输出包括签名算法、exponent、modulus 和证书扩展等信息。
2.5.13. PrettyPrintCrl
$ PrettyPrintCrl ascii_data.crl
ascii_data.crl
的输出,并以人类可读格式显示其内容。输出包括信息,如撤销签名算法、撤销的签发者以及撤销的证书列表及其原因。
2.5.14. TokenInfo
$ TokenInfo ./nssdb/
2.5.15. tkstool
tkstool
工具与令牌密钥服务(TKS)子系统交互。
$ tkstool -M -n new_master -d /var/lib/pki/pki-tomcat/alias -h token_name
令牌_name
上的 /var/lib/pki/pki-tomcat/alias
NSS 数据库中创建一个名为 new_master (-n
)的新主密钥(-M
)
2.6. 企业安全客户端
- 支持 JavaCard 2.1 或更高版本卡和全局平台 2.01- 兼容智能卡,如 Safenet 的 330J 智能卡。
- 支持 Gemalto TOP IM FIPS CY2 令牌,包括智能卡和 GemPCKey USB 格式工厂键。
- 支持 SafeNet Smart Card 650 (SC650)。
- 注册安全令牌,以便 TPS 识别它们。
- 维护安全令牌,如使用 TPS 重新注册令牌。
- 提供有关被管理令牌或令牌的当前状态的信息。
- 支持服务器端密钥生成,以便在令牌丢失时在单独的令牌上存档并恢复密钥。
- 允许用户注册安全令牌,以便被 TPS 识别。
- 允许用户维护安全令牌。例如,企业安全客户端使得可以使用 TPS 重新注册令牌。
- 通过默认和自定义令牌配置集提供对多种不同类型的令牌的支持。默认情况下,TPS 可以自动注册用户密钥、设备密钥和安全密钥;可以添加额外的配置文件,以便用于不同用途的令牌(通过令牌 CUID 等属性识别)可以根据适当的配置集自动注册。
- 提供有关被管理令牌的当前状态的信息。
部分 II. 设置证书服务
第 3 章 为颁发证书(证书配置文件)进行规则
3.1. 关于证书配置文件
- 身份验证。每个认证配置文件中都可以指定身份验证方法。
- 授权。每个认证配置文件中都可以指定一个授权方法。
- 配置集输入。配置集输入是请求证书时提交到 CA 的参数和值。配置集输入包括证书请求的公钥,以及证书的最终实体所请求的证书主题名称。
- 配置集输出。配置集输出是参数和值,用于指定向最终实体提供证书的格式。当请求成功时,配置集输出是 CMC 响应,其中包含 PKCS the7 证书链。
- 证书内容。每个证书定义内容信息,如为其分配的实体名称(主题名称)、其签名算法及其有效期周期。证书中包含的内容在 X.509 标准中定义。使用 X509 标准的版本 3 时,证书也可以包含扩展。有关证书扩展的详情,请参考 ???。有关证书配置文件的所有信息都在配置文件配置文件中配置文件策略的
设置
条目中定义。当同时请求多个证书时,可以在配置文件策略中定义多个设置条目来满足每个证书的需求。每个策略集由多个策略规则组成,每个策略规则描述了证书内容中的一个字段。策略规则可包括以下部分:- 配置集默认值。这些是预定义的参数和允许的值,用于证书中包含的信息。配置集默认包括证书的有效性周期,以及每个发布的证书类型的证书扩展。
- 配置集限制。用于发布证书的约束设置规则或策略。另一方面,配置集限制包括要求证书主题名称至少有一个 CN 组件的规则,将证书的有效性设置为最多 360 天,来定义续订允许的宽限期,或要求 主题altname 扩展始终设为 true。
3.1.1. Enrollment Profile
例 3.1. caCMCUserCert Profile 示例
desc=This certificate profile is for enrolling user certificates by using the CMC certificate request with CMC Signature authentication. visible=true enable=true enableBy=admin name=Signed CMC-Authenticated User Certificate Enrollment
auth.instance_id=
条目意味着使用此配置集,不需要进行身份验证来提交注册请求。但是,需要由授权的 CA 代理手动批准才能获得颁发。
input.list=i1 input.i1.class_id=cmcCertReqInputImp
output.list=o1 output.o1.class_id=certOutputImpl
policyset.list=userCertSet policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9 ... policyset.userCertSet.6.constraint.class_id=keyUsageExtConstraintImpl policyset.userCertSet.6.constraint.name=Key Usage Extension Constraint policyset.userCertSet.6.constraint.params.keyUsageCritical=true policyset.userCertSet.6.constraint.params.keyUsageDigitalSignature=true policyset.userCertSet.6.constraint.params.keyUsageNonRepudiation=true policyset.userCertSet.6.constraint.params.keyUsageDataEncipherment=false policyset.userCertSet.6.constraint.params.keyUsageKeyEncipherment=true policyset.userCertSet.6.constraint.params.keyUsageKeyAgreement=false policyset.userCertSet.6.constraint.params.keyUsageKeyCertSign=false policyset.userCertSet.6.constraint.params.keyUsageCrlSign=false policyset.userCertSet.6.constraint.params.keyUsageEncipherOnly=false policyset.userCertSet.6.constraint.params.keyUsageDecipherOnly=false policyset.userCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.userCertSet.6.default.name=Key Usage Default policyset.userCertSet.6.default.params.keyUsageCritical=true policyset.userCertSet.6.default.params.keyUsageDigitalSignature=true policyset.userCertSet.6.default.params.keyUsageNonRepudiation=true policyset.userCertSet.6.default.params.keyUsageDataEncipherment=false policyset.userCertSet.6.default.params.keyUsageKeyEncipherment=true policyset.userCertSet.6.default.params.keyUsageKeyAgreement=false policyset.userCertSet.6.default.params.keyUsageKeyCertSign=false policyset.userCertSet.6.default.params.keyUsageCrlSign=false policyset.userCertSet.6.default.params.keyUsageEncipherOnly=false policyset.userCertSet.6.default.params.keyUsageDecipherOnly=false ...
3.1.2. 证书扩展:默认和约束
policyset.caCertSet.5.default.name=Basic Constraints Extension Default policyset.caCertSet.5.default.params.basicConstraintsCritical=true policyset.caCertSet.5.default.params.basicConstraintsIsCA=true policyset.caCertSet.5.default.params.basicConstraintsPathLen=-1
policyset.caCertSet.5.constraint.class_id=basicConstraintsExtConstraintImpl policyset.caCertSet.5.constraint.name=Basic Constraint Extension Constraint policyset.caCertSet.5.constraint.params.basicConstraintsCritical=true policyset.caCertSet.5.constraint.params.basicConstraintsIsCA=true policyset.caCertSet.5.constraint.params.basicConstraintsMinPathLen=-1 policyset.caCertSet.5.constraint.params.basicConstraintsMaxPathLen=-1
3.1.3. 输入和输出
3.2. 设置证书配置文件
- 使用 PKI 命令行界面
- 使用基于 Java 的管理控制台
3.2.1. 使用 PKI 命令行界面管理证书注册配置文件
pki
工具管理证书配置文件。详情请查看 pki-ca-profile(1) man page。
3.2.1.1. 启用和禁用证书配置文件
caCMCECserverCert
证书配置文件:
# pki -c password -n caagent ca-profile-disable caCMCECserverCert
caCMCECserverCert
证书配置文件:
# pki -c password -n caagent ca-profile-enable caCMCECserverCert
3.2.1.2. 以 Raw 格式创建证书配置文件
# pki -c password -n caadmin ca-profile-add profile_name.cfg --raw
profileId=profile_name
3.2.1.3. 以 Raw 格式编辑证书配置文件
caCMCECserverCert
配置集:
# pki -c password -n caadmin ca-profile-edit caCMCECserverCert
VI
编辑器中打开它。当您关闭编辑器时,配置集配置会在服务器上更新。
例 3.2. 以 RAW 格式编辑证书配置文件
caCMCserverCert
配置集以接受多个用户提供的扩展:
- 禁用配置集作为 CA 代理:
# pki -c password -n caagemt ca-profile-disable caCMCserverCert
- 以 CA 管理员身份编辑配置集:
- 在
VI
编辑器中下载并打开配置集:# pki -c password -n caadmin ca-profile-edit caCMCserverCert
- 更新配置以接受扩展。详情请查看 ???。
- 启用配置集作为 CA 代理:
# pki -c password -n caagent ca-profile-enable caCMCserverCert
3.2.1.4. 删除证书配置文件
# pki -c password -n caadmin ca-profile-del profile_name
3.2.2. 使用基于 Java 的管理控制台管理证书注册配置文件
pkiconsole
已被弃用。
3.2.2.1. 通过 CA 控制台创建证书配置文件
- 登录证书系统 CA 子系统控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,选择 Certificate Manager,然后选择 Certificate Profiles。Certificate Profile Instances Management 选项卡(列出配置的证书配置文件)将打开。
- 若要创建新证书配置文件,请单击。在 Select Certificate Profile Plugin Implementation 窗口中,选择创建配置集的证书类型。
- 在 Certificate Profile Instance Editor 中填写配置文件信息。
- 证书配置文件实例 ID.这是系统用来识别配置文件的 ID。
- 证书配置文件名称.这是配置文件的用户友好的名称。
- 证书配置文件描述.
- 最终用户证书配置文件.这会设置请求是否必须通过配置文件的输入表单进行。这通常设为 true。把它设置为 false,允许通过证书管理器的证书配置文件框架处理签名的请求,而不是通过证书配置文件的输入页面进行处理。
- 证书配置文件身份验证.这会设置身份验证方法。通过为身份验证实例提供实例 ID 来设置自动身份验证。如果此字段为空,则身份验证方法是代理批准的注册;请求将提交到代理服务接口的请求队列中。除非是 TMS 子系统,否则管理员必须选择以下身份验证插件之一:
- CMCAuth :当 CA 代理必须批准并提交注册请求时,使用此插件。
- CMCUserSignedAuth :使用此插件使非代理用户能够注册自己的证书。
- 点。插件编辑器关闭,新的配置集列在 profile 选项卡中。
- 为新配置集配置策略、输入和输出。从列表中选择新配置集,然后单击。
- 在证书配置文件 规则编辑器 窗口的 Policies 选项卡中设置策略。Policies 选项卡列出了已为配置集类型默认设置的策略。
- 要添加策略,请点击。
- 从 Default 字段中选择默认值,在 Constraints 字段中选择与该策略关联的约束,然后单击 。
- 填写策略设置 ID。在发布双密钥对时,单独的策略集会定义与每个证书关联的策略。然后,填写证书配置文件策略 ID,证书配置文件策略的名称或标识符。
- 在 Defaults 和 Constraints 选项卡中配置任何参数。Default 定义填充证书请求的属性,后者决定证书的内容。这些可以是扩展、有效期或证书中包含的其他字段。约束 定义默认值的有效值。如需了解每个默认或约束的详情,请查看 第 B.1 节 “默认参考” 和 第 B.2 节 “约束参考”。
要修改现有策略,请选择策略,然后单击。然后编辑该策略的默认和限制。要删除策略,请选择策略,然后单击。 - 在证书配置文件 编辑器 窗口的 Inputs 选项卡中设置输入。配置集可以有多个输入类型。注意除非为 TMS 子系统配置配置文件,否则请选择 cmcCertReqInput,并通过选择它们并单击 按钮来删除其他配置集。
- 要添加输入,请点击。
- 从列表中选择输入,第 A.1 节 “输入参考”。。如需了解默认输入的详情,请查看
- 此时会打开 New Certificate Profile Editor 窗口。设置输入 ID,然后单击 。
可以添加和删除输入。可以选择为输入选择编辑,但因为输入没有参数或其他设置,因此无需配置。要删除输入,请选择输入,然后单击。 - 在证书配置文件 规则编辑器 窗口的 Outputs 选项卡中设置 输出。必须为使用自动验证方法的任何证书配置文件设置输出;不需要为使用代理验证的任何证书配置文件设置输出。默认情况下,所有配置集都会设置证书输出类型,并自动添加到自定义配置集中。除非为 TMS 子系统配置配置文件,否则仅选择证书 输出。可以添加和删除输出。可以为输出选择编辑,但因为输出没有参数或其他设置,因此无需配置。
- 要添加输出,请单击。
- 从列表中选择输出,。
- 为输出指定名称或标识符,然后单击。此输出将在输出标签页中列出。您可以编辑它,以便为此输出中的参数提供值。
若要删除输出,可从列表中选择输出,然后单击。 - 重启 CA 以应用新配置集。
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
- 将配置集作为管理员创建后,CA 代理必须批准代理服务页面中的配置集来启用配置集。
- 打开 CA 的服务页面。
https://server.example.com:8443/ca/services
- 单击 Manage Certificate Profiles 链接。本页列出了管理员(活跃和不活跃)设置的所有证书配置文件。
- 单击要批准的证书配置文件的名称。
- 在页面底部,单击按钮。
3.2.2.2. 在控制台中编辑证书配置文件
- 登录到代理服务页面并禁用配置集。代理启用证书配置文件后,该证书配置文件会在证书配置文件 实例管理 选项卡中被标记为启用,并且无法通过控制台以任何方式编辑证书配置文件。
- 登录证书系统 CA 子系统控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,选择 Certificate Manager,然后选择 Certificate Profiles。
- 选择证书配置文件,然后单击。
- 此时会出现 Certificate Profile Rule Editor 窗口。对默认值、约束、输入或输出的任何更改。注意无法修改配置集实例 ID。如有必要,通过拔出窗口其中一个角来放大窗口。
- 重启 CA 以应用更改。
- 在代理服务页面中,重新启用配置集。
3.2.3. 列出证书注册配置文件
pki
实用程序。例如:
# pki -c password -n caadmin ca-profile-find ------------------ 59 entries matched ------------------ Profile ID: caCMCserverCert Name: Server Certificate Enrollment using CMC Description: This certificate profile is for enrolling server certificates using CMC. Profile ID: caCMCECserverCert Name: Server Certificate wth ECC keys Enrollment using CMC Description: This certificate profile is for enrolling server certificates with ECC keys using CMC. Profile ID: caCMCECsubsystemCert Name: Subsystem Certificate Enrollment with ECC keys using CMC Description: This certificate profile is for enrolling subsystem certificates with ECC keys using CMC. Profile ID: caCMCsubsystemCert Name: Subsystem Certificate Enrollment using CMC Description: This certificate profile is for enrolling subsystem certificates using CMC. ... ----------------------------- Number of entries returned 20
3.2.4. 显示证书注册配置文件的详情
caECFullCMCUserSignedCert
:
$ pki -c password -n caadmin ca-profile-show caECFullCMCUserSignedCert ----------------------------------- Profile "caECFullCMCUserSignedCert" ----------------------------------- Profile ID: caECFullCMCUserSignedCert Name: User-Signed CMC-Authenticated User Certificate Enrollment Description: This certificate profile is for enrolling user certificates with EC keys by using the CMC certificate request with non-agent user CMC authentication. Name: Certificate Request Input Class: cmcCertReqInputImpl Attribute Name: cert_request Attribute Description: Certificate Request Attribute Syntax: cert_request Name: Certificate Output Class: certOutputImpl Attribute Name: pretty_cert Attribute Description: Certificate Pretty Print Attribute Syntax: pretty_print Attribute Name: b64_cert Attribute Description: Certificate Base-64 Encoded Attribute Syntax: pretty_print
caECFullCMCUserSignedCert
,格式为 raw:
$ pki -c password -n caadmin ca-profile-show caECFullCMCUserSignedCert --raw #Wed Jul 25 14:41:35 PDT 2018 auth.instance_id=CMCUserSignedAuth policyset.cmcUserCertSet.1.default.params.name= policyset.cmcUserCertSet.4.default.class_id=authorityKeyIdentifierExtDefaultImpl policyset.cmcUserCertSet.6.default.params.keyUsageKeyCertSign=false policyset.cmcUserCertSet.10.default.class_id=noDefaultImpl policyset.cmcUserCertSet.10.constraint.name=Renewal Grace Period Constraint output.o1.class_id=certOutputImpl ...
3.3. 在配置集中定义密钥默认值
policyset.set1.p3.constraint.class_id=noConstraintImpl policyset.set1.p3.constraint.name=No Constraint policyset.set1.p3.default.class_id=subjectKeyIdentifierExtDefaultImpl policyset.set1.p3.default.name=Subject Key Identifier Default ... policyset.set1.p11.constraint.class_id=keyConstraintImpl policyset.set1.p11.constraint.name=Key Constraint policyset.set1.p11.constraint.params.keyType=RSA policyset.set1.p11.constraint.params.keyParameters=1024,2048,3072,4096 policyset.set1.p11.default.class_id=userKeyDefaultImpl policyset.set1.p11.default.name=Key Default
policyset.set1.list=p1,p2,p11,p3
,p4,p5,p6,p7,p8,p9,p10
3.4. 配置配置集以启用续订
policyset.cmcUserCertSet.10.constraint.class_id=renewGracePeriodConstraintImpl policyset.cmcUserCertSet.10.constraint.name=Renewal Grace Period Constraint policyset.cmcUserCertSet.10.constraint.params.renewal.graceBefore=30 policyset.cmcUserCertSet.10.constraint.params.renewal.graceAfter=30 policyset.cmcUserCertSet.10.default.class_id=noDefaultImpl policyset.cmcUserCertSet.10.default.name=No Default
3.4.1. 使用相同密钥续订
allowSameKeyRenewal
参数设置为 true。例如:
policyset.cmcUserCertSet.9.constraint.class_id=uniqueKeyConstraintImpl policyset.cmcUserCertSet.9.constraint.name=Unique Key Constraint policyset.cmcUserCertSet.9.constraint.params.allowSameKeyRenewal=true policyset.cmcUserCertSet.9.default.class_id=noDefaultImpl policyset.cmcUserCertSet.9.default.name=No Default
3.4.2. 使用新密钥续订
subjectDN
。
3.5. 为证书设置签名算法
3.5.1. 设置 CA 的默认签名算法
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,展开 证书管理器 树。
- 在 General Settings 选项卡中,在 Algorithm 下拉菜单中选择要使用的算法。
pkiconsole
已被弃用。
3.5.2. 在配置文件中设置签名算法默认值
.cfg
文件中,算法使用两个参数设置:
policyset.cmcUserCertSet.8.constraint.class_id=signingAlgConstraintImpl policyset.cmcUserCertSet.8.constraint.name=No Constraint policyset.cmcUserCertSet.8.constraint.params.signingAlgsAllowed=SHA256withRSA,SHA512withRSA,SHA256withEC,SHA384withRSA,SHA384withEC,SHA512withEC policyset.cmcUserCertSet.8.default.class_id=signingAlgDefaultImpl policyset.cmcUserCertSet.8.default.name=Signing Alg policyset.cmcUserCertSet.8.default.params.signingAlg=-
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,展开 证书管理器 树。
- 点 Certificate Profiles 项。
- 点 Policies 选项卡。
- 选择 Signing Alg 策略,然后单击 按钮。
- 要设置默认签名算法,请在 Defaults 选项卡中设置值。如果设置为 -,则配置文件将使用 CA 的默认值。
- 要设置可在证书请求中可接受的允许签名算法列表,请打开 Constraints 选项卡,并在 Value 字段中为 signingAlgsAllowed 设置算法列表。约束的可能值列在 第 B.2.10 节 “签名算法约束” 中。
pkiconsole
已被弃用。
3.7. 管理主题名称和主题备用名称
3.7.1. 在 Subject Name 中使用 Requester CN 或 UID
cn
或 uid
值可用于构建发布的证书的主题名称。本节演示了一个配置集,它在证书请求中存在 Subject Name Constraint 中需要指定 naming 属性(CN 或 UID)。如果缺少 naming 属性,则请求将被拒绝。
- CN 或 UID 格式在 Subject Name Constraint 的模式 配置中设置。
- 主题 DN 的格式(包括 CN 或 UID 令牌)和证书的特定后缀在 Subject Name Default 中设置。
policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl policyset.serverCertSet.1.constraint.name=Subject Name Constraint policyset.serverCertSet.1.constraint.params.pattern=CN=[^,]+,.+
policyset.serverCertSet.1.constraint.params.accept=true policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl policyset.serverCertSet.1.default.name=Subject Name Default policyset.serverCertSet.1.default.params.name=CN=$request.req_subject_name.cn$,DC=example, DC=com
policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl policyset.serverCertSet.1.constraint.name=Subject Name Constraint policyset.serverCertSet.1.constraint.params.pattern=UID=[^,]+,.+
policyset.serverCertSet.1.constraint.params.accept=true policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl policyset.serverCertSet.1.default.name=Subject Name Default policyset.serverCertSet.1.default.params.name=UID=$request.req_subject_name.uid$,DC=example, DC=com
3.7.2. 将 LDAP 目录属性值和其他信息插入到主题 Alt 名称
policyset.userCertSet.8.default.class_id=subjectAltNameExtDefaultImpl policyset.userCertSet.8.default.name=Subject Alt Name Constraint policyset.userCertSet.8.default.params.subjAltNameExtCritical=false policyset.userCertSet.8.default.params.subjAltExtType_0=RFC822Name policyset.userCertSet.8.default.params.subjAltExtPattern_0=$request.requestor_email$ policyset.userCertSet.8.default.params.subjAltExtGNEnable_0=true
- 插入 LDAP 属性值需要启用用户目录身份验证插件 SharedSecret。
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在左侧导航树中选择 Authentication。
- 在 Authentication Instance 选项卡中,点 ,再添加 SharedSecret 身份验证插件的实例。
- 输入以下信息:
Authentication InstanceID=SharedToken shrTokAttr=shrTok ldap.ldapconn.host=server.example.com ldap.ldapconn.port=636 ldap.ldapconn.secureConn=true ldap.ldapauth.bindDN=cn=Directory Manager password=password ldap.ldapauth.authtype=BasicAuth ldap.basedn=ou=People,dc=example,dc=org
- 保存新的插件实例。
注意pkiconsole
已被弃用。有关设置 CMC 共享令牌的详情,请参考 第 10.4.2 节 “设置 CMC 共享 Secret”。 - ldapStringAttributes 参数指示身份验证插件从用户的 LDAP 条目读取
mail
属性的值,并将该值放在证书请求中。当值位于请求中时,证书配置文件策略可以设置为插入扩展值的值。 - 要让 CA 在证书扩展中插入 LDAP 属性值,请编辑配置文件的配置文件,并为扩展插入策略设置参数。例如,要在
caFullCMCSharedTokenCert
配置集中的 Subject Alternative Name 扩展中插入mail
属性值,请更改以下代码:policyset.setID.8.default.params.
subjAltExtPattern_0=$request.auth_token.mail[0]$
有关编辑配置集的详情,请参考 第 3.2.1.3 节 “以 Raw 格式编辑证书配置文件”。 - 重启 CA。
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
caFullCMCSharedTokenCert
配置集注册表单提交的证书将添加 Subject Alternative Name 扩展,并带有请求者 的邮件
LDAP 属性的值。例如:
Identifier: Subject Alternative Name - 2.5.29.17 Critical: no Value: RFC822Name: jsmith@example.com
策略设置令牌 | 描述 |
---|---|
$request.auth_token.cn[0]$ | 请求证书的用户的 LDAP 通用名称(cn )属性。 |
$request.auth_token.mail[0]$ | 请求证书的用户的 LDAP 电子邮件(mail )属性值。 |
$request.auth_token.tokencertsubject$ | 证书主题名称。 |
$request.auth_token.uid$ | 请求证书的用户的 LDAP 用户 ID (uid )属性。 |
$request.auth_token.userdn$ | 请求证书的用户的用户 DN。 |
$request.auth_token.userid$ | 请求证书的用户的用户 ID 属性的值。 |
$request.uid$ | 请求证书的用户的用户 ID 属性的值。 |
$request.requestor_email$ | 提交请求的人员的电子邮件地址。 |
$request.requestor_name$ | 提交请求的人员。 |
$request.upn$ | Microsoft UPN。它具有格式 (UTF8String) 1.3.6.1.4.1.311.20.2.3,$request.upn$。 |
$server.source$ | 指示服务器在主题名称中生成版本 4 UUID (随机号)组件。这始终具有格式 (IA5String) 1.2.3.4,$server.source$。 |
$request.auth_token.user$ | 当请求由 TPS 提交时使用。请求证书的 TPS 子系统可信管理器。 |
$request.subject$ | 当请求由 TPS 提交时使用。TPS 已解析和请求的实体的主题名称 DN。例如: cn=John.Smith.123456789,o=TMS Org |
3.7.3. 在 SAN 扩展中使用 CN 属性
dNSName
Subject Alternative Name (SAN)值。
dNSName
值附加到现有的 SAN 中。
- 禁用配置集:
# pki -c password -p 8080 \ -n "PKI Administrator for example.com" ca-profile-disable profile_name
- 编辑配置集:
# pki -c password -p 8080 \ -n "PKI Administrator for example.com" ca-profile-edit profile_name
- 使用配置集的唯一设置号添加以下配置。例如:
policyset.serverCertSet.12.constraint.class_id=noConstraintImpl policyset.serverCertSet.12.constraint.name=No Constraint policyset.serverCertSet.12.default.class_id=commonNameToSANDefaultImpl policyset.serverCertSet.12.default.name=Copy Common Name to Subject
前面的示例使用 12 作为集合号。 - 将新策略集号附加到
policyset.userCertSet.list
参数。例如:policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9,12
- 保存配置集。
- 启用配置集:
# pki -c password -p 8080 \ -n "PKI Administrator for example.com" ca-profile-enable profile_name
commonNameToSANDefaultImpl
默认。
3.7.4. 接受 CSR 的 SAN 扩展
3.7.4.1. 配置配置文件以从 CSR 中检索 SAN
caCMCECserverCert
:
prefix.constraint.class_id=noConstraintImpl prefix.constraint.name=No Constraint prefix.default.class_id=userExtensionDefaultImpl prefix.default.name=User supplied extension in CSR prefix.default.params.userExtOID=2.5.29.17
3.7.4.2. 使用 SAN 生成 CSR
certutil
工具生成带有两个 SAN 的 CSR:
# certutil -R -k ec -q nistp256 -d . -s "cn=Example Multiple SANs" --extSAN dns:www.example.com,dns:www.example.org -a -o /root/request.csr.p10
第 4 章 设置 Key Archival 和恢复
4.1. 在控制台中配置代理应用密钥恢复
CS.cfg
文件中设置。控制台默认使用 密钥恢复授权代理组
。
- 打开 KRA 的控制台。例如:
pkiconsole https://server.example.com:8443/kra
- 单击左侧导航树中的 Key Recovery Authority 链接。
- 在 所需的 Agents 字段中输入用于批准密钥恢复的代理数量。
CS.cfg
文件中配置代理批准密钥恢复的更多信息,请参阅 Red Hat Certificate System 规划、安装和部署指南中的 命令行配置 密钥恢复部分。
4.2. 测试密钥 Archival 和恢复设置
- 使用 CA 的 Manual User Signing and Encryption Certificates Enrollment 表单注册 双证书。
- 提交请求。登录代理服务页面,并批准请求。
- 登录到端到端页面,并检查是否已发布了证书。在证书列表中,应该有两个带有连续序列号的新证书。
- 将证书导入到 Web 浏览器。
- 确认密钥已存档。在 KRA 的代理服务页面中,选择 Show completed requests。如果密钥成功存档,则会提供有关该密钥的信息。如果没有显示密钥,请检查日志并修正问题。如果密钥已成功存档,请关闭浏览器窗口。
- 验证密钥。发送签名和加密的电子邮件。收到电子邮件后,打开该邮件并查看其是否签名并加密。消息窗口右上角应当有一个安全图标,表示消息已签名并加密。
- 删除证书。再次检查加密的电子邮件;邮件客户端不应解密邮件。
- 测试归档的密钥是否可以成功恢复:
- 打开 KRA 的代理服务页面,然后单击 Recover Keys 链接。按密钥所有者、序列号或公钥搜索密钥。如果密钥成功存档,则会显示密钥信息。
- 点。
- 在出现的表单中,输入与要恢复的私钥对应的 base-64 编码证书;使用 CA 获取此信息。如果通过提供 base-64 编码证书来搜索归档的密钥,则不必在此处提供证书。
- 确保选择了 Async Recovery 复选框,以便在恢复持续时关闭浏览器会话。TIPasync 恢复是执行密钥恢复的默认方法。如果要执行同步密钥恢复,则无法关闭浏览器窗口,在恢复过程中无法停止 KRA。
- 根据代理方案,指定数量的代理必须授权这个密钥恢复。使代理搜索要恢复的密钥,然后批准启动的恢复。
- 当所有代理都授权恢复后,下一屏幕会请求密码以使用证书加密 PKCS the 文件。
- 下一屏幕返回一个链接,以下载包含恢复的密钥对的 PKCS the blob。按照链接操作,并将 blob 保存到文件中。重要在某些情况下,直接从
gcr-viewer
工具的浏览器中打开 PKCS the 文件可能会失败。要临时解决这个问题,请下载该文件并在gcr-viewer
中手动打开该文件。
- 将密钥恢复到浏览器的数据库。将 .p12 文件导入到浏览器和邮件客户端。
- 打开测试电子邮件。消息应再次显示。
第 5 章 请求、注册和管理证书
5.1. 关于注册和续订证书
- 生成证书请求(CSR)。
- 证书请求提交到 CA。
- 通过验证请求它的实体并验证请求,并确认请求满足用于提交它的证书配置文件规则。
- 请求已批准。
- 请求方检索新证书。
5.2. 创建证书签名请求
- 使用命令行工具生成 CSR
- 在支持浏览器中生成 CSR
- 在应用程序内生成 CSR,如服务器的安装程序
- 命令行工具
- 服务器端密钥生成
5.2.1. 使用命令行工具生成 CSR
certutil
:支持创建 PKCS the10 请求。PKCS10Client
:支持创建 PKCS the10 请求。CRMFPopClient
:支持创建 CRMF 请求。pki client-cert-request
:支持 PKCS the10 和 CRMF 请求。
5.2.1.1. 使用 certutil
创建 CSR
certutil
工具创建 CSR 的示例。
certutil
的详情,请参考:
- certutil(1) man page
- certutil --help 命令的输出
5.2.1.1.1. 使用 certutil
创建带有 EC 密钥的 CSR
certutil
工具创建 Elliptic Curve (EC)密钥对和 CSR:
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/
- 创建二进制 CSR,并将其存储在
/user_or_entity_database_directory/request.csr
文件中:$ certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o /user_or_entity_database_directory/request-bin.csr
提示时输入所需的 NSS 数据库密码。有关参数的详情,请查看 certutil(1) man page。 - 将创建的二进制格式 CSR 转换为 PEM 格式:
$ BtoA /user_or_entity_database_directory/request-bin.csr /user_or_entity_database_directory/request.csr
- (可选)验证 CSR 文件是否正确:
$ cat /user_or_entity_database_directory/request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...
这是一个 PKCS the10 PEM 证书请求。
5.2.1.1.2. 使用 certutil
创建带有用户定义的扩展的 CSR
certutil
工具创建带有用户定义的扩展的 CSR。
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/
- 使用用户定义的密钥用法扩展创建 CSR,以及用户定义的扩展密钥用法扩展,并将其存储在
/user_or_entity_database_directory/request.csr
文件中:$ certutil -d . -R -k rsa -g 1024 -s "CN=subject_name" --keyUsage keyEncipherment,dataEncipherment,critical --extKeyUsage timeStamp,msTrustListSign,critical -a -o /user_or_entity_database_directory/request.csr
提示时输入所需的 NSS 数据库密码。有关参数的详情,请查看 certutil(1) man page。 - (可选)验证 CSR 文件是否正确:
$ cat /user_or_entity_database_directory/request.csr Certificate request generated by Netscape certutil Phone: (not specified) Common Name: user 4-2-1-2 Email: (not specified) Organization: (not specified) State: (not specified) Country: (not specified)
这是一个 PKCS the10 PEM 证书请求。
5.2.1.2. 使用 PKCS10Client
创建 CSR
PKCS10Client
工具创建 CSR 的示例。
PKCS10Client
的详情,请参考:
- PKCS10Client(1) man page
- PKCS10Client --help 命令的输出
5.2.1.2.1. 使用 PKCS10Client
创建 CSR
PKCS10Client
工具创建 Elliptic Curve (EC)密钥对和 CSR:
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/
- 创建 CSR 并将其存储在
/user_or_entity_database_directory/example.csr
文件中:$ PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o /user_or_entity_database_directory/example.csr -n "CN=subject_name"
有关参数的详情,请查看 PKCS10Client(1) man page。 - (可选)验证 CSR 是否正确:
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.2.2. 使用 PKCS10Client
为基于 SharedSecret 的 CMC 创建 CSR
PKCS10Client
工具为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。它只将其用于 CMC Shared Secret 验证方法,默认情况下,由 caFullCMCSharedTokenCert
和 caECFullCMCSharedTokenCert
配置集处理。
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/
- 创建 CSR 并将其存储在
/user_or_entity_database_directory/example.csr
文件中:$ PKCS10Client -d . -p NSS_password -o /user_or_entity_database_directory/example.csr -y true -n "CN=subject_name"
有关参数的详情,请查看 PKCS10Client(1) man page。 - (可选)验证 CSR 是否正确:
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.3. 使用 CRMFPopClient
创建 CSR
CRMFPopClient
工具创建 CSR 的示例。
CRMFPopClient
的详情,请查看 CRMFPopClient(1) man page。
5.2.1.3.1. 使用 CRMFPopClient
创建带有密钥 Archival 的 CSR
CRMFPopClient
工具创建 RSA 密钥对和带有 key archive 选项的 CSR:
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/
- 检索 KRA 传输证书:
$ pki ca-cert-find --name "DRM Transport Certificate" --------------- 1 entries found --------------- Serial Number: 0x7 Subject DN: CN=DRM Transport Certificate,O=EXAMPLE Status: VALID Type: X.509 version 3 Key A lgorithm: PKCS #1 RSA with 2048-bit key Not Valid Before: Thu Oct 22 18:26:11 CEST 2015 Not Valid After: Wed Oct 11 18:26:11 CEST 2017 Issued On: Thu Oct 22 18:26:11 CEST 2015 Issued By: caadmin ---------------------------- Number of entries returned 1
- 导出 KRA 传输证书:
$ pki ca-cert-show 0x7 --output kra.transport
- 创建 CSR 并将其存储在
/user_or_entity_database_directory/example.csr
文件中:$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -v -o /user_or_entity_database_directory/example.csr
要创建 Elliptic Curve (EC)密钥对和 CSR,请将-a ec -t false
选项传给命令。有关参数的详情,请查看 CRMFPopClient(1) man page。 - (可选)验证 CSR 是否正确:
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.3.2. 使用 CRMFPopClient
为基于 SharedSecret 的 CMC 创建 CSR
CRMFPopClient
工具为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。它只将其用于 CMC Shared Secret 验证方法,默认情况下,由 caFullCMCSharedTokenCert
和 caECFullCMCSharedTokenCert
配置集处理。
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/
- 检索 KRA 传输证书:
$ pki ca-cert-find --name "DRM Transport Certificate" --------------- 1 entries found --------------- Serial Number: 0x7 Subject DN: CN=DRM Transport Certificate,O=EXAMPLE Status: VALID Type: X.509 version 3 Key A lgorithm: PKCS #1 RSA with 2048-bit key Not Valid Before: Thu Oct 22 18:26:11 CEST 2015 Not Valid After: Wed Oct 11 18:26:11 CEST 2017 Issued On: Thu Oct 22 18:26:11 CEST 2015 Issued By: caadmin ---------------------------- Number of entries returned 1
- 导出 KRA 传输证书:
$ pki ca-cert-show 0x7 --output kra.transport
- 创建 CSR 并将其存储在
/user_or_entity_database_directory/example.csr
文件中:$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -y -v -o /user_or_entity_database_directory/example.csr
要创建 EC 密钥对和 CSR,请将-a ec -t false
选项传给命令。有关参数的详情,请查看 CRMFPopClient --help 命令的输出。 - (可选)验证 CSR 是否正确:
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.4. 在 PKI
CLI 中使用 client-cert-request
创建 CSR
pki
命令行工具也可以与 client-cert-request
命令一起使用来生成 CSR。但是,与前面讨论的工具不同,使用 pki 生成的 CSR 将直接提交到 CA。可以同时生成 PKCS11410 或 CRMF 请求。
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type pkcs10
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type crmf
ca-cert-request-approve
命令批准它。
pki -d agent token db directory -P https -p 8443 -h host.test.com -c agent token db passwd -n <CA agent cert nickname> ca-cert-request-approve request id
5.2.2. 使用服务器端密钥生成 CSR
CRMFPopClient
(请参阅 CRMFPopClient --help)或 pki
(请参阅 pki client-cert-request --help)等 CLI 可以用作临时解决方案。
5.2.2.1. 功能高
- 证书请求密钥在 KRA 上生成(注意:必须安装 KRA 才能使用 CA)
- 配置集默认插件
serverKeygenUserKeyDefaultImpl
提供了启用或禁用密钥归档(例如,enableArchival 参数)的选择。 - 支持 RSA 和 EC 密钥
- 支持手动(代理)批准和自动批准(例如,基于密码的目录)
5.2.2.2. 使用服务器端密钥注册证书
使用服务器端密钥生成手动用户双用途证书注册
图 5.1. 需要代理手动批准的服务器-Side Keygen Enrollment
使用服务器端密钥生成目录验证的用户双用途证书注册
图 5.2. 成功 LDAP uid/pwd 身份验证时自动批准服务器-Side Keygen Enrollment
- 如果进行手动批准,PKKKKKM 文件将返回到批准请求的 CA 代理;然后代理应该将 PKCS the 文件转发到用户。
- 如果进行自动批准,PKKKKKKT 将会返回到提交请求的用户
图 5.3. 代理手动批准的注册
pkcs12util
)将此文件导入到每个应用程序自己的用户内部证书/密钥数据库中。例如,用户的 Firefox nss 数据库。
5.2.2.3. 密钥恢复
5.2.2.4. 其它信息
5.2.2.4.1. KRA 请求记录
- 一个请求类型 asymkeyGenRequest此请求类型不能使用 KRA 代理页面上的 List Requests 来过滤;您可以选择 Show All Requests 来查看列出它们。
- 一个请求类型 恢复
5.2.2.4.2. 审计记录
- SERVER_SIDE_KEYGEN_ENROLL_KEYGEN_REQUEST
- SERVER_SIDE_KEYGEN_ENROLL_KEY_RETRIEVAL_REQUEST
- SERVER_SIDE_KEYGEN_ENROLL_KEYGEN_REQUEST_PROCESSED
- SERVER_SIDE_KEYGEN_ENROLL_KEY_RETRIEVAL_REQUEST_PROCESSED (还没有实现)
5.3. 请求和接收证书
5.3.1. 通过最终用户页面请求和接收证书
- 证书请求类型。这是 PKCS the10 或 CRMF。通过子系统管理控制台创建的证书请求是 PKCS04710 ;那些通过 certutil 工具创建的证书请求通常是 PKCS the10。
- 证书请求.粘贴 base-64 编码 blob,包括 -----BEGIN NEW CERTIFICATE REQUEST----- 和 -----END NEW CERTIFICATE REQUEST----- 标记行。
- 请求者名称。这是请求证书的个人的常见名称。
- 请求者电子邮件.这是请求者的电子邮件地址。在签发证书时,代理或 CA 系统将使用此地址联系请求者。例如: jdoe@someCompany.com。
- 请求者电话.这是请求者的联系人电话号码。
- 打开 Certificate Manager 端到端页面,例如:
http
s
://server.example.com:8443/ca/ee/ca
- 点 Retrieval 选项卡。
- 填写提交证书请求时创建的请求 ID 号,然后单击。
- 下一页显示证书请求的状态。如果状态 完成,则有指向证书的链接。点 Issued certificate 链接。
- 新证书信息以用户为print 格式显示,采用 base-64 编码格式,并且以 PKCS the7 格式显示。可以通过此页面执行以下操作:
- 要在服务器或其他应用程序上安装此证书,请在 Server 部分向下滚动到安装此证书,其中包含 base-64 编码证书。
- 将 base-64 编码证书(包括 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 标记行)复制到文本文件。保存文本文件,并使用它来将证书的副本存储在私钥所在的实体的安全模块中。请参阅 第 15.3.2.1 节 “创建用户”。
5.4. 续订证书
- 相同的密钥续订 取证书的原始密钥、配置集和请求,并使用相同密钥重新创建具有新有效期和过期日期的新证书。这可以通过以下任一方法完成:
- 通过原始配置文件重新提交原始证书请求(CSR),或者
- 使用 certutil 等支持工具使用原始密钥重新生成 CSR
- 重新加密证书需要使用相同的信息重新生成证书请求,以便生成新的密钥对。然后,CSR 通过原始配置集提交。
5.4.1. 相同的密钥续订
5.4.1.1. 重新使用 CSR
- agent-approved 方法需要提交要续订的证书的序列号;此方法需要 CA 代理的批准。
- 基于目录的续订需要提交要续订的证书的序列号,并且 CA 从其当前证书目录条目中提取信息。如果 ldap uid/pwd 成功验证,则会自动批准该证书。
- 基于证书的续订使用浏览器数据库中的证书进行身份验证,并使用相同的证书重新发布。
5.4.1.1.1. agent-Approved 或基于目录的续订
- 打开签发证书的 CA 的最终服务页面(或克隆)。
http
s
://server.example.com:8443/ca/ee/ca
- 单击要使用的续订表单的名称。
- 输入要续订的证书的序列号。这可以采用十进制形式或十六进制形式。
- 点续订按钮。
- 请求已提交。对于基于目录的续订,会自动返回更新的证书。否则,续订请求将由代理批准。
5.4.1.1.2. 基于证书的续订
- 打开签发证书的 CA 的最终服务页面(或克隆)。
http
s
://server.example.com:8443/ca/ee/ca
- 单击要使用的续订表单的名称。
- 没有输入字段,因此点按钮。
- 出现提示时,选择要更新的证书。
- 请求被提交,并自动返回更新的证书。
5.4.1.2. 使用同一密钥生成 CSR 续订
certutil
工具允许一个使用相同的密钥重新生成 CSR,只要密钥对位于 NSS 数据库中。这可以通过执行以下操作来实现:
- 在 NSS db 中查找对应的密钥 ID:
Certutil -d <nssdb dir> -K
- 使用特定密钥生成 CSR:
Certutil -d <nssdb dir> -R -k <key id> -s <subject DN> -o <CSR output file>
- 使用现有 nickname 生成 CSR:
Certutil -d <nssdb dir> -R -k <nickname> -s <subject DN> -o <CSR output file>
5.4.2. 通过密钥证书续订
5.5. 使用 CMC 提交证书请求
- Red Hat Certificate System Planning, Installation and Deployment Guide 中的 Configuring CMC 部分。
- Red Hat Certificate System Planning, Installation and Deployment Guide 中的 Enrolling with CMC 部分。
- CMCRequest(1) man page
- CMCResponse(1) man page
5.5.1. 使用 CMC 注册
.cfg
输入文件中提供的配置:
CMCRequest /path/to/file.cfg
CMCEnroll -d /agent's/certificate/directory -h password -n cert_nickname -r certrequest.file -p certDB_passwd [-c "comment"]
CMCEnroll (1)
man page 中进行了更详细的描述。
5.5.1.1. 测试 CMCEnroll
- 使用 certutil 工具创建证书请求。
- 将 PKCS the10 ASCII 输出复制到文本文件。
- 运行 CMCEnroll 工具。例如,如果名为
request34.txt
的输入文件,代理证书存储在浏览器数据库中,代理证书的证书通用名称为 CertificateManagerAgentsCert,证书数据库的密码为 secret,如下所示:CMCEnroll -d ~jsmith/.mozilla/firefox/1234.jsmith -n "CertificateManagerAgentsCert" -r /export/requests/request34.txt -p secret
此命令的输出存储在一个文件中,其文件名相同,且 .out 附加到文件名中。 - 通过终端实体页面提交签名证书。
- 打开 end-entities 页面。
http
s
://server.example.com:8443/ca/ee/ca
- 从证书配置文件列表中选择 CMC 注册表单。
- 将输出文件的内容粘贴到此表单的 证书请求 文本区域。
- 从粘贴内容中删除 -----BEGIN NEW CERTIFICATE REQUEST----- 和 ----END NEW CERTIFICATE REQUEST-----。
- 填写联系信息并提交表单。
- 证书会立即处理并返回。
- 使用 agent 页面搜索新证书。
5.5.2. CMC 注册过程
- 使用以下格式之一创建证书签名请求(CSR):
- PKCS the10 格式
- 证书请求消息格式(CRMF)格式
有关以这些格式创建 CSR 的详情,请参考 第 5.2 节 “创建证书签名请求”。 - 将 admin 证书导入到客户端 NSS 数据库中。例如:
- 执行以下命令,从
.p12
文件中提取 admin 客户端证书:$
openssl pkcs12 -in /root/.dogtag/instance/ca_admin_cert.p12 -clcerts -nodes -nokeys -out /root/.dogtag/instance/ca_admin_cert.crt - 根据 Red Hat Certificate System Planning, Installation, installation, and Deployment Guide 中的 Managing Certificate/Key Crypto Token 部分的指导来验证并导入 admin 客户端证书:
$
PKICertImport -d . -n "CA Admin - Client Certificate" -t ",," -a -i /root/.dogtag/instance/ca_admin_cert.crt -u C重要在导入 CA Admin 客户端证书前,请确保所有中间证书和 root CA 证书都已导入。 - 导入与证书关联的私钥。
$ pki -c password pkcs12-import --pkcs12-file /root/.dogtag/instance/ca_admin_cert.p12 --pkcs12-password-file /root/.dogtag/instance/ca/pkcs12_password.conf
- 为 CMC 请求创建一个配置文件,如
/home/user_name/cmc-request.cfg
,其内容如下:# NSS database directory where CA agent certificate is stored dbdir=/home/user_name/.dogtag/nssdb/ # NSS database password password=password # Token name (default is internal) tokenname=internal # Nickname for signing certificate nickname=subsystem_admin # Request format: pkcs10 or crmf format=pkcs10 # Total number of PKCS10/CRMF requests numRequests=1 # Path to the PKCS10/CRMF request # The content must be in Base-64 encoded format. # Multiple files are supported. They must be separated by space. input=/home/user_name/file.csr # Path for the CMC request output=/home/user_name/cmc-request.bin
详情请查看 CMCRequest(1) man page。 - 创建 CMC 请求:
$ CMCRequest /home/user_name/cmc-request.cfg
如果命令成功,CMCRequest 工具会将 CMC 请求存储在请求配置文件中的output
参数中指定的文件中。 - 为
HttpClient
创建配置文件,如/home/user_name/cmc-submit.cfg
,稍后的步骤中使用该文件向 CA 提交 CMC 请求。在创建的文件中添加以下内容:# PKI server host name host=server.example.com # PKI server port number port=8443 # Use secure connection secure=true # Use client authentication clientmode=true # NSS database directory where the CA agent certificate is stored. dbdir=/home/user_name/.dogtag/nssdb/ # NSS database password password=password # Token name (default: internal) tokenname=internal # Nickname of signing certificate nickname=subsystem_admin # Path for the CMC request input=/home/user_name/cmc-request.bin # Path for the CMC response output=/home/user_name/cmc-response.bin
重要nickname 参数中指定的证书nickname
必须与之前用于 CMC 请求的证书匹配。 - 根据您请求的证书类型,将以下参数添加到上一步中创建的配置文件中:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=profile_name
例如,对于 CA 签名证书:servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
重要当代理在下一步中提交 CMC 请求时,此参数中指定的配置集必须使用CMCAuth
身份验证插件。在用户发起的注册中,配置集必须使用CMCUserSignedAuth
插件。详情请查看 第 10.3 节 “CMC 身份验证插件”。 - 向 CA 提交 CMC 请求:
$ HttpClient /home/user_name/cmc-submit.cfg
- 要将 CMC 响应转换为 PKCS the7 证书链,请将 CMC 响应文件传递给
CMCResponse
工具的-i
参数。例如:$ CMCResponse -i /home/user_name/cmc-response.bin -o /home/user_name/cert_chain.crt
5.5.3. 实际 CMC 注册场景
5.5.3.1. 获取系统和服务器证书
- 注册配置集
- 代理必须使用 第 10.3 节 “CMC 身份验证插件” 中列出的现有 CMC 配置集之一,或者创建一个使用
CMCAuth
验证机制的自定义配置集。 - CMC 签名证书
- 对于系统证书,CA 代理必须生成并签署 CMC 请求。为此,将
CMCRequest
配置文件中的nickname
参数设置为 CA 代理的别名。注意CA 代理必须有权访问自己的私钥。 httpclient TLS Client
Nickname- 使用同一证书在
CMCRequest
工具的配置文件中签名,与HttpClient
的配置文件中的 TLS 客户端身份验证相同。 HttpClient
servlet
Parameter- 传递给
HttpClient
实用程序的配置文件中的servlet
指的是 CMC servlet 和处理请求的注册配置文件。根据您请求的证书类型,在上一步中创建的配置文件中添加以下条目之一:- 对于 CA 签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
- 对于 KRA 传输证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCkraTransportCert
- 对于 OCSP 签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCocspCert
- 对于审计签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCauditSigningCert
- 对于子系统证书:
- 对于 RSA 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCsubsystemCert
- 对于 ECC 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCsubsystemCert
- 对于 TLS 服务器证书:
- 对于 RSA 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCserverCert
- 对于 ECC 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCserverCert
- 对于管理员证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caFullCMCUserCert
- 当代理预签名 CSR 时,会被视为已建立 Identification,因为代理会检查 CSR 进行验证。不需要额外的 CMC 特定标识验证。
- PKCS the10 文件已经提供 Possession 信息,且不需要额外的 Possession (POP)。
- 在代理预批准的请求中,必须禁用
PopLinkWittnessV2
功能,因为代理会检查识别。
5.5.3.2. 获取用户的第一个签名证书
- 代理为 CMC 请求签名。请参阅 第 5.5.3.2.1 节 “使用代理证书签名 CMC 请求”。
- 证书注册通过使用 Shared Secret 进行身份验证。请参阅 第 5.5.3.2.2 节 “使用共享 Secret 验证证书注册”。
5.5.3.2.1. 使用代理证书签名 CMC 请求
5.5.3.3. 获取用户只加密的证书
- 使用存储在网络安全服务(NSS)数据库或包含用户签名证书和密钥的智能卡中的加密令牌。
- 以 PKCS the10 或 CRMF 格式生成 CSR。注意如果需要密钥归档,请使用 CRMF 格式。
- 生成 CMC 请求。由于这是仅加密的证书,私钥无法签名。因此,不包含参与 Of Possession (POP)。因此,注册需要两个步骤:如果初始请求成功,则会导致带有
EncryptedPOP
控制的 CMC 状态。然后,用户使用响应并生成包含DecryptedPOP
控制的 CMC 请求,并在第二个步骤中提交它。- 对于第一步,除了默认参数外,用户还必须在传递给
CMCRequest
工具的配置文件中设置以下参数:identification.enable
witness.sharedSecret
identityProofV2.enable
identityProofV2.hashAlg
identityProofV2.macAlg
- CA 需要
popLinkWitnessV2.enable
- CA 需要
popLinkWitnessV2.keyGenAlg
- CA 需要
popLinkWitnessV2.macAlg
request.privKeyId
详情请查看 CMCRequest(1) man page。响应包含:- CMC 加密的 POP 控制
- 带有 POP 所需的 错误的
CMCStatusInfoV2
控制 - 请求 ID
- 对于第二个步骤,除了默认参数外,用户还必须在传递给
CMCRequest
工具的配置文件中设置以下参数:decryptedPop.enable
encryptedPopResponseFile
decryptedPopRequestFile
request.privKeyId
详情请查看 CMCRequest(1) man page。
5.5.3.3.1. 使用 Key Archival 仅包含只加密证书的示例
-q POP_SUCCESS
选项而不是 -q POP_NONE
传递给 single-trip aresuance 的 CRMFPopClient
工具。
CRMFPoPClient
的说明,请参考 第 5.2.1.3.1 节 “使用 CRMFPopClient
创建带有密钥 Archival 的 CSR” 和 第 5.2.1.3.2 节 “使用 CRMFPopClient
为基于 SharedSecret 的 CMC 创建 CSR”。
- 搜索 KRA 传输证书。例如:
$ pki cert-find --name KRA_transport_certificate_subject_CN
- 使用您在上一步中检索到的 KRA 传输证书的序列号,将证书存储在文件中。例如,要将带有 12345 序列号的证书存储在
/home/user_name/kra.cert
文件中:$ pki cert-show 12345 --output /home/user_name/kra.cert
- 使用
CRMFPopClient
工具来:- 使用密钥归档创建 CSR:
- 切换到正在请求证书的用户或实体的证书数据库目录,例如:
$ cd /home/user_name/
- 使用
CRMFPopClient
实用程序创建 CRMF 请求,其中 RSA 私钥由 KRA 传输证书嵌套。例如,要将请求存储在/home/user_name/crmf.req
文件中:$ CRMFPopClient -d . -p token_password -n subject_DN -q POP_NONE \ -b /home/user_name/kra.cert -w "AES/CBC/PKCS5Padding" \ -v -o /home/user_name/crmf.req
请注意命令显示的私钥的 ID。后续步骤中需要 ID,作为第二个往返的配置文件中的request.privKeyId
参数的值。
- 为
CRMRequest
工具创建一个配置文件,如/home/user_name/cmc.cfg
,其内容如下:#numRequests: Total number of PKCS10 requests or CRMF requests. numRequests=1 #input: full path for the PKCS10 request or CRMF request, #the content must be in Base-64 encoded format input=/home/user_name/crmf.req #output: full path for the CMC request in binary format output=/home/user_name/cmc.req #tokenname: name of token where agent signing cert can be found #(default is internal) tokenname=internal #nickname: nickname for user certificate which will be used #to sign the CMC full request. nickname=signing_certificate #dbdir: directory for cert9.db, key4.db and pkcs11.txt dbdir=/home/user_name/.dogtag/nssdb/ #password: password for cert9.db which stores the agent certificate password=password #format: request format, either pkcs10 or crmf format=crmf
- 创建 CMC 请求:
$ CMCRequest /home/user_name/cmc.cfg
如果命令成功,CMCRequest 工具会将 CMC 请求存储在请求配置文件中的output
参数中指定的文件中。 - 为
HttpClient
创建配置文件,如/home/user_name/cmc-submit.cfg
,稍后的步骤中使用该文件向 CA 提交 CMC 请求。在创建的文件中添加以下内容:#host: host name for the http server host=server.example.com #port: port number port=8443 #secure: true for secure connection, false for nonsecure connection secure=true #input: full path for the enrollment request, the content must be in #binary format input=/home/user_name/cmc.req #output: full path for the response in binary format output=/home/user_name/cmc-response_round_1.bin #tokenname: name of token where TLS client authentication cert can be found #(default is internal) #This parameter will be ignored if secure=false tokenname=internal #dbdir: directory for cert9.db, key4.db and pkcs11.txt #This parameter will be ignored if secure=false dbdir=/home/user_name/.dogtag/nssdb/ #clientmode: true for client authentication, false for no client authentication #This parameter will be ignored if secure=false clientmode=true #password: password for cert9.db #This parameter will be ignored if secure=false and clientauth=false password=password #nickname: nickname for client certificate #This parameter will be ignored if clientmode=false nickname=signing_certificate #servlet: servlet name servlet=/ca/ee/ca/profileSubmitUserSignedCMCFull?profileId=caFullCMCUserSignedCert
- 向 CA 提交 CMC 请求:
$ HttpClient /home/user_name/cmc-submit.cfg
如果命令成功,HTTPClient 实用程序会将 CMC 响应存储在配置文件中output
参数指定的文件中。 - 通过将响应文件传递给
CMCResponse
工具来验证响应。例如:$ CMCResponse -d /home/user_name/.dogtag/nssdb/ -i /home/user_name/cmc-response_round_1.bin
如果第一个往返成功,CMCResponse
会显示类似如下的输出:Certificates: Certificate: Data: Version: v3 Serial Number: 0x1 Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11 Issuer: CN=CA Signing Certificate,OU=pki-tomcat,O=unknown00262DFC6A5E Security Domain Validity: Not Before: Wednesday, May 17, 2017 6:06:50 PM PDT America/Los_Angeles Not After: Sunday, May 17, 2037 6:06:50 PM PDT America/Los_Angeles Subject: CN=CA Signing Certificate,OU=pki-tomcat,O=unknown00262DFC6A5E Security Domain ... Number of controls is 3 Control #0: CMC encrypted POP OID: {1 3 6 1 5 5 7 7 9} encryptedPOP decoded Control #1: CMCStatusInfoV2 OID: {1 3 6 1 5 5 7 7 25} BodyList: 1 OtherInfo type: FAIL failInfo=POP required Control #2: CMC ResponseInfo requestID: 15
- 对于第二个往返,请为
DecryptedPOP
创建配置文件,如/home/user_name/cmc_DecryptedPOP.cfg
,稍后的步骤中使用它。在创建的文件中添加以下内容:#numRequests: Total number of PKCS10 requests or CRMF requests. numRequests=1 #input: full path for the PKCS10 request or CRMF request, #the content must be in Base-64 encoded format #this field is actually unused in 2nd trip input=/home/user_name/crmf.req #output: full path for the CMC request in binary format #this field is actually unused in 2nd trip output=/home/user_name/cmc2.req #tokenname: name of token where agent signing cert can be found #(default is internal) tokenname=internal #nickname: nickname for agent certificate which will be used #to sign the CMC full request. nickname=signing_certificate #dbdir: directory for cert9.db, key4.db and pkcs11.txt dbdir=/home/user_name/.dogtag/nssdb/ #password: password for cert9.db which stores the agent #certificate password=password #format: request format, either pkcs10 or crmf format=crmf decryptedPop.enable=true encryptedPopResponseFile=/home/user_name/cmc-response_round_1.bin request.privKeyId=-25aa0a8aad395ebac7e6a19c364f0dcb5350cfef decryptedPopRequestFile=/home/user_name/cmc.DecryptedPOP.req
- 创建
DecryptPOP
CMC 请求:$ CMCRequest /home/user_name/cmc.DecryptedPOP.cfg
如果命令成功,CMCRequest 工具会将 CMC 请求存储在请求配置文件中的decryptPopRequestFile
参数指定的文件中。 - 为
HttpClient
创建配置文件,如/home/user_name/decrypted_POP_cmc-submit.cfg
,稍后的步骤中使用它向 CA 提交DecryptedPOP
CMC 请求。在创建的文件中添加以下内容:#host: host name for the http server host=server.example.com #port: port number port=8443 #secure: true for secure connection, false for nonsecure connection secure=true #input: full path for the enrollment request, the content must be in binary format input=/home/user_name/cmc.DecryptedPOP.req #output: full path for the response in binary format output=/home/user_name/cmc-response_round_2.bin #tokenname: name of token where TLS client authentication cert can be found (default is internal) #This parameter will be ignored if secure=false tokenname=internal #dbdir: directory for cert9.db, key4.db and pkcs11.txt #This parameter will be ignored if secure=false dbdir=/home/user_name/.dogtag/nssdb/ #clientmode: true for client authentication, false for no client authentication #This parameter will be ignored if secure=false clientmode=true #password: password for cert9.db #This parameter will be ignored if secure=false and clientauth=false password=password #nickname: nickname for client certificate #This parameter will be ignored if clientmode=false nickname=singing_certificate #servlet: servlet name servlet=/ca/ee/ca/profileSubmitUserSignedCMCFull?profileId=caFullCMCUserCert
- 向 CA 提交
DecryptedPOP
CMC 请求:$ HttpClient /home/user_name/decrypted_POP_cmc-submit.cfg
如果命令成功,HTTPClient 实用程序会将 CMC 响应存储在配置文件中output
参数指定的文件中。 - 要将 CMC 响应转换为 PKCS the7 证书链,请将 CMC 响应文件传递给
CMCResponse
工具的-i
参数。例如:$ CMCResponse -i /home/user_name/cmc-response_round_2.bin -o /home/user_name/certs.p7
或者,要以 PEM 格式显示单个证书,请将-v
传递给实用程序。如果第二个往返成功,CMCResponse
会显示类似如下的输出:Certificates: Certificate: Data: Version: v3 Serial Number: 0x2D Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11 Issuer: CN=CA Signing Certificate,OU=pki-tomcat,O=unknown00262DFC6A5E Security Domain Validity: Not Before: Thursday, June 15, 2017 3:43:45 PM PDT America/Los_Angeles Not After: Tuesday, December 12, 2017 3:43:45 PM PST America/Los_Angeles Subject: CN=user_name,UID=example,OU=keyArchivalExample ... Number of controls is 1 Control #0: CMCStatusInfo OID: {1 3 6 1 5 5 7 7 1} BodyList: 1 Status: SUCCESS
5.6. 执行 Bulksuance
- 由于此过程被脚本化,因此需要设置多个变量来标识 CA (主机、端口)和用于身份验证的项目(代理证书和数据库)。例如,通过在终端中导出变量来为会话设置这些变量:
export d=/var/tmp/testDir export p=password export f=/var/tmp/server.csr.txt export nick="CA agent cert" export cahost=1.2.3.4 export caport=8443
注意本地系统必须具有有效的安全数据库,其中有一个代理的证书。设置数据库:- 从浏览器中导出或下载代理用户证书和密钥,并保存到文件中,如
agent.p12
。 - 如有必要,为安全数据库创建一个新目录。
mkdir ${d}
- 如有必要,创建新的安全数据库。
certutil -N -d ${d}
- 停止证书系统实例。
pki-server stop instance_name
- 使用 pk12util 导入证书。
# pk12util -i /tmp/agent.p12 -d ${d} -W p12filepassword
如果过程成功,该命令会打印以下输出:pk12util: PKCS12 IMPORT SUCCESSFUL
- 启动证书系统实例。
pki-server start instance_name
- 必须设置两个额外变量。用于标识用于处理请求的 CA 配置集的变量,以及用于发送 post 语句的变量,以提供配置文件表单的信息。
export post="cert_request_type=pkcs10&xmlOutput=true&profileId=caAgentServerCert&cert_request=" export url="/ca/ee/ca/profileSubmitSSLClient"
注意本例向 caAgentServerCert 配置集提交证书请求(在 post 语句的 profileId 项中标识)。可以使用任何证书配置文件,包括自定义配置集。 - 测试变量配置。
echo ${d} ${p} ${f} ${nick} ${cahost} ${caport} ${post} ${url}
- 使用(例如,)PCS 10Client 生成证书请求 :
time for i in {1..10}; do /usr/bin/PKCS10Client -d ${d} -p ${p} -o ${f}.${i} -s "cn=testms${i}.example.com"; cat ${f}.${i} >> ${f}; done perl -pi -e 's/\r\n//;s/\+/%2B/g;s/\//%2F/g' ${f} wc -l ${f}
- 使用 sslget 将步骤 4 中创建的批量证书请求文件提交到 CA 配置集接口。例如:
cat ${f} | while read thisreq; do /usr/bin/sslget -n "${nick}" -p ${p} -d ${d} -e ${post}${thisreq} -v -r ${url} ${cahost}:${caport}; done
5.7. 在 Cisco 路由器上注册证书
5.7.1. 启用 SCEP 注册
- 停止 CA 服务器,以便您可以编辑配置文件。
pki-server stop instance_name
- 打开 CA 的
CS.cfg
文件。vim
/var/lib/pki/instance_name/ca/conf/CS.cfg
- 将
ca.scep.enable
设置为 true。如果没有该参数,则使用 参数添加一行。ca.scep.enable=true
- 重启 CA 服务器。
pki-server start instance_name
5.7.2. 为 SCEP 配置安全设置
参数 | 描述 |
---|---|
ca.scep.encryptionAlgorithm | 设置默认或首选加密算法。 |
ca.scep.allowedEncryptionAlgorithms | 设置以逗号分隔的加密算法列表。 |
ca.scep.hashAlgorithm | 设置默认或首选哈希算法。 |
ca.scep.allowedHashAlgorithms | 设置以逗号分隔的哈希算法列表。 |
ca.scep.nickname | 提供用于 SCEP 通信的证书 nickname。除非设置了此参数,否则默认使用 CA 的密钥对和证书。 |
ca.scep.nonceSizeLimit | 设置 SCEP 请求允许的最大非ce 大小(以字节为单位)。默认值为 16 字节。 |
- 停止 CA 服务器,以便您可以编辑配置文件。
pki-server stop instance_name
- 打开 CA 的
CS.cfg
文件。vim
/var/lib/pki/instance_name/ca/conf/CS.cfg
- 设置所需的安全参数,如 表 5.1 “SCEP 安全性的配置参数” 中列出的。如果该参数不存在,请将其添加到
CS.cfg
文件中。ca.scep.encryptionAlgorithm=DES3 ca.scep.allowedEncryptionAlgorithms=DES3 ca.scep.hashAlgorithm=SHA1 ca.scep.allowedHashAlgorithms=SHA1,SHA256,SHA512 ca.scep.nickname=Server-Cert ca.scep.nonceSizeLimit=20
- 重启 CA 服务器。
pki-server start instance_name
5.7.3. 为 SCEP 注册配置路由器
- 路由器必须使用 IP 地址、DNS 服务器和路由信息进行配置。
- 路由器的日期/时间必须正确。
- 必须配置路由器的主机名和 dnsname。
5.7.4. 为路由器生成 SCEP 证书
- 选择一个随机 PIN。
- 将 PIN 和路由器的 ID 添加到
flatfile.txt
文件中,以便路由器可以直接对 CA 进行身份验证。例如:vim /var/lib/pki/instance_name/ca/conf/flatfile.txt UID:172.16.24.238 PWD:Uojs93wkfd0IS
务必在 PWD 行后插入空行。路由器的 IP 地址可以是 IPv4 地址或 IPv6 地址。第 10.2.4 节 “配置平面文件身份验证” 中描述了使用平面文件身份验证。 - 登录路由器的控制台。在本例中,路由器的名称为 scep :
scep>
- 启用特权命令。
scep> enable
- 进入配置模式。
scep# conf t
- 从 root 开始,为证书链中的每个 CA 导入 CA 证书。例如,以下命令将链中的两个 CA 证书导入到路由器中:
scep(config)# crypto ca trusted-root1 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 1 scep(config)# crypto ca trusted-root0 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 0
- 设置 CA 身份,并输入用于访问 SCEP 注册配置文件的 URL。例如,对于 CA:
scep(config)# crypto ca identity CA scep(ca-identity)# enrollment url http://server.example.com:8080/ca/cgi-bin scep(ca-identity)# crl optional
- 获取 CA 的证书。
scep(config)# crypto ca authenticate CA Certificate has the following attributes: Fingerprint: 145E3825 31998BA7 F001EA9A B4001F57 % Do you accept this certificate? [yes/no]: yes
- 生成 RSA 密钥对。
scep(config)# crypto key generate rsa The name for the keys will be: scep.server.example.com Choose the size of the key modulus in the range of 360 to 2048 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: Generating RSA keys ... [OK]
- 最后,在路由器上生成证书。
scep(config)# crypto ca enroll CA % % Start certificate enrollment .. % Create a challenge password. You will need to verbally provide this password to the CA Administrator in order to revoke your certificate. For security reasons your password will not be saved in the configuration. Please make a note of it. Password: secret Re-enter password: secret % The subject name in the certificate will be: scep.server.example.com % Include the router serial number in the subject name? [yes/no]: yes % The serial number in the certificate will be: 57DE391C % Include an IP address in the subject name? [yes/no]: yes % Interface: Ethernet0/0 % Request certificate from CA? [yes/no]: yes % Certificate request sent to Certificate Authority % The certificate request fingerprint will be displayed. % The 'show crypto ca certificate' command will also show the fingerprint. % Fingerprint:D89DB555 E64CC2F7 123725B4 3DBDF263 Jan 12 13:41:17.348: %CRYPTO-6-CERTRET: Certificate received from Certificate
- 关闭配置模式。
scep(config)# exit
- 为确保路由器已正确注册,请列出路由器中存储的所有证书。
scep# show crypto ca certificates Certificate Status: Available Certificate Serial Number: 0C Key Usage: General Purpose Issuer: CN = Certificate Authority O = Sfbay Red hat Domain 20070111d12 Subject Name Contains: Name: scep.server.example.com IP Address: 10.14.1.94 Serial Number: 57DE391C Validity Date: start date: 21:42:40 UTC Jan 12 2007 end date: 21:49:50 UTC Dec 31 2008 Associated Identity: CA CA Certificate Status: Available Certificate Serial Number: 01 Key Usage: Signature Issuer: CN = Certificate Authority O = Sfbay Red hat Domain 20070111d12 Subject: CN = Certificate Authority O = Sfbay Red hat Domain 20070111d12 Validity Date: start date: 21:49:50 UTC Jan 11 2007 end date: 21:49:50 UTC Dec 31 2008 Associated Identity: CA
5.7.5. 使用子 CA
scep(config)# crypto ca trusted-root1 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 1 scep(config)# crypto ca trusted-root0 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 0
scep(ca-root)# crl optional
5.7.6. 重新注册路由器
- 删除(零化)现有密钥。
scep(config)# crypto key zeroize rsa % Keys to be removed are named scep.server.example.com. Do you really want to remove these keys? [yes/no]: yes
- 删除 CA 身份。
scep(config)# no crypto ca identity CA % Removing an identity will destroy all certificates received from the related Certificate Authority. Are you sure you want to do this? [yes/no]: yes % Be sure to ask the CA administrator to revoke your certificates. No enrollment sessions are currently active.
5.7.7. 启用调试
scep# debug crypto pki callbacks
Crypto PKI callbacks debugging is onscep# debug crypto pki messages
Crypto PKI Msg debugging is onscep# debug crypto pki transactions
Crypto PKI Trans debugging is onscep#debug crypto verbose
verbose debug output debugging is on
5.7.8. 使用 SCEP 发布 ECC 证书
- 加密/解密证书 - 指定具有加密/解密功能的 RSA 证书;(以下示例中的scepRSAcert)
- 签名证书 - 获取在客户端中使用的 RSA 证书以签名目的,而不是自签名;(以下示例中的signingCert 证书)
sscep enroll -c ca.crt -e scepRSAcert.crt -k local.key -r local.csr -K sign.key -O sign.crt -E 3des -S sha256 -l cert.crt -u 'http://example.example.com:8080/ca/cgi-bin/pkiclient.exe'
5.8. 使用证书转换
5.8.1. 测试证书转换
openssl
验证其 SCT 扩展。CS.cfg
文件中的测试配置如下:
ca.certTransparency.mode=enabled ca.certTransparency.log.1.enable=true ca.certTransparency.log.1.pubKey=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEw8i8S7qiGEs9NXv0ZJFh6uuOm<snip> ca.certTransparency.log.1.url=http://ct.googleapis.com:80/testtube/ ca.certTransparency.log.1.version=1 ca.certTransparency.log.2.enable=true ca.certTransparency.log.2.pubKey=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKATl2B3SAbxyzGOfNRB+AytNTG<snip> ca.certTransparency.log.2.url=http://ct.googleapis.com:80/logs/crucible/ ca.certTransparency.log.2.version=1 ca.certTransparency.log.3.enable=false ca.certTransparency.log.3.pubKey=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEiKfWtuoWCPMEzSKySjMjXpo38W<snip> ca.certTransparency.log.3.url=http://ct.googleapis.com:80/logs/solera2020/ ca.certTransparency.log.3.version=1 ca.certTransparency.log.num=3
- 首先,生成一个 CSR,例如:
# PKCS10Client -d . -p passwd -l 2048 -n "cn=user.test.domain.com,OU=user-TEST,O=TestDomain" -o pkcs10-TLS.req
- 接下来,根据
CS.cfg
中的ca.certTransparency.mode
参数定义的 CT 模式将 CSR 提交到注册配置集:- 如果参数设为 enabled,则使用任何注册配置集
- 如果该参数设为 perProfile,请使用其中一个 CT 配置集:例如 caServerCertWithSCT
- 将发布的 b64 证书复制到一个文件中,如
.ct1.pem
。 - 将 pem 转换为二进制:
# AtoB ct1.pem ct1.bin
- 显示 DER 证书内容:
# openssl x509 -noout -text -inform der -in ct1.bin
- 观察 SCT 扩展存在,例如:
CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : B0:CC:83:E5:A5:F9:7D:6B:AF:7C:09:CC:28:49:04:87: 2A:C7:E8:8B:13:2C:63:50:B7:C6:FD:26:E1:6C:6C:77 Timestamp : Jun 11 23:07:14.146 2020 GMT Extensions: none Signature : ecdsa-with-SHA256 30:44:02:20:6E:E7:DC:D6:6B:A6:43:E3:BB:8E:1D:28: 63:C6:6B:03:43:4E:7A:90:0F:D6:2B:E8:ED:55:1D:5F: 86:0C:5A:CE:02:20:53:EB:75:FA:75:54:9C:9F:D3:7A: D4:E7:C6:6C:9B:33:2A:75:D8:AB:DE:7D:B9:FA:2B:19: 56:22:BB:EF:19:AD Signed Certificate Timestamp: Version : v1 (0x0) Log ID : C3:BF:03:A7:E1:CA:88:41:C6:07:BA:E3:FF:42:70:FC: A5:EC:45:B1:86:EB:BE:4E:2C:F3:FC:77:86:30:F5:F6 Timestamp : Jun 11 23:07:14.516 2020 GMT Extensions: none Signature : ecdsa-with-SHA256 30:44:02:20:4A:C9:4D:EF:64:02:A7:69:FF:34:4E:41: F4:87:E1:6D:67:B9:07:14:E6:01:47:C2:0A:72:88:7A: A9:C3:9C:90:02:20:31:26:15:75:60:1E:E2:C0:A3:C2: ED:CF:22:A0:3B:A4:10:86:D1:C1:A3:7F:68:CC:1A:DD: 6A:5E:10:B2:F1:8F
或者,通过运行 asn1 转储来验证 SCT:# openssl asn1parse -i -inform der -in ct1.bin
观察十六进制转储,例如:740:d=4 hl=4 l= 258 cons: SEQUENCE 744:d=5 hl=2 l= 10 prim: OBJECT :CT Precertificate SCTs 756:d=5 hl=3 l= 243 prim: OCTET STRING [HEX DUMP]:0481F000EE007500B0CC83E5A5F97D6B<snip>
第 6 章 使用和配置令牌管理系统:TPS 和 TKS
6.1. TPS 配置集
CS.cfg
中定义。
op.<explicit op>.<profile id>.<implicit op>.<key type>.*
op.enroll.userKey.keyGen.encryption.*
6.2. TPS 操作
显式操作
显式操作 是用户调用的操作。显式操作包括 Register
(op.enrollö
)、format
(op.formatö
)和 pinReset
(op.pinReset
)。
隐式操作
隐式操作是 一个操作,它会在处理显式操作时发生令牌的策略或状态。隐式操作包括 keyGen
(op.enroll.userKey.keyGenü
), renewal
(op.enroll.userKey.renewal047
), update.applet
(op.enroll.userKey.update.applet
), 和 key update (op.enroll.userKey.update.symmetricKeys945
)。
恢复
、serverKeygen
和 撤销
。
op.enroll.userKey.keyGen.encryption.serverKeygen.archive=true op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1 op.enroll.userKey.keyGen.encryption.serverKeygen.enable=true
1
吊销认证:
op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert=true op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert.reason=1
原因 | 代码 |
---|---|
未指定 | 0 |
keyCompromise | 1 |
CACompromise | 2 |
affiliationChanged | 3 |
被取代 | 4 |
cessationOfOperation | 5 |
certificateHold | 6 |
removeFromCRL | 8 |
privilegeWithdrawn | 9 |
AACompromise | 10 |
6.3. 令牌策略
;
"")分隔。每个策略都可以使用关键字 YES
或 NO
打开或关闭。以下列表中的每个策略都会被引入其默认值 - 如果策略字符串中没有设置,则 TPS 所执行的操作。
- RE_ENROLL=YES
- 此策略控制令牌是否允许重新注册操作。这允许重新注册令牌(使用证书)并授予新的令牌。如果设置为
NO
,服务器将在尝试重新注册时返回错误。此策略不需要特殊配置。注册将继续执行标准注册配置文件,该配置文件可能最初注册令牌。 - RENEW=NO;RENEW_KEEP_OLD_ENC_CERTS=YES
- 续订允许令牌生成的证书被续订,以放置到令牌中。如果将
RENEW
设置为YES
,则来自企业安全客户端(ESC)的简单注册将导致续订,而不是重新注册。RENEW_KEEP_OLD_ENC_CERTS
设置决定续订操作是否保留以前的加密证书版本。保留前面的证书后,用户可以访问使用旧证书加密的数据。将这个选项设置为NO
将意味着任何使用旧证书加密的证书都将无法再恢复。配置:op.enroll.userKey.renewal.encryption.ca.conn=ca1 op.enroll.userKey.renewal.encryption.ca.profileId=caTokenUserEncryptionKeyRenewal op.enroll.userKey.renewal.encryption.certAttrId=c2 op.enroll.userKey.renewal.encryption.certId=C2 op.enroll.userKey.renewal.encryption.enable=true op.enroll.userKey.renewal.encryption.gracePeriod.after=30 op.enroll.userKey.renewal.encryption.gracePeriod.before=30 op.enroll.userKey.renewal.encryption.gracePeriod.enable=false op.enroll.userKey.renewal.keyType.num=2 op.enroll.userKey.renewal.keyType.value.0=signing op.enroll.userKey.renewal.keyType.value.1=encryption op.enroll.userKey.renewal.signing.ca.conn=ca1 op.enroll.userKey.renewal.signing.ca.profileId=caTokenUserSigningKeyRenewal op.enroll.userKey.renewal.signing.certAttrId=c1 op.enroll.userKey.renewal.signing.certId=C1 op.enroll.userKey.renewal.signing.enable=true op.enroll.userKey.renewal.signing.gracePeriod.after=30 op.enroll.userKey.renewal.signing.gracePeriod.before=30 op.enroll.userKey.renewal.signing.gracePeriod.enable=false
这种类型的续订配置使用特定于续订的一些添加的设置,对基本userKey
标准注册配置集进行了镜像(mirror)。这个奇偶校验是必需的,因为我们开始在续订前,准确续订了最初注册到令牌的证书的数量和类型。 - FORCE_FORMAT=NO
- 如果启用,此策略会导致每个注册操作提示格式操作。这是一个最后一步选项,允许在无需将其返回到管理员的情况下重置令牌。如果设置为
YES
,用户发起的每个注册操作将导致格式发生,因此机密将令牌重置为格式化的状态。不需要额外的配置。发生一个简单的格式时,将执行标准格式操作的同一 TPS 配置文件。 - PIN_RESET=NO
- 此策略决定已经注册的令牌是否可以使用 ESC 执行显式"固定重置"更改。这个值必须设置为
YES
,否则尝试的操作将被拒绝,并显示错误。配置:op.enroll.userKey.pinReset.enable=true op.enroll.userKey.pinReset.pin.maxLen=10 op.enroll.userKey.pinReset.pin.maxRetries=127 op.enroll.userKey.pinReset.pin.minLen=4
在上例中,minLen
和maxLen
的设置会对所选密码长度进行限制,maxRetries
设置将令牌设置为仅在锁定前允许给定重试次数。
POLICYNAME>=YES
或 & lt;POLICYNAME> =NO
才能被 TPS 识别。
6.4. 令牌操作和策略处理
- æ ¼å¼�
- 格式操作(user-initiated)采用一个完全空白状态的令牌,如制造商提供的,并在其上载入 Coolkey 小程序。配置示例:
#specify that we want authentication for format. We almost always want this at true: op.format.userKey.auth.enable=true #specify the ldap authentication configuration, so TPS knows where to validate credentials: op.format.userKey.auth.id=ldap1 #specify the connection the the CA op.format.userKey.ca.conn=ca1 #specify id of the card manager applet on given token op.format.userKey.cardmgr_instance=A0000000030000 #specify if we need to match the visa cuid to the nist sp800sp derivation algorithm KDD value. Mostly will be false: op.format.userKey.cuidMustMatchKDD=false #enable ability to restrict key changoever to a specific range of key set: op.format.userKey.enableBoundedGPKeyVersion=true #enable the phone home url to write to the token: op.format.userKey.issuerinfo.enable=true #actual home url to write to token: op.format.userKey.issuerinfo.value=http://server.example.com:8080/tps/phoneHome #specify whether to request a login from the client. Mostly true, external reg may want this to be false: op.format.userKey.loginRequest.enable=true #Actual range of desired keyset numbers: op.format.userKey.maximumGPKeyVersion=FF op.format.userKey.minimumGPKeyVersion=01 #Whether or not to revoke certs on the token after a format, and what the reason will be if so: op.format.userKey.revokeCert=true op.format.userKey.revokeCert.reason=0 #This will roll back the reflected keyyset version of the token in the tokendb. After a failed key changeover operation. This is to keep the value in sync with reality in the tokendb. Always false, since this version of TPS avoids this situation now: op.format.userKey.rollbackKeyVersionOnPutKeyFailure=false #specify connection to the TKS: op.format.userKey.tks.conn=tks1 #where to get the actual applet file to write to the token: op.format.userKey.update.applet.directory=/usr/share/pki/tps/applets #Allows a completely blank token to be recognized by TPS. Mostly should be true: op.format.userKey.update.applet.emptyToken.enable=true #Always should be true, not supported: op.format.userKey.update.applet.encryption=true #Actual version of the applet file we want to upgrade to. This file will have a name something like: 1.4.54de7a99.ijc: op.format.userKey.update.applet.requiredVersion=1.4.54de790f #Symm key changeover: op.format.userKey.update.symmetricKeys.enable=false op.format.userKey.update.symmetricKeys.requiredVersion=1 #Make sure the token db is in sync with reality. Should always be true: op.format.userKey.validateCardKeyInfoAgainstTokenDB=true
- 注册
- 基本注册操作采用格式化的令牌,并将证书和密钥放在令牌中,以便定制令牌。以下配置示例将解释了如何控制它。示例显示了不处理续订和内部恢复的基本注册。此处未讨论的设置在 Format 部分中介绍,或者不重要。
op.enroll.userKey.auth.enable=true op.enroll.userKey.auth.id=ldap1 op.enroll.userKey.cardmgr_instance=A0000000030000 op.enroll.userKey.cuidMustMatchKDD=false op.enroll.userKey.enableBoundedGPKeyVersion=true op.enroll.userKey.issuerinfo.enable=true op.enroll.userKey.issuerinfo.value=http://server.example.com:8080/tps/phoneHome #configure the encryption cert and keys we want on the token: #connection the the CA, which issues the certs: op.enroll.userKey.keyGen.encryption.ca.conn=ca1 #Profile id we want the CA to use to issue our encrytion cert: op.enroll.userKey.keyGen.encryption.ca.profileId=caTokenUserEncryptionKeyEnrollment #These two cover the indexes of the certs written to the token. Each cert needs a unique index or “slot”. In our sample the enc cert will occupy slot 2 and the signing cert, shown later, will occupy slot 1. Avoid overlap with these numbers: op.enroll.userKey.keyGen.encryption.certAttrId=c2 op.enroll.userKey.keyGen.encryption.certId=C2 op.enroll.userKey.keyGen.encryption.cuid_label=$cuid$ #specify size of generated private key: op.enroll.userKey.keyGen.encryption.keySize=1024 op.enroll.userKey.keyGen.encryption.keyUsage=0 op.enroll.userKey.keyGen.encryption.keyUser=0 #specify pattern for what the label of the cert will look like when the cert nickname is displayed in browsers and mail clients: op.enroll.userKey.keyGen.encryption.label=encryption key for $userid$ #specify if we want to overwrite certs on a re-enrollment operation. This is almost always the case: op.enroll.userKey.keyGen.encryption.overwrite=true #The next several settings specify the capabilities that the private key on the final token will inherit. For instance this will determine if the cert can be used for encryption or digital signatures. There are settings for both the private and public key. op.enroll.userKey.keyGen.encryption.private.keyCapabilities.decrypt=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.derive=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.encrypt=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.private=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.sensitive=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.sign=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.signRecover=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.token=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.unwrap=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.verify=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.verifyRecover=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.wrap=false op.enroll.userKey.keyGen.encryption.privateKeyAttrId=k4 op.enroll.userKey.keyGen.encryption.privateKeyNumber=4 op.enroll.userKey.keyGen.encryption.public.keyCapabilities.decrypt=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.derive=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.encrypt=true op.enroll.userKey.keyGen.encryption.public.keyCapabilities.private=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.sensitive=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.sign=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.signRecover=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.token=true op.enroll.userKey.keyGen.encryption.public.keyCapabilities.unwrap=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.verify=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.verifyRecover=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.wrap=true #The following index numbers correspond to the index or slot that the private and public keys occupy. The common formula we use is that the public key index will be 2 * cert id + 1, and the private key index, shown above will be 2 * cert id. In this example the cert id is 2, so the key ids will be 4 and 5 respectively. When composing these, be careful not to create conflicts. This applies to the signing key section below. op.enroll.userKey.keyGen.encryption.publicKeyAttrId=k5 op.enroll.userKey.keyGen.encryption.publicKeyNumber=5 #specify if, when a certificate is slated for revocation, based on other rules, we want to check to see if some other token is using this cert in a shared situation. If this is set to true, and this situation is found the cert will not be revoked until the last token wants to revoke this cert: op.enroll.userKey.keyGen.encryption.recovery.destroyed.holdRevocationUntilLastCredential=false #specify, if we want server side keygen, if we want to have that generated key archived to the drm. This is almost always the case, since we want the ability to later recover a cert and its encryption private key back to a new token: op.enroll.userKey.keyGen.encryption.serverKeygen.archive=true #connection to drm to generate the key for us: op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1 #specify server side keygen of the encryption private key. This most often will be desired: op.enroll.userKey.keyGen.encryption.serverKeygen.enable=true #This setting tells us how many certs we want to enroll for this TPS profile, in the case “userKey”. Here we want 2 total certs. The next values then go on to index into the config what two types of certs we want, signing and encryption: op.enroll.userKey.keyGen.keyType.num=2 op.enroll.userKey.keyGen.keyType.value.0=signing op.enroll.userKey.keyGen.keyType.value.1=encryption #configure the signing cert and keys we want on the token the settings for these are similar to the encryption settings already discussed, except the capability flags presented below, since this is a signing key. op.enroll.userKey.keyGen.signing.ca.conn=ca1 op.enroll.userKey.keyGen.signing.ca.profileId=caTokenUserSigningKeyEnrollment op.enroll.userKey.keyGen.signing.certAttrId=c1 op.enroll.userKey.keyGen.signing.certId=C1 op.enroll.userKey.keyGen.signing.cuid_label=$cuid$ op.enroll.userKey.keyGen.signing.keySize=1024 op.enroll.userKey.keyGen.signing.keyUsage=0 op.enroll.userKey.keyGen.signing.keyUser=0 op.enroll.userKey.keyGen.signing.label=signing key for $userid$ op.enroll.userKey.keyGen.signing.overwrite=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.decrypt=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.derive=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.encrypt=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.private=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.sensitive=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.sign=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.signRecover=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.token=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.unwrap=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.verify=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.verifyRecover=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.wrap=false op.enroll.userKey.keyGen.signing.privateKeyAttrId=k2 op.enroll.userKey.keyGen.signing.privateKeyNumber=2 op.enroll.userKey.keyGen.signing.public.keyCapabilities.decrypt=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.derive=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.encrypt=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.private=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.sensitive=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.sign=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.signRecover=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.token=true op.enroll.userKey.keyGen.signing.public.keyCapabilities.unwrap=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.verify=true op.enroll.userKey.keyGen.signing.public.keyCapabilities.verifyRecover=true op.enroll.userKey.keyGen.signing.public.keyCapabilities.wrap=false op.enroll.userKey.keyGen.signing.publicKeyAttrId=k3 op.enroll.userKey.keyGen.signing.publicKeyNumber=3
- pin Reset
- 第 6.3 节 “令牌策略” 中讨论了固定重置的配置,因为 pin reset 依赖于一个策略来确定是否被法律执行。
- 续订
- 第 6.3 节 “令牌策略” 中讨论了续订的配置,因为续订依赖于一个策略来确定它是否是要执行还是在已经注册的令牌时执行。
- 恢复
- 当 TPS 用户界面的用户将一个之前活跃的令牌标记为不可屏蔽的状态,如 "lost" 或 "destroyed" 时,恢复会被隐式设置为 motion。发生这种情况后,同一用户新令牌的下一次注册将遵循以下配置,将用户的旧令牌从用户的旧令牌恢复到此新令牌。此操作的最终结果是用户会有一个新的物理令牌,该令牌可能包含从旧令牌中恢复的加密密钥,以便用户可以根据需要继续加密和解密数据。新的签名证书通常也会放置在这个令牌上,如下例所示。以下是可手动将令牌放置到 TPS 用户界面中的支持状态列表,如配置中所示:
tokendb._069=114
-DAMAGED (1)
: Corresponds 在恢复配置中销毁
。当令牌被物理损坏时使用。tokendb._070=114
-PERM_LOST (2)
: 在恢复配置中将 Corresponds 变为keyCompromise
。当令牌永久丢失时,使用。tokendb._071=114
-SUSPENDED (3)
: Corresponds toonHold
in the recovery configuration.当令牌被临时错误替换时,会使用它,但用户需要再次找到它。tokendb._072=114
-TERMINATED (6)
: Corresponds toterminated
in the recovery configuration.用于因为内部原因使令牌不足。
恢复配置示例:#When a token is marked destroyed, don’t revoke the certs on the token unless all other tokens do not have the certs included: op.enroll.userKey.keyGen.encryption.recovery.destroyed.holdRevocationUntilLastCredential=false #specify if we even want to revoke certs a token is marked destroyed: op.enroll.userKey.keyGen.encryption.recovery.destroyed.revokeCert=false #if we want to revoke any certs here, specify the reason for revocation that will be sent to the CA: op.enroll.userKey.keyGen.encryption.recovery.destroyed.revokeCert.reason=0 #speficy if we want to revoke expired certs when marking the token destroyed: op.enroll.userKey.keyGen.encryption.recovery.destroyed.revokeExpiredCerts=false
其他设置用于指定在对新令牌执行恢复操作时使用的静态恢复类型(当原始令牌被标记为销毁时)。支持以下方案:- 恢复 Last (
RecoverLast
):恢复要放置到令牌的最新加密证书。 - generate New Key and Recover Last (
GenerateNewKeyAndRecoverLast
): 与 Recover Last 相同,但还会生成新的加密证书并将其上传到令牌。然后,新令牌将有两个证书。 - 生成新密钥(
GenerateNewKey
):生成新的加密密钥并将其放在令牌中。不要恢复任何旧证书。
例如:op.enroll.userKey.keyGen.encryption.recovery.destroyed.scheme=RecoverLast
以下配置示例决定如何恢复标记为永久丢失的令牌:op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert=true op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert.reason=1 op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeExpiredCerts=false op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.scheme=GenerateNewKey # Section when a token is marked terminated. op.enroll.userKey.keyGen.encryption.recovery.terminated.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.encryption.recovery.terminated.revokeCert=true op.enroll.userKey.keyGen.encryption.recovery.terminated.revokeCert.reason=1 op.enroll.userKey.keyGen.encryption.recovery.terminated.revokeExpiredCerts=false op.enroll.userKey.keyGen.encryption.recovery.terminated.scheme=GenerateNewKey # This section details the recovery profile with respect to which certs and of what kind get recovered on the token. op.enroll.userKey.keyGen.recovery.destroyed.keyType.num=2 op.enroll.userKey.keyGen.recovery.destroyed.keyType.value.0=signing op.enroll.userKey.keyGen.recovery.destroyed.keyType.value.1=encryption
最后,以下示例决定了系统对旧令牌上的签名证书执行的操作。在大多数情况下,应使用GenerateNewKey
恢复方案以避免可能有多个可用的签名私钥副本(例如,在新令牌上恢复,另一个是被永久丢失但被其他人发现的旧令牌)。op.enroll.userKey.keyGen.recovery.keyCompromise.keyType.value.0=signing op.enroll.userKey.keyGen.recovery.keyCompromise.keyType.value.1=encryption op.enroll.userKey.keyGen.recovery.onHold.keyType.num=2 op.enroll.userKey.keyGen.recovery.onHold.keyType.value.0=signing op.enroll.userKey.keyGen.recovery.onHold.keyType.value.1=encryption op.enroll.userKey.keyGen.signing.recovery.destroyed.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.destroyed.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.destroyed.revokeCert.reason=0 op.enroll.userKey.keyGen.signing.recovery.destroyed.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.destroyed.scheme=GenerateNewKey op.enroll.userKey.keyGen.signing.recovery.keyCompromise.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.keyCompromise.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.keyCompromise.revokeCert.reason=1 op.enroll.userKey.keyGen.signing.recovery.keyCompromise.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.keyCompromise.scheme=GenerateNewKey op.enroll.userKey.keyGen.signing.recovery.onHold.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.onHold.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.onHold.revokeCert.reason=6 op.enroll.userKey.keyGen.signing.recovery.onHold.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.onHold.scheme=GenerateNewKey op.enroll.userKey.keyGen.signing.recovery.terminated.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.terminated.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.terminated.revokeCert.reason=1 op.enroll.userKey.keyGen.signing.recovery.terminated.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.terminated.scheme=GenerateNewKey # Configuration for the case when we mark a token “onHold” or temporarily lost op.enroll.userKeyTemporary.keyGen.encryption.recovery.onHold.revokeCert=true op.enroll.userKeyTemporary.keyGen.encryption.recovery.onHold.revokeCert.reason=0 op.enroll.userKeyTemporary.keyGen.encryption.recovery.onHold.scheme=RecoverLast op.enroll.userKeyTemporary.keyGen.recovery.onHold.keyType.num=2 op.enroll.userKeyTemporary.keyGen.recovery.onHold.keyType.value.0=signing op.enroll.userKeyTemporary.keyGen.recovery.onHold.keyType.value.1=encryption op.enroll.userKeyTemporary.keyGen.signing.recovery.onHold.revokeCert=true op.enroll.userKeyTemporary.keyGen.signing.recovery.onHold.revokeCert.reason=0 op.enroll.userKeyTemporary.keyGen.signing.recovery.onHold.scheme=GenerateNewKey
- 小程序更新
- 以下示例演示了如何配置 Coolkey applet 更新操作。此操作可以在格式、注册和 PIN 重置操作期间执行:
op.format.userKey.update.applet.directory=/usr/share/pki/tps/applets op.format.userKey.update.applet.emptyToken.enable=true op.format.userKey.update.applet.encryption=true op.format.userKey.update.applet.requiredVersion=1.4.54de790f
其中一些选项已在 Format 部分中演示。它们提供所需信息来确定是否允许小程序升级、在哪里查找小程序文件,以及用于将令牌升级到的小版本。requiredVersion
中的版本映射到目录内
的文件名。 - 密钥更新
- 此操作可在格式、注册和 PIN 重置操作期间发生,允许用户从制造商提供的默认平台密钥集版本升级其 Global Platform 密钥集版本。
- TPS
- 以下选项将指示 TPS 在代表给定令牌请求下一格式操作期间,将 keyset 从 1 升级到 2。完成后,TKS 必须生成将写入令牌的三个新密钥,之后,令牌必须与相同的 TPS 和 TKS 安装一起使用,否则它将会被锁定。
op.format.userKey.update.symmetricKeys.enable=true op.format.userKey.update.symmetricKeys.requiredVersion=2
您还可以指定一个低于 current 的版本来降级 keyset。 - TKS
- 如上所述,必须将 TKS 配置为生成要写入令牌的新密钥。首先,新的主密钥标识符
02
必须映射到 TKSCS.cfg
中的 PKCS the 对象别名,如下例所示:tks.mk_mappings.#02#01=internal:new_master tks.defKeySet.mk_mappings.#02#01=internal:new_master
以上会将密钥集号映射到 TKS NSS 数据库中存在的实际主密钥。主密钥由 ID (如01
)标识。TKS 将这些 ID 映射到映射的masterKeyId
部分中指定的 PKCS the 对象别名。因此,第一个数字被更新,因为主密钥版本已更新,第二个数字保持不变。当尝试从版本 1 升级到 2 时,映射决定了如何找到主密钥别名,该别名将用于派生新密钥集的 3 部分。上例中的internal
设置引用主密钥所在的令牌的名称。它还可能是具有名称(如nethsm
)的外部 HSM 模块。强大的new_master
是主密钥 nickname 本身的示例。
6.5. 内部注册
op.enroll.userKey.auth.enable=true op.enroll.userKey.auth.id=ldap1
op.enroll.userKey.keyGen.encryption.ca.conn=ca1 op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1
op.enroll.userKey.tks.conn=tks1
6.6. 外部注册
6.6.1. 启用外部注册
externalReg.allowRecoverInvalidCert.enable=true externalReg.authId=ldap1 externalReg.default.tokenType=externalRegAddToToken externalReg.delegation.enable=true externalReg.enable=true externalReg.recover.byKeyID=false externalReg.format.loginRequest.enable=true externalReg.mappingResolver=keySetMappingResolver
6.6.2. 自定义用户 LDAP 记录属性名称
auths.instance.ldap1.externalReg.certs.recoverAttributeName=certsToAdd auths.instance.ldap1.externalReg.cuidAttributeName=tokenCUID auths.instance.ldap1.externalReg.tokenTypeAttributeName=tokenType
6.6.3. 配置 certsToAdd 属性
certsToAdd
属性采用以下格式的多个值:
<cert serial # in decimal>,<CA connector ID>,<key ID>,<kra connector ID>
59,ca1,0,kra1
certsToAdd
属性时,TPS 假设问题中的证书已存在于令牌中,并且应保留它。此概念称为 Key Retention。
tokenType: externalRegAddToToken certstoadd: 59,ca1,0,kra1 certstoadd: 134,ca1,0,kra1 Certstoadd: 24,ca1
6.6.4. 令牌与强制匹配的用户
tokencuid
),则不强制执行 CUID 匹配。
Tokencuid: a10192030405028001c0
certstoadd: 59,ca1
,0,kra1
6.6.5. 委派支持
- 身份验证证书/密钥: CN 包含委托的名称和唯一 ID。主题备用名称(SAN)扩展包含领导名称(UPN)。
- 加密密钥 :执行加密证书的精确副本。
- 签名证书: CN 包含委托的名称和唯一 ID。SAN 包含参与的 RFC822Name。
externalReg.delegation.enable=true
/var/lib/pki/instance_name/tps/conf/CS.cfg
文件中的 op.enroll.delegateISEtoken.keyGen.encryption.ca.profileId
参数设置为 caTokenUserDelegateAuthKeyEnrollment :
op.enroll.delegateISEtoken.keyGen.encryption.ca.profileId=caTokenUserDelegateAuthKeyEnrollment
6.6.6. SAN 和 DN 模式
auths.instance.<authID > .ldapStringAttributes
指定在身份验证过程中将检索哪些属性。例如:
auths.instance.ldap1.ldapStringAttributes=mail,cn,uid,edipi,pcc,firstname,lastname,exec-edipi,exec-pcc,exec-mail,certsToAdd,tokenCUID,tokenType
$auth. <attribute name> $
。例如:
op.enroll.delegateIEtoken.keyGen.authentication.SANpattern=$auth.exec-edipi$.$auth.exec-pcc$@EXAMPLE.com op.enroll.delegateIEtoken.keyGen.authentication.dnpattern=cn=$auth.firstname$.$auth.lastname$.$auth.edipi$,e=$auth.mail$,o=TMS Org
- 在 TPS 上,在配置集 delegateIEtoken 中
op.enroll.delegateIEtoken.keyGen.authentication.ca.profileId=caTokenUserDelegateAuthKeyEnrollment
- 在 CA 上,在注册配置集 caTokenUserDelegateAuthKeyEnrollment 中
subjectDNInputImpl
插件必须指定为其中一个输入,以便允许上述 TPS 配置集指定 DN:input.i2.class_id=subjectDNInputImpl input.i2.name=subjectDNInputImpl
同样,要允许由上述 TPS 配置文件指定 SAN,必须指定subjectAltNameExtInputImpl
插件:input.i3.class_id=subjectAltNameExtInputImpl input.i3.name=subjectAltNameExtInputImpl
必须同时指定subjAltExtpattern
:policyset.set1.p6.default.params.subjAltExtPattern_0=(UTF8String)1.3.6.1.4.1.311.20.2.3,$request.req_san_pattern_0$
在上例中,OID1.3.6.1.4.1.311.20.2.3
是用户主体名称(UPN)的 OID,request.req_san_pattern_0
是delegateIEtoken
SAN 模式中指定的第一个 SAN 模式。
SANpattern
中指定多个 SAN,用逗号分开("、
")。在 CA 端,需要以以下格式定义对应的 subjAltExtPattern
数量:
policyset.<policy set id>.<policy id>.default.params.subjAltExtPattern_<ordered number>=
policyset.set1.p6.default.params.subjAltExtPattern_0= policyset.set1.p6.default.params.subjAltExtPattern_1= ...
例 6.1. SANpattern 和 DNpattern 配置
givenName: user1a mail: user1a@example.org firstname: user1a edipi: 123456789 pcc: AA exec-edipi: 999999999 exec-pcc: BB exec-mail: user1b@EXAMPLE.com tokenType: delegateISEtoken certstoadd: 59,ca1,0,kra1
delegateIEtoken
包含:
SAN 特征
:op.enroll.delegateISEtoken.keyGen.authentication.SANpattern=$auth.exec-edipi$.$auth.exec-pcc$@EXAMPLE.com
DNPattern
:op.enroll.delegateISEtoken.keyGen.authentication.dnpattern=cn=$auth.firstname$.$auth.lastname$.$auth.edipi$,e=$auth.mail$,o=TMS Org
caTokenUserDelegateAuthKeyEnrollment
包含:
input.i2.class_id=subjectDNInputImpl input.i2.name=subjectDNInputImpl input.i3.class_id=subjectAltNameExtInputImpl input.i3.name=subjectAltNameExtInputImpl policyset.set1.p6.constraint.class_id=noConstraintImpl policyset.set1.p6.constraint.name=No Constraint policyset.set1.p6.default.class_id=subjectAltNameExtDefaultImpl policyset.set1.p6.default.name=Subject Alternative Name Extension Default policyset.set1.p6.default.params.subjAltExtGNEnable_0=true policyset.set1.p6.default.params.subjAltExtPattern_0=(UTF8String)1.3.6.1.4.1.311.20.2.3,$request.req_san_pattern_0$ policyset.set1.p6.default.params.subjAltExtType_0=OtherName policyset.set1.p6.default.params.subjAltNameExtCritical=false policyset.set1.p6.default.params.subjAltNameNumGNs=1
Subject: CN=user1a..123456789,E=user1a@example.org,O=TMS Org Identifier: Subject Alternative Name - 2.5.29.17 Critical: no Value: OtherName: (UTF8String)1.3.6.1.4.1.311.20.2.3,999999999.BB@EXAMPLE.com
6.7. 映射解决程序配置
FilterMappingResolver
。本节将涵盖其配置。
6.7.1. Key Set Mapping Resolver
externalReg.mappingResolver=<keySet mapping resolver name>
externalReg.mappingResolver=keySetMappingResolver
mappingResolver.keySetMappingResolver.class_id=filterMappingResolverImpl mappingResolver.keySetMappingResolver.mapping.0.filter.appletMajorVersion=0 mappingResolver.keySetMappingResolver.mapping.0.filter.appletMinorVersion=0 mappingResolver.keySetMappingResolver.mapping.0.filter.keySet= mappingResolver.keySetMappingResolver.mapping.0.filter.tokenATR= mappingResolver.keySetMappingResolver.mapping.0.filter.tokenCUID.end=a1000000000000000000 mappingResolver.keySetMappingResolver.mapping.0.filter.tokenCUID.start=a0000000000000000000 mappingResolver.keySetMappingResolver.mapping.0.target.keySet=defKeySet mappingResolver.keySetMappingResolver.mapping.1.filter.appletMajorVersion=1 mappingResolver.keySetMappingResolver.mapping.1.filter.appletMinorVersion=1 mappingResolver.keySetMappingResolver.mapping.1.filter.keySet= mappingResolver.keySetMappingResolver.mapping.1.filter.tokenATR=1234 mappingResolver.keySetMappingResolver.mapping.1.filter.tokenCUID.end= mappingResolver.keySetMappingResolver.mapping.1.filter.tokenCUID.start= mappingResolver.keySetMappingResolver.mapping.1.target.keySet=defKeySet mappingResolver.keySetMappingResolver.mapping.2.filter.appletMajorVersion= mappingResolver.keySetMappingResolver.mapping.2.filter.appletMinorVersion= mappingResolver.keySetMappingResolver.mapping.2.filter.keySet= mappingResolver.keySetMappingResolver.mapping.2.filter.tokenATR= mappingResolver.keySetMappingResolver.mapping.2.filter.tokenCUID.end= mappingResolver.keySetMappingResolver.mapping.2.filter.tokenCUID.start= mappingResolver.keySetMappingResolver.mapping.2.target.keySet=jForte mappingResolver.keySetMappingResolver.mapping.order=0,1,2
0
、1
和 2
的三个映射。它们使用示例中的 mappingResolver.keySetMappingResolver.mapping.order=0,1,2
行按顺序排序。这顺序意味着首先针对映射过滤器 0
运行输入参数;只有它们与此过滤器不匹配时,才会尝试映射顺序中的下一个参数。例如,如果评估有以下特征的令牌:
CUID=a0000000000000000011 appletMajorVersion=0 appletMinorVersion=0
0
并分配其目标(配置为 defKeySet
),因为小程序版本匹配,CUID 不在那个映射的 CUID 启动和结束范围内。
CUID=b0000000000000000000 ATR=2222 appletMajorVersion=1 appletMinorVersion=1
0,
因为它不在指定的 CUID 范围之外。它还无法映射 1
,因为小程序版本匹配,但 ATR 不会。以上令牌将被分配来映射 2
及其目标 jForte
。
2
没有为其任何过滤器分配。这会导致映射与所有令牌匹配,有效使其成为"默认"值。类似的映射必须以映射顺序最后指定,因为永远不会评估后的任何其他映射。
6.7.2. 令牌类型(TPS) Mapping Resolver
tokenType
映射解析器: formatProfileMappingResolver
、enrollProfileMappingResolver
、pinResetProfileMappingResolver
。与上一节中讨论的外部注册问题单相比,内部注册令牌类型实际上是从定义的映射解析器计算的。
op.<op>.mappingResolver=<mapping resolver name>
op.enroll.mappingResolver=enrollProfileMappingResolver
enrollProfileMappingResolver
:
mappingResolver.enrollProfileMappingResolver.class_id=filterMappingResolverImpl mappingResolver.enrollProfileMappingResolver.mapping.0.filter.appletMajorVersion=1 mappingResolver.enrollProfileMappingResolver.mapping.0.filter.appletMinorVersion= mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenATR= mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenCUID.end=b1000000000000000000 mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenCUID.start=b0000000000000000000 mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenType=userKey mappingResolver.enrollProfileMappingResolver.mapping.0.target.tokenType=userKey mappingResolver.enrollProfileMappingResolver.mapping.1.filter.appletMajorVersion=1 mappingResolver.enrollProfileMappingResolver.mapping.1.filter.appletMinorVersion= mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenATR= mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenCUID.end=a0000000000000001000 mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenCUID.start=a0000000000000000000 mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenType=soKey mappingResolver.enrollProfileMappingResolver.mapping.1.target.tokenType=soKey mappingResolver.enrollProfileMappingResolver.mapping.2.filter.appletMajorVersion= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.appletMinorVersion= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenATR= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenCUID.end= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenCUID.start= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenType= mappingResolver.enrollProfileMappingResolver.mapping.2.target.tokenType=userKey mappingResolver.enrollProfileMappingResolver.mapping.order=1,0,2
enrollProfileMappingResolver
定义三个映射。映射名为 0
、1
和 2
。mappingResolver.enrollProfileMappingResolver.mapping.order=1,0,2
行定义映射将处理的顺序。如果令牌与映射匹配,则不会评估顺序中的进一步映射;如果没有与映射不匹配,则顺序的下一个映射将会被尝试。
CUID=a0000000000000000011 appletMajorVersion=1 appletMinorVersion=0 extension: tokenType=soKey
1
的过滤器,因为 applet 版本匹配,CUID 在指定的 start 和 end 范围内会失败,扩展 tokenType
匹配。因此,此令牌将被分配该映射的目标 - soKey
。
CUID=b0000000000000000010 appletMajorVersion=1 appletMinorVersion=1
1
,因为 CUID 不在指定的范围之外。然后,它还会失败映射 0,
因为缺少 tokenType
扩展。然后,此令牌将匹配映射 2
,因为它没有指定的过滤器以匹配所有与之前过滤器不匹配的令牌。
6.8. 身份验证配置
UidPwdDirAuthentication
)基于目录的身份验证。使用以下模式在 CS.cfg
文件中定义身份验证实例:
auths.instance.<auths ID>.*
op.enroll.userKey.auth.id=ldap1
auths.impl.UidPwdDirAuth.class=com.netscape.cms.authentication.UidPwdDirAuthentication auths.instance.ldap1.pluginName=UidPwdDirAuth auths.instance.ldap1.authCredName=uid auths.instance.ldap1.dnpattern= auths.instance.ldap1.externalReg.certs.recoverAttributeName=certsToAdd auths.instance.ldap1.externalReg.cuidAttributeName=tokenCUID auths.instance.ldap1.externalReg.tokenTypeAttributeName=tokenType auths.instance.ldap1.ldap.basedn=dc=sjc,dc=example,dc=com auths.instance.ldap1.ldap.ldapauth.authtype=BasicAuth auths.instance.ldap1.ldap.ldapauth.bindDN= auths.instance.ldap1.ldap.ldapauth.bindPWPrompt=ldap1 auths.instance.ldap1.ldap.ldapauth.clientCertNickname=subsystemCert cert-pki-tomcat auths.instance.ldap1.ldap.ldapconn.host=host1.EXAMPLE.com auths.instance.ldap1.ldap.ldapconn.port=389 auths.instance.ldap1.ldap.ldapconn.secureConn=False auths.instance.ldap1.ldap.ldapconn.version=3 auths.instance.ldap1.ldap.maxConns=15 auths.instance.ldap1.ldap.minConns=3 auths.instance.ldap1.ldapByteAttributes= auths.instance.ldap1.ldapStringAttributes=mail,cn,uid,edipi,pcc,firstname,lastname,exec-edipi,exec-pcc,exec-mail,certsToAdd,tokenCUID,tokenType auths.instance.ldap1.ldapStringAttributes._000=################################# auths.instance.ldap1.ldapStringAttributes._001=# For isExternalReg auths.instance.ldap1.ldapStringAttributes._002=# attributes will be available as auths.instance.ldap1.ldapStringAttributes._003=# $<attribute>$ auths.instance.ldap1.ldapStringAttributes._004=# attributes example: auths.instance.ldap1.ldapStringAttributes._005=#mail,cn,uid,edipi,pcc,firstname,lastname,exec-edipi,exec-pcc,exec-mail,certsToAdd,tokenCUID,tokenType auths.instance.ldap1.ldapStringAttributes._006=################################# auths.instance.ldap1.pluginName=UidPwdDirAuth auths.instance.ldap1.ui.description.en=This authenticates user against the LDAP directory. auths.instance.ldap1.ui.id.PASSWORD.credMap.authCred=pwd auths.instance.ldap1.ui.id.PASSWORD.credMap.msgCred.extlogin=PASSWORD auths.instance.ldap1.ui.id.PASSWORD.credMap.msgCred.login=password auths.instance.ldap1.ui.id.PASSWORD.description.en=LDAP Password auths.instance.ldap1.ui.id.PASSWORD.name.en=LDAP Password auths.instance.ldap1.ui.id.UID.credMap.authCred=uid auths.instance.ldap1.ui.id.UID.credMap.msgCred.extlogin=UID auths.instance.ldap1.ui.id.UID.credMap.msgCred.login=screen_name auths.instance.ldap1.ui.id.UID.description.en=LDAP User ID auths.instance.ldap1.ui.id.UID.name.en=LDAP User ID auths.instance.ldap1.ui.retries=3 auths.instance.ldap1.ui.title.en=LDAP Authentication
UidPwdDirAuthentication
身份验证实例相似,因为它们都由同一插件处理。但是,TPS 在 CA 配置之上需要几个额外的参数。
auths.instance.ldap1.ui.id.UID.name.en=LDAP 用户 ID
和 auths.instance.ldap1.ui.id.PASSWORD.name.en=LDAP 密码
参数控制;此配置告知客户端将 UID/密码对显示为"LDAP 用户 ID"和"LDAP 密码"。这两个参数均可自定义。
credMap.authCred
条目配置内部身份验证插件如何接受提供给它的信息,而 credMap.msgCred
条目配置此信息如何传递给 TPS。这些字段允许您使用自定义插件实现,并且应保留为默认值,除非您使用自定义身份验证插件。
6.9. 连接器
tps.connector.ca1.enable=true tps.connector.ca1.host=host1.EXAMPLE.com tps.connector.ca1.maxHttpConns=15 tps.connector.ca1.minHttpConns=1 tps.connector.ca1.nickName=subsystemCert cert-pki-tomcat tps.connector.ca1.port=8443 tps.connector.ca1.timeout=30 tps.connector.ca1.uri.enrollment=/ca/ee/ca/profileSubmitSSLClient tps.connector.ca1.uri.getcert=/ca/ee/ca/displayBySerial tps.connector.ca1.uri.renewal=/ca/ee/ca/profileSubmitSSLClient tps.connector.ca1.uri.revoke=/ca/ee/subsystem/ca/doRevoke tps.connector.ca1.uri.unrevoke=/ca/ee/subsystem/ca/doUnrevoke tps.connector.kra1.enable=true tps.connector.kra1.host=host1.EXAMPLE.com tps.connector.kra1.maxHttpConns=15 tps.connector.kra1.minHttpConns=1 tps.connector.kra1.nickName=subsystemCert cert-pki-tomcat tps.connector.kra1.port=8443 tps.connector.kra1.timeout=30 tps.connector.kra1.uri.GenerateKeyPair=/kra/agent/kra/GenerateKeyPair tps.connector.kra1.uri.TokenKeyRecovery=/kra/agent/kra/TokenKeyRecovery tps.connector.tks1.enable=true tps.connector.tks1.generateHostChallenge=true tps.connector.tks1.host=host1.EXAMPLE.com tps.connector.tks1.keySet=defKeySet tps.connector.tks1.maxHttpConns=15 tps.connector.tks1.minHttpConns=1 tps.connector.tks1.nickName=subsystemCert cert-pki-tomcat tps.connector.tks1.port=8443 tps.connector.tks1.serverKeygen=true tps.connector.tks1.timeout=30 tps.connector.tks1.tksSharedSymKeyName=sharedSecret tps.connector.tks1.uri.computeRandomData=/tks/agent/tks/computeRandomData tps.connector.tks1.uri.computeSessionKey=/tks/agent/tks/computeSessionKey tps.connector.tks1.uri.createKeySetData=/tks/agent/tks/createKeySetData tps.connector.tks1.uri.encryptData=/tks/agent/tks/encryptData
op.enroll.userKey.keyGen.signing.ca.conn=ca1
6.10. 吊销路由配置
tps.connCAList=ca1,ca2
nssdb
并设置信任:
#
cd <TPS instance directory>/alias
#
certutil -d . -A -n <CA signing cert nickname> -t “CT,C,C” -i <CA signing cert b64 file name>
tps.connector.ca1.caNickname=caSigningCert cert-pki-tomcat CA
tps.connector.ca1.caSKI=i9wOnN0QZLkzkndAB1MKMcjbRP8=
6.11. 设置服务器端密钥生成
- KRA 的 TPS 连接器参数:
tps.connector.kra1.enable=true tps.connector.kra1.host=host1.EXAMPLE.com tps.connector.kra1.maxHttpConns=15 tps.connector.kra1.minHttpConns=1 tps.connector.kra1.nickName=subsystemCert cert-pki-tomcat tps.connector.kra1.port=8443 tps.connector.kra1.timeout=30 tps.connector.kra1.uri.GenerateKeyPair=/kra/agent/kra/GenerateKeyPair tps.connector.kra1.uri.TokenKeyRecovery=/kra/agent/kra/TokenKeyRecovery
- 用于服务器端密钥生成的 TPS 配置文件特定的参数:
op.enroll.userKey.keyGen.encryption.serverKeygen.archive=true op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1 op.enroll.userKey.keyGen.encryption.serverKeygen.enable=true
将serverKeygen.enable=true
选项的serverKeygen.archive
设置为生效。重要LunaSA HSM 不支持 RSA 加密的密钥大小比 2048 位小。例如,若要配置密钥大小为 2048 位,请在/var/lib/pki/instance_name/tps/conf/CS.cfg
文件中设置以下参数:op.enroll.userKey.keyGen.encryption.keySize=2048
- TKS 配置:
- 以下配置用于 TKS 和 KRA (通过 TPS)之间的通信的传输证书的别名:
tks.drm_transport_cert_nickname=transportCert cert-pki-tomcat KRA
引用的传输证书还必须存在于 TKS 实例安全模块中。例如:transportCert cert-pki-tomcat KRA u,u,u
- KRA 配置
- 根据 PKCS the 令牌、参数
kra.keygen.temporaryPairs
、kra.keygen.sensitivePairs
和kra.keygen.extractablePairs
可以自定义密钥生成选项。这些参数都默认设置为false
。这些参数的以下值已使用 Red Hat Certificate System 支持的一些安全模块进行测试:- NSS (当使用 FIPS 模式时):
kra.keygen.extractablePairs=true
- nCipher nShield Connect 6000 (默认情况下不要指定):
- 指定 RSA 密钥:
kra.keygen.temporaryPairs=true
(不要指定任何其他参数。)生成 ECC 密钥:kra.keygen.temporaryPairs=true kra.keygen.sensitivePairs=false kra.keygen.extractablePairs=true
- lunasa CKE - 密钥导出模型(非FIPS 模式):
kra.keygen.temporaryPairs=true kra.keygen.sensitivePairs=true kra.keygen.extractablePairs=true
6.12. 设置新密钥集
- TKS 配置
- 默认密钥集使用
/var/lib/pki/instance_name/tks/conf/CS.cfg
文件中的以下选项在 TKS 中配置:tks.defKeySet._000=## tks.defKeySet._001=## Axalto default key set: tks.defKeySet._002=## tks.defKeySet._003=## tks.defKeySet.mk_mappings.#02#01=<tokenname>:<nickname> tks.defKeySet._004=## tks.defKeySet.auth_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.defKeySet.kek_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.defKeySet.mac_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.defKeySet.nistSP800-108KdfOnKeyVersion=00 tks.defKeySet.nistSP800-108KdfUseCuidAsKdd=false
以上配置定义了特定于某些类型或可用于 TMS 中的令牌类的设置。最重要的部分是 3 个开发人员或(开箱即用)会话密钥,用于在对称密钥切换发生前创建安全频道。其他类型的键可能具有这些键的不同默认值。描述nistSP800
键离散方法的设置控制此方法是否使用标准 Visa 方法。具体来说,tks.defKeySet.nistSP800-108KdfOnKeyVersion
选项的值决定将使用 NIST 版本。nistSP800-108KdfUseCuidAsKdd
选项允许您在处理过程中使用 CUID 的传统密钥 ID 值。较新的 KDD 值最常被使用,因此默认禁用这个选项(默认为 )。这可让您配置一个新的密钥集来启用对新密钥类别的支持。
例 6.2. 为
jForte
类启用支持要启用对jForte
类的支持,请设置:tks.jForte._000=## tks.jForte._001=## SAFLink's jForte default key set: tks.jForte._002=## tks.jForte._003=## tks.jForte.mk_mappings.#02#01=<tokenname>:<nickname> tks.jForte._004=## tks.jForte.auth_key=#30#31#32#33#34#35#36#37#38#39#3a#3b#3c#3d#3e#3f tks.jForte.kek_key=#50#51#52#53#54#55#56#57#58#59#5a#5b#5c#5d#5e#5f tks.jForte.mac_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.jForte.nistSP800-108KdfOnKeyVersion=00 tks.jForte.nistSP800-108KdfUseCuidAsKdd=false
请注意,与上例相比,3 静态会话键的不同。证书系统支持 Giesecke & Devrient (G&D) Smart Cafe 6 智能卡的安全通道协议 03 (SCP03)。要在 TKS 中为这些智能卡启用 SCP03 支持,请在/var/lib/pki/instance_name/tks/conf/CS.cfg
文件中设置:tks.defKeySet.prot3.divers=emv tks.defKeySet.prot3.diversVer1Keys=emv tks.defKeySet.prot3.devKeyType=DES3 tks.defKeySet.prot3.masterKeyType=DES3
- TPS 配置
- 当支持的客户端试图对令牌执行操作时,必须将 TPS 配置为识别新密钥集。默认
defKeySet
最常被使用。确定 TPS 中的keySet
的主要方法涉及 第 6.7 节 “映射解决程序配置”。如需了解建立这个解析器机制所需的准确设置,请参阅链接部分。如果没有 KeySet Mapping Resolver,则 TPS 有几个回退方法来确定正确的keySet
:- 您可以将
tps.connector.tks1.keySet=defKeySet
添加到 TPS 的CS.cfg
配置文件中。 - 某些客户端可能会被配置为显式传递所需的
keySet
值。但是,企业级安全客户端目前没有此功能。 - 当 TPS 根据所需方法计算正确的
keySet
时,对 TKS 的所有请求都通过keySet
值创建安全频道。然后,TKS 可以使用自己的keySet
配置(上面描述)来确定如何继续。
6.13. 设置新主密钥
过程 6.1. 创建新主密钥
- 获取内部访问 TKS 安全数据库所需的 PIN:
#
cat /var/lib/pki/pki-tomcat/tks/conf/password.conf internal=649713464822 internaldb=secret12 replicationdb=-752230707 - 打开 TKS 实例
的别名/
目录:#
cd /var/lib/pki/pki-tomcat/alias - 使用 tkstool 工具生成新的主密钥。例如:
#
tkstool -M -n new_master -d /var/lib/pki/pki-tomcat/alias -h <token_name> Enter Password or Pin for "NSS Certificate DB": Generating and storing the master key on the specified token . . . Naming the master key "new_master" . . . Computing and displaying KCV of the master key on the specified token . . . new_master key KCV: CA5E 1764 - 验证密钥是否已正确添加到数据库中:
#
tkstool -L -d . slot: NSS User Private Key and Certificate Services token: NSS Certificate DB Enter Password or Pin for "NSS Certificate DB": <0> new_master
6.13.1. 生成和传输 Wrapped Master 密钥(Key Ceremony)
过程 6.2. 生成和传输 Wrapped 主密钥
- 获取访问 Token Key Service 安全数据库所需的内部 PIN:
#
cat /var/lib/pki/pki-tomcat/tks/conf/password.conf internal=649713464822 internaldb=secret12 replicationdb=-752230707 - 打开 TKS 实例
别名/
目录:#
cd /var/lib/pki/pki-tomcat/alias - 创建名为 transport 的
传输
密钥:#
tkstool -T -d . -n transport注意tkstool 工具打印每个生成的三个会话键的密钥共享和 KCV 值。将它们保存到文件中,因为有必要在此流程以后在新数据库中重新生成传输密钥,并在丢失时重新生成密钥。 - 出现提示时,填写数据库密码。然后,按照屏幕说明生成随机 seed。
A random seed must be generated that will be used in the creation of your key. One of the easiest ways to create a random seed is to use the timing of keystrokes on a keyboard. To begin, type keys on the keyboard until this progress meter is full. DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD! Continue typing until the progress meter is full: |************************************************************| Finished. Type the word "proceed" and press enter
- 下一提示将生成一系列会话密钥。按照屏幕说明进行操作,直到最终信息:
Successfully generated, stored, and named the transport key!
- 使用传输密钥生成并嵌套主密钥,并将其存储在名为
file
的文件中:#
tkstool -W -d . -n new_master -t transport -o file Enter Password or Pin for "NSS Certificate DB": Retrieving the transport key (for wrapping) from the specified token . . . Generating and storing the master key on the specified token . . . Naming the master key "new_master" . . . Successfully generated, stored, and named the master key! Using the transport key to wrap and store the master key . . . Writing the wrapped data (and resident master key KCV) into the file called "file" . . . wrapped data: 47C0 06DB 7D3F D9ED FE91 7E6F A7E5 91B9 master key KCV: CED9 4A7B (computed KCV of the master key residing inside the wrapped data) - 将嵌套的主密钥复制到适当的位置或工具中。
- 如有必要,在 HSM 或工具中生成新的安全数据库:
#
tkstool -N -d <directory>或者,添加-I
选项来生成与最初在新数据库中生成的密钥相同的密钥。以这种方式重新生成传输密钥要求您为此流程前面生成的每个会话密钥输入会话密钥共享和 KCV。#
tkstool -I -d <directory> -n verify_transport - 使用传输密钥解压缩存储在文件中的主密钥。提示时提供安全数据库 PIN:
#
tkstool -U -d directory -n new_master -t verify_transport -i file Enter Password or Pin for "NSS Certificate DB": Retrieving the transport key from the specified token (for unwrapping) . . . Reading in the wrapped data (and resident master key KCV) from the file called "file" . . . wrapped data: 47C0 06DB 7D3F D9ED FE91 7E6F A7E5 91B9 master key KCV: CED9 4A7B (pre-computed KCV of the master key residing inside the wrapped data) Using the transport key to temporarily unwrap the master key to recompute its KCV value to check against its pre-computed KCV value . . . master key KCV: CED9 4A7B (computed KCV of the master key residing inside the wrapped data) master key KCV: CED9 4A7B (pre-computed KCV of the master key residing inside the wrapped data) Using the transport key to unwrap and store the master key on the specified token . . . Naming the master key "new_master" . . . Successfully unwrapped, stored, and named the master key! - 验证密钥是否已正确添加到数据库中:
#
tkstool -L -d slot: NSS User Private Key and Certificate Services token: NSS Certificate DB Enter Password or Pin for "NSS Certificate DB": <0> transport <1> new_master
6.15. 对不同的 SCP 版本使用不同的 Applets
/var/lib/instance_name/tps/conf/CS.cfg
文件中的以下参数指定为每个令牌操作为所有安全频道协议(SCP)版本载入哪个小程序:
op.operation.token_type.update.applet.requiredVersion=version
op.operation.token_type.update.applet.requiredVersion.prot.protocol_version=version
- 格式
- 注册
- pinReset
例 6.3. 为注册操作设置协议版本
userKey
令牌执行注册操作时,为 SCP03 配置特定的小程序,并为所有其他协议配置不同的小程序:
- 编辑
/var/lib/instance_name/tps/conf/CS.cfg
文件:- 设置
op.enroll.userKey.update.applet.requiredVersion
参数,以指定默认使用的 applet。例如:op.enroll.userKey.update.applet.requiredVersion=1.4.58768072
- 设置
op.enroll.userKey.update.applet.requiredVersion.prot.3
参数,以配置 applet 证书系统用于 SCP03 协议。例如:op.enroll.userKey.update.applet.requiredVersion.prot.3=1.5.558cdcff
- 重启证书系统:
pki-server restart instance_name
第 7 章 吊销证书并颁发 CRL
7.1. 关于撤销证书
- 如果 CA 收到撤销请求并批准,则撤销证书。
- 使撤销的证书状态可供需要验证其有效状态的第三方或应用程序使用。
7.1.1. User-Initiated Revocation
7.1.2. 吊销证书的原因
- 0.未指定;不给出特定原因。
- 1.与证书关联的私钥被破坏。
- 2.与签发证书的 CA 关联的私钥被破坏。
- 3.证书的所有者不再与证书的签发者关联,并且不再具有与证书获取的访问权限或不再需要证书的权限。
- 4.另一个证书替换这个证书。
- 5.发布证书的 CA 已设计为操作。
- 6.证书正在保留待处理的进一步操作。它被视为撤销,但将来可能会退出,以便证书处于活动状态并再次有效。
- 8.证书将从 CRL 中删除,因为它已从 hold 中删除。这只在 delta CRL 中发生。
- 9.证书被撤销,因为证书的所有者已撤回。
7.1.3. CRL 颁发点
7.1.4. delta CRLs
7.1.5. 发布 CRL
7.1.6. 证书撤销页面
UserRevocation.html
,该表单允许 SSL/TSL 客户端对客户端或个人证书的撤销撤销。该文件位于 /var/lib/instance_name/webapps/subsystem_type/ee/subsystem_type
目录中。
7.2. 执行 CMC 吊销
subjectDN
属性签署撤销请求。然后,用户可以向证书管理器发送已签名请求。
CMCRequest
.详情请查看 第 7.2.1 节 “使用CMCRequest
吊销证书”。CMCRevoke
.详情请查看 第 7.2.2 节 “使用CMCRevoke
吊销证书”。
CMCRequest
工具来生成 CMC 撤销请求,因为它提供了比 CMCRevoke
更多选项。
7.2.1. 使用 CMCRequest
吊销证书
CMCRequest
吊销证书:
- 为 CMC 撤销请求创建一个配置文件,如
/home/user_name/cmc-request.cfg
,其内容如下:#numRequests: Total number of PKCS10 requests or CRMF requests. numRequests=1 #output: full path for the CMC request in binary format output=/home/user_name/cmc.revoke.userSigned.req #tokenname: name of token where user signing cert can be found #(default is internal) tokenname=internal #nickname: nickname for user signing certificate which will be used #to sign the CMC full request. nickname=signer_user_certificate #dbdir: directory for cert9.db, key4.db and pkcs11.txt dbdir=/home/user_name/.dogtag/nssdb/ #password: password for cert9.db which stores the user signing #certificate and keys password=myPass #format: request format, either pkcs10 or crmf. format=pkcs10 ## revocation parameters revRequest.enable=true revRequest.serial=45 revRequest.reason=unspecified revRequest.comment=user test revocation revRequest.issuer=issuer revRequest.sharedSecret=shared_secret
- 创建 CMC 请求:
# CMCRequest /home/user_name/cmc-request.cfg
如果命令成功,CMCRequest
工具会将 CMC 请求存储在请求配置文件中的output
参数中指定的文件中。 - 创建配置文件,如
/home/user_name/cmc-submit.cfg
,稍后的步骤中使用该文件向 CA 提交 CMC 撤销请求。在创建的文件中添加以下内容:#host: host name for the http server host=>server.example.com #port: port number port=8443 #secure: true for secure connection, false for nonsecure connection secure=true #input: full path for the enrollment request, the content must be #in binary format input=/home/user_name/cmc.revoke.userSigned.req #output: full path for the response in binary format output=/home/user_name/cmc.revoke.userSigned.resp #tokenname: name of token where SSL client authentication certificate #can be found (default is internal) #This parameter will be ignored if secure=false tokenname=internal #dbdir: directory for cert9.db, key4.db and pkcs11.txt #This parameter will be ignored if secure=false dbdir=/home/user_name/.dogtag/nssdb/ #clientmode: true for client authentication, false for no client #authentication. This parameter will be ignored if secure=false clientmode=true #password: password for cert9.db #This parameter will be ignored if secure=false and clientauth=false password=password #nickname: nickname for client certificate #This parameter will be ignored if clientmode=false nickname=signer_user_certificate
重要如果 CMC 撤销请求被签名,请将secure
和clientmode
参数设置为 true,并填写nickname
参数。 - 根据谁签署了请求,必须相应地设置
HttpClient
配置文件中的servlet
参数:- 如果代理签署了请求,请设置:
servlet=/ca/ee/ca/profileSubmitCMCFull
- 如果用户签署了请求,请设置:
servlet=/ca/ee/ca/profileSubmitSelfSignedCMCFull
- 提交 CMC 请求:
# HttpClient /home/user_name/cmc-submit.cfg
CMCRequest
吊销证书的详情,请查看 CMCRequest(1) man page。
7.2.2. 使用 CMCRevoke
吊销证书
- 0 - 未指定
- 1 - 密钥已被破坏
- 2 - CA 密钥已被破坏
- 3 - 员工的关联变化
- 4 - 证书已被取代
- 5 - 停止操作
- 6 - 证书处于冻结状态
7.2.2.1. 测试 CMCRevoke
- 为现有证书创建 CMC 撤销请求。
CMCRevoke -d/path/to/agent-cert-db -nnickname -iissuerName -sserialName -mreason -ccomment
例如,如果包含代理证书的目录为 ~jsmith/.mozilla/firefox/,则证书的 nickname 为 AgentCert,证书的序列号为 22,如下所示:CMCRevoke -d"~jsmith/.mozilla/firefox/" -n"ManagerAgentCert" -i"cn=agentAuthMgr" -s22 -m0 -c"test comment"
注意在引号中包含空格的值。重要在参数及其值之间没有空格。例如,提供序列号 26 是-s26
,而不是-s 26
。 - 打开 end-entities 页面。
http
s
://server.example.com:8443/ca/ee/ca
- 选择 Revocation 选项卡。
- 选择菜单中的 CMC Revoke 链接。
- 将 CMCRevoke 的输出粘贴到文本区域中。
- 从粘贴内容中删除 -----BEGIN NEW CERTIFICATE REQUEST----- 和 ----END NEW CERTIFICATE REQUEST-----。
- 点。
- 返回后的页面应确认已撤销正确的证书。
7.3. 发布 CRL
- 证书管理器使用其 CA 签名证书密钥来签署 CRL。要将单独的签名密钥对用于 CRL,请设置 CRL 签名密钥并更改证书管理器配置以使用此密钥为 CRL 签名。请参阅 第 7.3.4 节 “将 CA 设置为使用不同的证书来签名 CRL” 了解更多信息。
- 设置 CRL 发布点。为 master CRL 设置并启用问题点。
图 7.1. 默认 CRL 颁发点
可以创建 CRL 的额外发布点。详情请查看 第 7.3.1 节 “配置颁发点”。发布点可以创建五类 CRL,具体取决于配置发布点时设置的选项来定义 CRL 将列出的内容:- Master CRL 包含从整个 CA 中撤销的证书列表。
- ARL 是一个仅包含撤销的 CA 证书的授权撤销列表。
- 带有过期证书的 CRL 包括 CRL 中已过期的证书。
- 来自证书配置文件的 CRL 决定基于最初创建证书的配置集来包括撤销的证书。
- 按原因代码的 CRLs 根据吊销原因代码决定撤销的证书。
- 为每个发布点配置 CRL。详情请查看 第 7.3.2 节 “为每个颁发点配置 CRL”。
- 设置为发布点配置的 CRL 扩展。详情请查看 第 7.3.3 节 “设置 CRL 扩展”。
- 通过为该发布点启用扩展,为发布点、Broata CRLIndicator 或 CRL Number 启用扩展来为发布点设置 delta CRL。
- 设置 CRLDistributionPoint 扩展,使其包含有关发布点的信息。
- 将 CRL 设置为文件、LDAP 目录或 OCSP 响应器。有关设置发布的详情,请查看 第 9 章 发布证书和 CRL。
7.3.1. 配置颁发点
- 打开证书系统控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧导航菜单中展开 Certificate Manager。然后选择 CRL Issuing Points。
- 若要编辑问题点,请选择发布点,然后单击。唯一可编辑的参数是发布点的名称,以及发布点是启用或禁用的。要添加发布点,请单击。CRL Issuing Point Editor 窗口将打开。
图 7.2. CRL 颁发点编辑器
注意如果某些字段不足以读取内容,请通过拖动其中一个角来扩展窗口。填写以下字段:- 启用。如果选中,启用问题点;取消选择以禁用。
- CRL 颁发点名称。为发布点指定名称;不允许空格。
- 描述.描述问题点。
- 点。
pkiconsole
已被弃用。
7.3.2. 为每个颁发点配置 CRL
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在导航树中,选择 Certificate Manager,然后选择 CRL Issuing Points。
- 选择 Issuing Points 条目下的发布点名称。
- 通过在 Update 选项卡中提供发布点的信息来配置 CRL 如何和频率更新。此选项卡有两个部分: Update Schema 和 Update Frequency。
- Update Schema 部分有以下选项:
- 启用 CRL 生成。此复选框设定是否为该发布点生成 CRL。
- 生成一个完整的 CRL 增量。此字段设置与更改数量相关的创建 CRL 的频率。
- 在 完整 CRL 中延长下一次更新时间。这提供了一个选项,用于在生成的 CRL 中设置 nextUpdate 字段。
nextUpdate
参数显示发布下一个 CRL 时的日期,无论它是完整还是 delta CRL。当使用 full 和 delta CRL 的组合时,在完整 CRL 中启用扩展下一次更新时间将在完整 CRL 中进行
下一个Update
参数,当下一次完整 CRL 将被发布时,将生成完整的 CRL 参数。否则,完整的 CRL 中的nextUpdate
参数将在发布下一个 delta CRL 时显示,因为 delta 将是要发布的下一个 CRL。
- Update Frequency 部分在生成 CRL 并发布到目录时设置不同的间隔。
- 每次从暂停中撤销或发布证书时。这会将证书管理器设置为在每次撤销证书时生成 CRL。证书管理器会在生成时尝试向配置的目录发出 CRL。如果 CRL 较大,生成 CRL 可能会消耗时间。将证书管理器配置为在每次撤销证书时生成 CRL,可能会持续与服务器联系;在此期间,服务器将无法使用它收到的任何更改来更新目录。不建议在标准安装中使用这个设置。应选择此选项以立即测试撤销,例如测试服务器是否向平面文件发出 CRL。
- 下一次更新宽限期。如果证书管理器以特定频率更新 CRL,则可以将服务器配置为在下次更新的时间具有宽限期,以允许时间创建 CRL 并发出它。例如,如果服务器配置为每 20 分钟更新 CRL,宽限期为 2 分钟,如果 CRL 在 16:00 更新,则 CRL 会再次更新为 16:18。
重要由于一个已知问题,当当前设置 full 和 delta Certificate Revocation List 调度时,每次从 hold 选项撤销或发布证书时,更新 CRL
都需要您填写两个宽限期
设置。因此,要选择这个选项,您需要首先选择Update CRL per
选项,并为Next update grace period 一 分钟
输入数字。 - Cache 选项卡设置缓存是否已启用以及缓存频率。
图 7.3. CRL Cache Tab
- 启用 CRL 缓存。此复选框启用缓存,用于创建 delta CRL。如果禁用了缓存,则不会创建 delta CRLs。有关缓存的详情请参考 第 7.1 节 “关于撤销证书”。
- 按更新缓存。此字段设置缓存写入内部数据库的频率。设置为 0, 以便在每次撤销证书时都会将缓存写入数据库。
- 启用缓存恢复。此复选框允许恢复缓存。
- 启用 CRL 缓存测试。此复选框为特定 CRL 发布点启用 CRL 性能测试。使用此选项生成的 CRL 不应在部署的 CA 中使用,因为为测试而发布的 CRL 包含只针对性能测试而生成的数据。
- Format 选项卡设置创建的 CRL 的格式和内容。CRL 格式和 CRL 内容有两个部分。
图 7.4. CRL Format Tab
- CRL Format 部分有两个选项:
- 吊销列表签名算法 是允许密码加密 CRL 的下拉列表。
- 允许 CRL v2 的扩展 是一个复选框,它为发布点启用 CRL v2 扩展。如果启用此功能,请设置 第 7.3.3 节 “设置 CRL 扩展” 中描述的所需的 CRL 扩展。
注意必须打开扩展来创建 delta CRL。 - CRL 内容 部分有三个复选框,用于设置 CRL 中包含的证书类型:
- 包括过期的证书。这包括已撤销的证书。如果启用,证书过期后,有关撤销的证书的信息保留在 CRL 中。如果没有启用此功能,则在证书过期时会删除撤销的证书的信息。
- 仅限 CA 证书。这仅包含 CRL 中的 CA 证书。选择这个选项会创建一个授权撤销列表(ARL),它只列出撤销的 CA 证书。
- 根据配置文件发布的证书。这只包含根据列出的配置集发布的证书 ; 要指定多个配置集,请输入以逗号分隔的列表。
- 点击。
- 此发布点允许扩展,并可配置。详情请查看 第 7.3.3 节 “设置 CRL 扩展”。
pkiconsole
已被弃用。
7.3.3. 设置 CRL 扩展
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在导航树中,选择 Certificate Manager,然后选择 CRL Issuing Points。
- 选择 Issuing Points 条目下的发布点名称,然后选择发布点下的 CRL 扩展 条目。右侧窗格显示 CRL Extensions Management 选项卡,它列出了配置的扩展。
图 7.5. CRL 扩展
- 若要修改规则,请选择它,然后单击。
- 大多数扩展有两个选项,启用它们并设置它们是否至关重要。有些需要更多信息。提供所有必需的值。有关每个扩展以及这些扩展的参数的完整信息,请参阅 ???。
- 点。
- 点查看所有规则的更新状态。
pkiconsole
已被弃用。
7.3.4. 将 CA 设置为使用不同的证书来签名 CRL
CS.cfg
文件配置此功能的说明,请参阅 Red Hat Certificate System 规划、安装和部署指南中的设置 CA 来使用不同的证书签名 CRL 部分。
7.3.5. 从缓存生成 CRL
enableCRLCache
参数。但是,在生产环境中 不应 启用 Enable CRL cache 测试
参数。
7.3.5.1. 在控制台中从缓存配置 CRL 生成
pkiconsole
已被弃用。
- 打开控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,展开 Certificate Manager 文件夹和 CRL 颁发点 子文件夹。
- 选择 MasterCRL 节点。
- 选择 Enable CRL cache。
- 保存更改。
7.3.5.2. 在 CS.cfg 中配置来自 Cache 的 CRL 生成
CS.cfg
文件配置此功能的说明,请参阅 Red Hat Certificate System 规划、安装和部署指南中的 从 CS.cfg 中的配置 CRL 生成 部分。
7.4. 设置 Full 和 Delta CRL 计划
Interval 1, 2, 3, 4, 5, 6, 7 ... Full CRL 1 4 7 ... Delta CRL 1, 2, 3, 4, 5, 6, 7 ...
7.4.1. 在控制台中配置 CRL 更新间隔
pkiconsole
已被弃用。
- 打开控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,展开 Certificate Manager 文件夹和 CRL 颁发点 子文件夹。
- 选择 MasterCRL 节点。
- 在 Generate full CRL (s) 字段中输入所需的间隔。
- 通过指定证书撤销的 occasion、cyclical 间隔或设置更新的时间来设置更新频率:
- 选择 Update CRL,每次撤销或从暂停复选框中释放 证书时。每次从 hold 选项撤销或发布证书时,Update CRL 都需要填写两个 Grace period 设置。这是一个已知问题,程序错误在 Red Hat Bugzilla 中被跟踪。
- 选择 Update CRL,每次撤销或从暂停复选框中释放 证书时。
- 选择 Update CRL at 复选框,并输入用逗号分开的特定时间,如 01:50,04:55,06:55。
- 选择 Update CRL every 复选框并输入所需的间隔,如 240。
- 保存更改。
7.4.2. 在 CS.cfg 中为 CRL 配置 Update Intervals
CS.cfg
文件配置此功能的说明,请参阅 Red Hat Certificate System 规划、安装和部署指南中的 为 CRL 配置 Update Intervals 部分。
7.4.3. 多次配置 CRL 生成计划
ca.crl.MasterCRL.dailyUpdates=01:00,03:00,18:00;02:00,05:00,17:00
ca.crl.MasterCRL.dailyUpdates=01:00,03:00,18:00,*23:00;02:00,05:00,21:00,*23:30
CS.cfg
文件时工作。
7.5. 启用撤销检查
7.6. 使用在线证书状态协议(OCSP)恢复器
7.6.1. 设置 OCSP Responder
- 为每个将发布到 OCSP 响应器的 CA 配置 CRL。
- 启用发布、设置发布程序,并在 OCSP 服务处理的每个 CA 中设置发布规则(第 9 章 发布证书和 CRL)。如果证书管理器发布到 LDAP 目录,并且将在线证书状态管理器设置为从该目录读取,则不需要此项。
- 证书配置文件必须配置为包含授权信息访问扩展,指向证书管理器侦听 OCSP 服务请求的位置(第 7.6.4 节 “启用证书管理器的内部 OCSP 服务”)。
- 配置 OCSP Responder。
- 确定每个发布的证书管理器到 OCSP 响应器(第 7.6.2 节 “识别 CA 到 OCSP Responder”)。
- 如有必要,为签署 OCSP 签名证书(第 17.7 节 “更改 CA 证书的信任设置”)的 CA 配置信任设置。
- 配置这两个子系统后重新启动这两个子系统。
- 验证 CA 是否已正确连接到 OCSP 响应程序(第 7.6.2.1 节 “验证证书管理器和在线证书状态管理器连接”)。
7.6.2. 识别 CA 到 OCSP Responder
- 从 CA 的端到端页面获取证书管理器的 base-64 CA 签名证书。
- 打开 Online Certificate Status Manager agent 页面。URL 格式为 https://hostname:SSLport/ocsp/agent/ocsp。
- 在左侧帧中,单击。
- 在表单中,将编码的 CA 签名证书粘贴到标记为 Base 64 编码证书(包括标头和页脚) 的文本区域中。
- 要验证证书是否已成功添加,请在左侧范围内单击 List Certificate Authority。
7.6.2.1. 验证证书管理器和在线证书状态管理器连接
7.6.2.2. 配置撤销信息存储:内部数据库
- 打开 Online Certificate Status Manager 控制台。
pkiconsole https://server.example.com:8443/ocsp
- 在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。右侧窗格中显示在线证书状态管理器可以使用的两个存储库;默认情况下,它会在其内部数据库中使用 CRL。
- 选择 defStore,然后单击 。
- 编辑 defStore 值。
- notFoundAsGood.如果问题中的证书无法在任何 CRL 中找到,则将 OCSP 服务设置为返回 GOOD 的 OCSP 响应。如果没有选择此项,则响应为 UNKNOWN (当客户端遇到时)会导致错误消息。
- byName.OCSP Responder 只支持基本的响应类型,其中包括发出响应的 OCSP Responder 的 ID。基本响应类型中的 ResponderID 字段由
ocsp.store.defStore.byName
参数的值决定。如果byName
参数为 true 或缺失,则 OCSP 授权签名的证书主题名称将用作 OCSP 响应的 ResponderID 字段。如果byName
参数为 false,则 OCSP 授权签名证书密钥哈希将是 OCSP 响应的 ResponderID 字段。 - includeNextUpdate.包括下一个 CRL 更新时间的时间戳。
pkiconsole
已被弃用。
7.6.2.3. 配置撤销信息存储:LDAP 目录
ldapStore
方法,则 OCSP 用户界面不会检查证书状态。
- 打开 Online Certificate Status Manager 控制台。
pkiconsole https://server.example.com:8443/ocsp
- 在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。右侧窗格中显示在线证书状态管理器可以使用的两个存储库;默认情况下,它会在其内部数据库中使用 CRL。
- 要在 LDAP 目录中使用 CRL,请点击 ldapStore 选项。来启用
- 选择 ldapStore,然后单击 。
- 设置 ldapStore 参数。
- numConns.OCSP 服务应检查的 LDAP 目录的总数。默认情况下,它被设置为 0。设置此值会显示对应的主机、端口、baseDN 和 refreshInSec 字段的数量。
- host.LDAP 目录的完全限定 DNS 主机名。
- 端口。LDAP 目录的非 SSL/TLS 端口。
- baseDN.开始搜索 CRL 的 DN。例如,O=example.com。
- refreshInSec。连接刷新的频率。默认值为 86400 秒(每天)。
- caCertAttr.保留默认值 cACertificate;binary,因为它是。它是证书管理器向其 CA 签名证书发布的属性。
- crlAttr.保留默认值 certificateRevocationList;binary,因为它是。它是证书管理器向其发布 CRL 的属性。
- notFoundAsGood.如果问题中的证书无法在任何 CRL 中找到,则将 OCSP 服务设置为返回 GOOD 的 OCSP 响应。如果没有选择此项,则响应为 UNKNOWN (当客户端遇到时)会导致错误消息。
- byName.OCSP Responder 只支持基本的响应类型,其中包括发出响应的 OCSP Responder 的 ID。基本响应类型中的 ResponderID 字段由
ocsp.store.defStore.byName
参数的值决定。如果byName
参数为 true 或缺失,则 OCSP 授权签名的证书主题名称将用作 OCSP 响应的 ResponderID 字段。如果byName
参数为 false,则 OCSP 授权签名证书密钥哈希将是 OCSP 响应的 ResponderID 字段。 - includeNextUpdate.在线证书状态管理器可以包含下一次 CRL 更新时间的时间戳。
pkiconsole
已被弃用。
7.6.2.4. 测试 OCSP 服务设置
- 在浏览器或客户端中打开撤销检查。
- 从为 OCSP 服务启用的 CA 请求证书。
- 批准请求。
- 将证书下载到浏览器或客户端。
- 确保 CA 由浏览器或客户端信任。
- 检查证书管理器内部 OCSP 服务的状态。打开 CA 代理服务页面,然后选择 OCSP Services 链接。
- 测试独立的在线证书状态管理器子系统。打开 Online Certificate Status Manager 代理服务页面,然后单击 List Certificate Authority 链接。该页面应当显示有关配置为向在线证书状态管理器发布 CRL 的证书管理器的信息。该页面还总结了在线证书状态管理器自上次开始以来的活动。
- 吊销证书。
- 在浏览器或客户端中验证证书。服务器应返回证书已被撤销。
- 再次检查证书管理器的 OCSP-service 状态,以验证是否发生以下问题:
- 浏览器向证书管理器发送 OCSP 查询。
- 证书管理器向浏览器发送 OCSP 响应。
- 使用该响应来验证证书并返回其状态的浏览器无法验证证书。
- 再次检查独立的 OCSP 服务子系统以验证是否发生以下问题:
- 证书管理器将 CRL 发布到在线证书状态管理器。
- 浏览器向在线证书状态管理器发送 OCSP 响应。
- 在线证书状态管理器向浏览器发送 OCSP 响应。
- 使用该响应来验证证书并返回其状态的浏览器无法验证证书。
7.6.3. 为 Bad Serial Numbers 设置响应
notFoundAsGood
参数设置 OCSP 如何使用无效序列号处理证书。此参数默认为启用,这意味着如果证书存在错误序列号但证书有效,则 OCSP 会返回证书的状态。
notFoundAsGood
设置。在这种情况下,OCSP 返回 UNKNOWN 状态,并带有带有错误的序列号的证书。客户端将解释为错误,并相应地响应。
- 打开 Online Certificate Status Manager 控制台。
pkiconsole https://server.example.com:8443/ocsp
- 在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。
- 选择 defStore,然后单击 。
- 编辑
notFoundAsGood
值。选择复选框意味着 OCSP 会返回 GOOD 值,即使证书的序列号不正确。取消选择复选框意味着 OCSP 发送一个 UNKNOWN 值,客户端可能会认为是错误。 - 重启 OCSP Manager。
]# pki-server restart instance-name
pkiconsole
已被弃用。
7.6.4. 启用证书管理器的内部 OCSP 服务
- 进入 CA 的端到端页面。例如:
http
s
://server.example.com:8443/ca/ee/ca
- 查找 CA 签名证书。
- 在证书中查找授权信息访问扩展,并记录 Location URIName 值,如 http
s
://server.example.com:8443
/ca/ocsp。 - 更新注册配置文件,以启用授权信息访问扩展,并将 Location 参数设置为证书管理器的 URI。有关编辑证书配置文件的详情,请参考 第 3.2 节 “设置证书配置文件”。
- 重启 CA 实例。
]# pki-server restart instance-name
CS.cfg
文件,并将 ca.ocsp 参数的值改为 false。
ca.ocsp=false
7.6.5. 使用 OCSPClient 程序提交 OCSP 请求
]# OCSPClient -h server.example.com -p 8080 -d /etc/pki/pki-tomcat/alias -c "caSigningCert cert-pki-ca" --serial 2 CertID.serialNumber=2 CertStatus=Good
选项 | 描述 |
---|---|
-d 数据库 | 安全数据库位置(默认:当前目录) |
-h hostname | OCSP 服务器主机名(默认为 example.com) |
-p port | OCSP 服务器端口号(默认: 8080) |
-t path | OCSP 服务路径(默认:/ocsp/ee/ocsp) |
-c nickname | CA 证书 nickname (defaut: CA Signing Certificate) |
-n times | 提交数(默认:1) |
--serial serial_number | 要检查的证书的序列号 |
--input input_file | 包含 DER 编码的 OCSP 请求的输入文件 |
--output output_file | 输出文件存储 DER 编码的 OCSP 响应的文件 |
-v,--verbose | 以详细模式运行 |
--help | 显示帮助信息 |
7.6.6. 使用 GET 方法提交 OCSP 请求
- 为证书生成一个 OCSP 请求,该请求正在查询。例如:
]# openssl ocsp -CAfile ca.pem -issuer issuer.pem -serial serial_number -reqout - | base64 MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=
- 将 URL 粘贴到 Web 浏览器的地址栏中,以返回状态信息。浏览器必须能够处理 OCSP 请求。
https://server.example.com:8443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=
- OCSP Manager 使用浏览器可以解释的证书状态进行响应。可能的状态有 GOOD、REVOKED 和 UNKNOWN。
- 为证书生成一个 OCSP 请求,该请求正在查询。例如:
]# openssl ocsp -CAfile ca.pem -issuer issuer.pem -serial serial_number -reqout - | base64 MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=
- 使用 curl 连接到 OCSP Manager 来发送 OCSP 请求。
curl https://server.example.com:8443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE= > ocspresp.der
- 使用 openssl 解析响应:
openssl ocsp -respin ocspresp.der -resp_text
7.6.7. 为证书系统 7.1 和 Earlier 中发布的证书设置重定向
/ocsp/ee/ocsp/
,在证书系统 10 或证书系统 8.1 中与证书系统 7.1 中的位置不同,这只是 /ocsp/
。为了使 7.1 或更早的 CA 发布的证书以及授权信息访问扩展发送到 OCSP,请创建一个重定向以将请求转发到适当的 URL。
- 停止 OCSP Responder。
]# pki-server stop instance-name
- 进入 OCSP 的最终用户 Web 应用程序目录。例如:
]# cd /var/lib/pki-ocsp/webapps/ocsp
- 更改为 OCSP Web 应用目录的
ROOT
文件夹中的ROOT/WEB-INF/
目录。例如:]# cd /var/lib/pki-ocsp/webapps/ocsp/ROOT/WEB-INF/
- 在 OCSP Web 应用目录的
ROOT
文件夹中创建并打开lib/
目录。]# mkdir lib ]# cd lib/
- 创建链接到
/usr/share/java/pki/cms.jar
JAR 文件的符号链接。例如:]# ln -s /usr/share/java/pki/cms.jar cms.jar
- 移到主 Web 应用目录。例如:
]# cd /var/lib/pki-ocsp/webapps/ocsp/
- 重命名当前实例(
ocsp
)目录。例如:]# mv /var/lib/pki-ocsp/webapps/ocsp/ocsp /var/lib/pki-ocsp/webapps/ocsp/ocsp2
- 更改到原始
ocsp/
目录中的WEB-INF/
目录。例如:]# cd /var/lib/pki-ocsp/webapps/ocsp/ocsp/WEB-INF
- 在原始
ocsp/WEB-INF/
目录中,编辑web.xml
文件并添加eeocspAddCRL
和csadmin-wizard
servlets 之间的行映射。<servlet-mapping> <servlet-name> ocspOCSP </servlet-name> <url-pattern> /ee/ocsp/* </url-pattern> </servlet-mapping>
- 在
ROOT
目录中创建并安装web.xml
文件。例如:<?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <servlet> <servlet-name>ocspProxy</servlet-name> <servlet-class>com.netscape.cms.servlet.base.ProxyServlet</servlet-class> <init-param> <param-name>destContext</param-name> <param-value>/ocsp2</param-value> </init-param> <init-param> <param-name>destServlet</param-name> <param-value>/ee/ocsp</param-value> </init-param> </servlet> <servlet> <servlet-name>ocspOther</servlet-name> <servlet-class>com.netscape.cms.servlet.base.ProxyServlet</servlet-class> <init-param> <param-name>destContext</param-name> <param-value>/ocsp2</param-value> </init-param> <init-param> <param-name>srcContext</param-name> <param-value>/ocsp</param-value> </init-param> <init-param> <param-name>destServlet</param-name> <param-value></param-value> </init-param> <init-param> <param-name>matchURIStrings</param-name> <param-value>/ocsp/registry,/ocsp/acl,/ocsp/jobsScheduler,/ocsp/ug,/ocsp/server,/ocsp/log, /ocsp/auths,/ocsp/start,/ocsp/ocsp,/ocsp/services,/ocsp/agent,/ocsp/ee, /ocsp/admin</param-value> </init-param> <init-param> <param-name>destServletOnNoMatch</param-name> <param-value>/ee/ocsp</param-value> </init-param> <init-param> <param-name>appendPathInfoOnNoMatch</param-name> <param-value>/ocsp</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ocspProxy</servlet-name> <url-pattern>/ocsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ocspOther</servlet-name> <url-pattern>/ocsp/*</url-pattern> </servlet-mapping> </web-app>
- 编辑
/var/lib/pki-ocsp/conf/context.xml
文件,更改以下行:<Context> to <Context crossContext="true" >
- 编辑
/var/lib/pki-ocsp/webapps/ocsp/ocsp2/services.template
文件并更改以下行:result.recordSet[i].uri); to result.recordSet[i].uri + "/");
- 启动 OCSP 实例。
]# pki-server start instance-name
第 8 章 管理 PKI ACME Responder
8.1. 启用/禁用 ACME 服务
- 要使用基本身份验证启用或禁用 ACME 服务,请指定用户名和密码:
$ pki -u <username> -p <password> acme-<enable/disable>
- 要使用客户端证书身份验证启用或禁用 ACME 服务,请指定证书 nickname 和 NSS 数据库密码:
$ pki -n <nickname> -c <password> acme-<enable/disable>
8.2. 检查 PKI ACME Responder 的状态
- 要检查 ACME 响应器的状态,请运行以下命令:
$ pki acme-info Status: Available Terms of Service: https://www.example.com/acme/tos.pdf Website: https://www.example.com CAA Identities: example.com External Account Required:false
如果服务被禁用,命令会显示以下结果:$ pki acme-info Status: Unavailable
metadata.conf
配置文件中配置的内容。
部分 III. 管理 CA 服务的其他配置
第 9 章 发布证书和 CRL
- 配置发布到文件、LDAP 目录或 OCSP 响应器。根据要使用的位置数量,可以有一个发布者或多个发布者。位置可以通过证书和 CRL 或更严格的定义(如证书类型)分割。规则决定要发布的类型以及与发布者关联的位置。
- 设置规则以确定将哪些证书发布到该位置。激活证书或 CRL 匹配的任何规则,因此同一证书可以发布到文件和 LDAP 目录,方法是匹配基于文件的规则并与基于目录的规则匹配。可以为每个对象类型设置规则:CA 证书、CRL、用户证书和跨对证书。禁用所有不使用的规则。
- 配置 CRL。在发布 CRL 之前,必须配置 CRL。请参阅 第 7 章 吊销证书并颁发 CRL。
- 在设置发布程序、映射程序和规则后启用发布。发布后,服务器会立即开始发布。如果没有完全配置发布程序、映射程序和规则,发布程序可能无法正常工作,或根本都无法正常工作。
9.1. 关于发布
/etc/CS/certificates
中的文件,则证书将作为文件发布到该位置。如果另一个规则与用户发布的所有证书匹配,并且该规则有一个发布给 LDAP 属性 userCertificate;binary 属性的发布者,则证书将在用户条目的此属性中启用 LDAP 发布时发布到指定的目录中。
9.1.1. publishers
9.1.2. Mappers
9.1.3. 规则
9.1.4. 发布到文件
- 对于服务器问题的每个证书,它创建一个文件,其中包含 DER 编码或 base-64 编码格式的证书。每个文件都命名为
cert-
serial_number.der
或cert-
serial_number.b64
。serial_number 是文件中包含的证书的序列号。例如,带有序列号 1234 的 DER 编码证书的文件名是cert-1234.der
。 - 每次服务器生成 CRL 时,它都会创建一个文件,其中包含以 DER 编码的或 base-64 编码格式的新 CRL。根据格式,每个文件都命名为 issue_point_name- this_update
.der
或 issue_point_name- this_update.b64
。issue_point_name 标识发布 CRL 的 CRL 发布点,并且 this_update 指定从文件中包含的 CRL 的相关更新值生成的值。例如,DER 编码的 CRL 的文件名,其值为 this Update:phone 28 15:36:00 PST 2020,是MasterCRL-20200128-153600.der
。
9.1.5. OCSP 发布
9.1.6. LDAP 发布
- 对于服务器问题的每个证书,它会在用户条目的指定属性中以 DER 编码格式包含证书的 Blob。证书作为 DER 编码的二进制 blob 发布。
- 每次服务器生成 CRL 时,它都会在 CA 条目的指定属性中创建一个包含新 CRL 的 Blob。
9.2. 配置发布到文件
- 登录证书管理器控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧的导航树中选择 Certificate Manager。选择 Publishing,然后选择 Publishs。Tailoring s Management 选项卡(列出配置的 publisher 实例)在右侧打开。
- 单击 \":\" Plug-in Implementation 窗口,该窗口列出了注册的发布者模块。以打开 Select
- 选择 FileBasedPublisher 模块,然后打开编辑器窗口。这是可让证书管理器向文件发布证书和 CRL 的模块。
- 配置发布证书的信息:
- 发布者 ID,它是一个没有空格的字母字符串,如 PublishCertsToFile
- 证书管理器应发布文件的目录的路径。该路径可以是绝对路径,也可以相对于证书系统实例目录。例如:
/export/CS/certificates
。 - 要发布的文件类型,选中 DER 编码文件的复选框、base-64 编码文件或两者。
- 对于 CRL,时间戳的格式。发布的证书在其文件名中包含序列号,而 CRL 使用时间戳。
- 对于 CRL,是否在文件中生成链接以进入最新的 CRL。如果启用,该链接假定要与扩展一起使用的 CRL 问题点的名称将在 crlLinkExt 字段中提供。
- 对于 CRL,是否压缩(zip) CRL 和要使用的压缩级别。
pkiconsole
已被弃用。
9.3. 配置发布到 OCSP
9.3.1. 启用使用客户端身份验证发布到 OCSP
- 登录证书管理器控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧的导航树中选择 Certificate Manager。选择 Publishing,然后选择 Publishs。
- 单击 \":\" Plug-in Implementation 窗口,该窗口列出了注册的发布者模块。以打开 Select
- 选择 OCSPPublisher 模块,然后打开编辑器窗口。这是发布者模块,使证书管理器能够向在线证书状态管理器发布 CRL。
- 发布者 ID 必须是没有空格的字母字符串,如 PublishCertsToOCSP。
- 主机 可以是完全限定域名,如 ocspResponder.example.com,也可以是 IPv4 或 IPv6 地址。
- 默认路径是将 CRL 发送到的目录,如
/ocsp/agent/ocsp/addCRL
。 - 如果使用客户端身份验证(选中enableClientAuth ),则 nickname 字段提供了用于身份验证的证书的 nickname 字段。此证书必须已存在于 OCSP 安全数据库中;这通常是 CA 子系统证书。
- 在 OCSP Manager 中为 CA 创建用户条目。用户用于在发送新的 CRL 时向 OCSP 进行身份验证。需要两方面:
- 在 CA 服务器后命名 OCSP 用户条目,如 CA-hostname-EEport。
- 使用 publisher 配置中指定的任何证书作为 OCSP 用户帐户中的用户证书。这通常是 CA 的子系统证书。
第 15.3.2.1 节 “创建用户” 中涵盖了设置子系统用户。
pkiconsole
已被弃用。
9.4. 配置发布到 LDAP 目录
- 配置要发布证书的目录服务器。某些属性必须添加到条目中,而且必须配置绑定身份和身份验证方法。
- 为公布的每种对象配置发布者:CA 证书、跨对证书、CRL 和用户证书。publisher 声明用于存储对象的属性。默认设置的属性是 X.500 标准属性,用于存储每种对象类型。此属性可以在发布程序中更改,但通常不需要更改 LDAP 发布者。
- 设置映射程序,以启用条目的 DN 从证书的主题名称中派生。这通常不需要为 CA 证书、CRL 和用户证书设置。对于一种证书,可以有多个映射程序。例如,这可用于发布来自位于目录树不同部分公司不同部分的两组用户的证书。为每个组创建一个映射程序,以指定树的不同分支。有关设置映射程序的详情,请参考 第 9.4.3 节 “创建映射程序”。
- 创建规则以将发布程序连接到映射程序,如 第 9.5 节 “创建规则” 所述。
- 启用发布,如 第 9.6 节 “启用发布” 所述。
9.4.1. 配置 LDAP 目录
- 为 CA 设置条目。要使证书管理器发布其 CA 证书和 CRL,该目录必须包含 CA 的条目。TIP配置 LDAP 发布后,证书管理器会在目录中自动创建或转换 CA 的条目。这个选项在 CA 和 CRL mapper 实例中设置,并默认启用。如果目录限制了证书管理器在目录中创建条目,请在这些映射器实例中关闭此选项,并在目录中手动为 CA 添加条目。将 CA 条目添加到目录中时,根据 CA 的 DN 选择条目类型:
- 如果 CA 的 DN 从 cn 组件开始,请为 CA 创建新的 person 条目。选择其他类型的条目可能无法指定 cn 组件。
- 如果 CA 的 DN 从 ou 组件开始,请为 CA 创建新的 organizationalunit 条目。
条目不必位于 pkiCA 或 Certification Authority 对象类中。证书管理器将通过发布其 CA 的签名证书,将此条目转换为 pkiCA 或 Certification Authority 对象类。注意pkiCA 对象类在 RFC 4523 中定义,而 certified Authority 对象类在(obsolete) RFC 2256 中定义。根据 Directory 服务器使用的模式定义,任何对象类都可以接受。在某些情况下,两个对象类都可用于相同的 CA 条目。有关创建目录条目的更多信息,请参阅 Red Hat Directory Server 文档。 - 将正确的架构元素添加到 CA 和用户条目条目中。
对象类型 模式 原因 端到端证书 userCertificate;binary (attribute) 这是证书管理器向其发布证书的属性。这是一个多值属性,每个值都是一个 DER 编码的二进制 X.509 证书。名为 inetOrgPerson 的 LDAP 对象类允许此属性。strongAuthenticationUser 对象类允许此属性,并可与其他对象类结合使用,以允许将证书发布到其他对象类的目录条目中。证书管理器不会自动将此对象类添加到对应的目录服务器的 schema 表中。如果它找到的目录对象不允许 userCertificate;binary 属性,添加或删除证书会失败。CA 证书 caCertificate;binary (attribute) 这是证书管理器向其发布证书的属性。证书管理器在服务器启动时将自己的 CA 证书发布到自己的 LDAP 目录条目。条目对应于证书的签发者名称。这是 pkiCA 或 Certification Authority 对象类的 必要属性。如果证书管理器可以找到 CA 的目录条目,则证书管理器会将此对象类添加到 CA 的目录条目中。CRL certificateRevocationList;binary (attribute) 这是证书管理器向发布 CRL 的属性。证书管理器将 CRL 发布到自己的 LDAP 目录条目。条目对应于证书的签发者名称。这是 pkiCA 或 Certification Authority 对象类的属性。属性的值是 DER 编码的二进制 X.509 CRL。CA 的条目必须已包含 CRL 的 pkiCA 或 Certification Authority 对象类,才能发布到该条目。delta CRL deltaRevocationList;binary (attribute) 这是证书管理器向发布 delta CRL 的属性。证书管理器将 delta CRL 发布到自己的 LDAP 目录条目,与完整 CRL 分开。delta CRL 条目对应于证书管理器的签发者名称。此属性属于 deltaCRL 或 certified Authority-V2 对象类。属性的值是 DER 编码的二进制 X.509 delta CRL。 - 为证书管理器设置绑定 DN,用于访问目录服务器。证书管理器用户必须具有目录的读写权限,才能向目录发布证书和 CRL,以便证书管理器可以使用与证书相关的信息以及带有 CA 证书和 CRL 相关信息的 CA 条目修改用户条目。绑定 DN 条目可以是以下之一:
- 具有写入访问权限的现有 DN,如目录管理器。
- 授予写入访问权限的新用户。条目可以被证书管理器的 DN 标识,如 cn=testCA, ou=Research Dept, o=Example 公司, st=California, c=US。注意仔细考虑为此用户授予哪些特权。此用户可以通过为帐户创建 ACL 限制到目录的内容。有关授予对证书管理器条目的写入权限的说明,请参阅目录服务器文档。
- 设置目录身份验证方法,以向目录服务器进行身份验证。有三个选项:基本身份验证(简单用户名和密码)、没有客户端身份验证的 SSL (简单用户名和密码);以及 SSL (基于证书)的 SSL。有关设置这些与服务器通信方法的说明,请参阅 Red Hat Directory Server 文档。
9.4.2. 配置 LDAP 站
publisher | 描述 |
---|---|
LdapCaCertPublisher | 将 CA 证书发布到 LDAP 目录。 |
LdapCrlPublisher | 将 CRL 发布到 LDAP 目录。 |
LdapDeltaCrlPublisher | 将 delta CRLs 发布到 LDAP 目录。 |
LdapUserCertPublisher | 将所有类型的最终用户证书发布到 LDAP 目录。 |
LdapCrossCertPairPublisher | 将自签名证书发布到 LDAP 目录。 |
9.4.3. 创建映射程序
mapper | 描述 |
---|---|
LdapUserCertMap | 在 目录中找到用户条目的正确属性,以发布用户证书。 |
LdapCrlMap | 在 目录中找到 CA 条目的正确属性,以发布 CRL。 |
LdapCaCertMap | 在 目录中找到 CA 条目的正确属性,以发布 CA 证书。 |
- 登录证书管理器控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧的导航树中选择 Certificate Manager。选择 Publishing,然后选择 Mappers。Mappers Management 标签页(列出配置的映射程序)在右侧打开。
- 若要创建新映射程序实例,请单击 Select Mapper Plugin Implementation 窗口,它列出了注册的映射程序模块。选择一个模块并编辑它。有关这些模块的完整信息,请参考 第 C.2 节 “映射程序插件模块 ”。。此时会打开
- 编辑 mapper 实例,然后单击。有关每个映射程序的详情,请查看 第 C.2 节 “映射程序插件模块 ”。
pkiconsole
已被弃用。
9.4.4. 完成配置:规则并启用
9.5. 创建规则
- 登录证书管理器控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧的导航树中选择 Certificate Manager。选择 Publishing,然后选择 Rules。Rules Management 选项卡(列出配置的规则)在右侧打开。
- 若要编辑现有规则,请从列表中选择该规则,然后单击 Rule Editor 窗口。。这将打开
- 要创建规则,请单击 Select Rule Plug-in Implementation 窗口。。这将打开选择 Rule 模块。这是唯一的默认模块。如果注册了任何自定义模块,它们也可用。
- 编辑规则。
- type.这是规则适用的证书类型。对于 CA 签名证书,值为 cacert。对于跨林信任,值为 xcert。对于所有其他证书类型,值为 certs。对于 CRL,指定 crl。
- predicate。这会为规则适用的证书或 CRL 发布点设置 predicate 值。CRL 发布点、delta CRL 和证书的 predicate 值列在 表 9.3 “predicate 表达式” 中。
- 启用。
- 映射器.发布到文件时不需要映射程序;仅 LDAP 发布需要它们。如果此规则与发布到 LDAP 目录的发布程序关联,请在此处选择适当的映射程序。对于所有其他形式的发布,请留空。
- 发布者.设置要与规则关联的发布程序。
predicate Type | predicate |
---|---|
CRL 颁发点 |
issuingPointId==Issuing_Point_Instance_ID && isDeltaCRL==[true|false]
要仅发布 master CRL,请设置 isDeltaCRL==false。要仅发布 delta CRL,请设置 isDeltaCRL==true。要发布这两者,请为 master CRL 设置一条规则,并为 delta CRL 设置另一个规则。
|
证书配置文件 |
profileId==profile_name
要根据用于发布它们的配置集发布证书,请将 profileId== 设置为配置集名称,如 caServerCert。
|
pkiconsole
已被弃用。
9.6. 启用发布
- 登录证书管理器控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧的导航树中选择 Certificate Manager。选择 Publishing。右侧窗格显示发布到符合 LDAP 的目录的详细信息。
- 若要仅启用发布到文件,请选择 Enable Publishing。
- 要启用 LDAP 发布,请选择 Enable Publishing 和 Enable Default LDAP Connection。在 Destination 部分中,设置 Directory 服务器实例的信息。
- 主机名.如果为 SSL 客户端经过身份验证的通信配置了目录服务器,该名称必须与 Directory 服务器 SSL 服务器证书的主题 DN 中的 cn 组件匹配。主机名可以是完全限定域名或 IPv4 或 IPv6 地址。
- 端口号.
- 目录管理器 DN。这是具有目录管理器权限的目录条目的可分辨名称(DN)。证书管理器使用此 DN 访问目录树并发布到目录。为此 DN 设置的访问控制决定了证书管理器是否可以执行发布。仅针对发布系统实际需要写入的属性,可以创建另一个具有有限读写权限的 DN。
- 密码。这是 CA 用于绑定到发布证书或 CRL 的 LDAP 目录的密码。证书管理器将此密码保存到其
password.conf
文件中。例如:CA LDAP Publishing:password
注意标识发布密码(CA LDAP Publishing)的参数名称在 ca.publish.ldappublish.ldap.ldapauth.bindPWPrompt 参数中的证书管理器CS.cfg
文件中设置,可以对其进行编辑。 - 客户端证书.这会将证书管理器用于 SSL 客户端身份验证的证书设置为发布目录。默认情况下,证书管理器使用其 SSL 服务器证书。
- LDAP 版本.选择 LDAP 版本 3。
- 身份验证.证书管理器向目录服务器进行身份验证的方式。选择是 基本身份验证 和 SSL 客户端身份验证。如果将目录服务器配置为基本身份验证或在没有客户端身份验证的情况下 SSL 通信,请选择 基本身份验证 并为 Directory Manager DN 和密码指定值。如果为与客户端身份验证的 SSL 通信配置了目录服务器,请选择 SSL 客户端身份验证 和 Use SSL 通信 选项,并且识别证书管理器必须用于 SSL 客户端对目录进行身份验证的证书。
pkiconsole
已被弃用。
9.7. 启用发布队列
pkiconsole
已被弃用。
图 9.1. 启用 Publishing Queue
CS.cfg
文件启用发布队列,管理员可以设置用于发布操作的其他选项,如用于发布操作和队列页面大小的线程数量。
CS.cfg
文件配置此功能的说明,请参阅 Red Hat Certificate System 规划、安装和部署指南中的 启用和配置 发布 队列 部分。
9.8. 设置可恢复的 CRL 下载
9.8.1. 使用 wget 检索 CRL
[root@server ~]# wget --no-check-certificate -d https://server.example.com:8443/ca/ee/ca/crl/MasterCRL.bin
参数 | 描述 |
---|---|
无参数 | 检索完整的 CRL。 |
-N | 检索比本地副本更新的 CRL (delta CRL)。 |
-c | 检索部分下载的文件。 |
--no-check-certificate | 跳过连接的 SSL,因此不需要在主机和客户端之间配置 SSL。 |
-d | 打印调试信息。 |
9.9. 发布跨证书
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,选择左侧窗格中的 Certificate Manager 链接,然后选择 Publishing 链接。
- 单击 Publishing 下的 Rules 链接。这会在右侧打开 Rules Management 窗格。
- 如果规则存在并已禁用,请选中 启用 复选框。如果删除了该规则,请单击 并创建新规则。
- 从 类型 下拉菜单中选择 xcerts。
- 确保选择了 enable 复选框。
- 从 mapper 下拉菜单中选择 LdapCaCertMap。
- 从 publisher 下拉菜单中选择 LdapCrossCertPairPublisher。
pkiconsole
已被弃用。
9.10. 测试发布到文件
- 打开 CA 的端到端页面,并请求证书。
- 如果需要,通过代理服务页面批准请求。
- 从终端实体页面检索证书,并将证书下载到浏览器中。
- 检查服务器是否生成了包含证书的 DER 编码文件。打开应发布证书的二进制 blob 的目录。证书文件应命名为
cert-
serial_number.der
。 - 使用 Binary 到 ASCII 工具,将 DER 编码的证书转换为其基本 64 编码格式。有关此工具的详情,请参考
BtoA (1)
手册页。BtoA input_file output_file
INPUT_ FILE 设置包含 DER 编码证书的文件的路径,output_file 设置要编写 base-64 编码证书的文件的路径。 - 打开 ASCII 文件;base-64 编码证书与显示的证书类似:
-----BEGIN CERTIFICATE----- MMIIBtgYJYIZIAYb4QgIFoIIBpzCCAZ8wggGbMIIBRaADAgEAAgEBMA0GCSqGSIb3DQEBBAUAMFcxC AJBgNVBAYTAlVTMSwwKgYDVQQKEyNOZXRzY2FwZSBDb21tdW5pY2F0aWhfyyuougjgjjgmkgjkgmjg fjfgjjjgfyjfyj9ucyBDb3Jwb3JhdGlvbjpMEaMBgGA1UECxMRSXNzdWluZyhgdfhbfdpffjphotoo gdhkBBdXRob3JpdHkwHhcNOTYxMTA4MDkwNzM0WhcNOTgxMTA4MDkwNzMM0WjBXMQswCQYDVQQGEwJ VUzEsMCoGA1UEChMjTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yY2F0aW9ucyBDb3Jwb3Jhd GlvbjpMEaMBgGA1UECxMRSXNzdWluZyBBdXRob3JpdHkwHh -----END CERTIFICATE-----
- 使用 Pretty Print Certificate 工具将基本 64 编码的证书转换为可读形式。有关此工具的更多信息,请参阅
PrettyPrintCert (1)
手册页。PrettyPrintCert input_file [output_file]
INPUT_ FILE 设置包含 base-64 编码证书的 ASCII 文件的路径,以及 output_file (可选)设置要写入证书的文件的路径。如果没有设置输出文件,证书信息将写入标准输出。 - 将输出与发布的证书进行比较;检查证书中的序列号与文件名中使用的序列号。如果所有内容都匹配,则证书管理器配置正确,以将证书发布到文件。
- 吊销证书。
- 检查服务器是否生成了包含 CRL 的 DER 编码文件。打开服务器要发布 CRL 作为二进制 blob 的目录。CRL 文件应具有名称,格式为 crl-this_update.der。this_update 指定来自 CRL 的时间 依赖此更新 变量的值。
- 使用 Binary 到 ASCII 工具,将 DER 编码的 CRL 转换为其基本 64 编码格式。
BtoA input_file output_file
- 使用 Pretty Print CRL 工具将基本 64 编码的 CRL 转换为可读形式。
PrettyPrintCrl input_file [output_file]
- 比较输出。
9.11. 查看证书和 CRL 发布到文件
- 将 base-64 文件转换为 二进制文件。例如:
AtoB /tmp/example.b64 /tmp/example.bin
- 使用 PrettyPrintCert 或 PrettyPrintCrl 工具将二进制文件转换为用户友善格式。例如:
PrettyPrintCert example.bin example.cert
PrettyPrintCrl example.der example.crl
9.12. 更新目录中的证书和 CRL
- 在内部数据库中搜索没有同步的证书,并发布或取消发布。
- 发布目录服务器停机时发布的证书。同样,未发布已撤销或在目录服务器停机时过期的证书。
- 根据序列号发布或取消发布一系列证书,从序列号 xx 到序列号 yy。
9.12.1. 手动更新目录中的证书
- 使用证书更新目录。
- 从目录中删除过期的证书。通过调度自动化作业,可以从发布目录中删除过期的证书。详情请查看 第 13 章 设置自动化作业。
- 从目录中删除撤销的证书。
- 打开 证书管理器代理服务页面。
- 选择 Update Directory Server 链接。
- 选择适当的选项,然后单击。证书管理器开始使用其内部数据库中的证书信息更新目录。如果更改非常大,则更新目录可能需要大量时间。在此期间,任何通过证书管理器所做的更改(包括签发或撤销的任何证书)都可能不包括在更新中。如果在更新目录时发布或撤销任何证书,请再次更新目录以反映这些更改。
- 通过将 predicate 参数的值改为 profileId!=caCACert,来修改用户证书的默认发布规则。
- 使用 LdapCaCertPublisher publisher 插件模块添加另一个规则,将 predicate 参数设置为 profileId=caCACert,以发布从属 CA 证书。
9.12.2. 在目录中手动更新 CRL
- 打开 证书管理器代理服务页面。
- 选择 Update Revocation List。
- 点。
9.13. 注册自定义映射程序和过期插件模块
- 创建自定义作业类。在本例中,自定义发布者插件名为
MyPublisher.java
。 - 编译新类。
javac -d . -classpath $CLASSPATH MyPublisher.java
- 在 CA 的
WEB-INF
web 目录中创建一个目录来保存自定义类,以便 CA 可以访问它们。mkdir /var/lib/pki/instance_name/ca/webapps/ca/WEB-INF/classes
- 将新插件文件复制到新的
类
目录中,并将所有者设置为证书系统用户(pkiuser
)。cp -pr com /var/lib/pki/instance_name/ca/webapps/ca/WEB-INF/classes chown -R pkiuser:pkiuser /var/lib/pki/instance_name/ca/webapps/ca/WEB-INF/classes
- 注册插件。
- 登录证书管理器控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,从左侧的导航树中选择 Certificate Manager。选择 Publishing。
- 要注册映射程序模块,请选择 Mappers,然后选择 映射程序插件注册 选项卡。要注册发布者模块,请选择 站s,然后选择 附件 插件注册 选项卡。
- 要注册插件,请点击。
- 设置插件名称和插件类名称。类名称为实现 Java 类的路径。如果这个类是软件包的一部分,请包含软件包名称。例如,若要在名为 com.customplugins 的软件包中注册名为 customMapper 的类,名称为 com.customplugins.customMapper。
pkiconsole
已被弃用。
第 10 章 注册证书的身份验证
- 在 代理批准的 注册中,最终用户请求将发送到代理以进行批准。代理批准证书请求。
- 在 自动注册 中,最终用户请求使用插件进行身份验证,然后处理证书请求;代理不涉及注册过程。
- 在 CMC 注册 中,第三方应用程序可以创建由代理签名的请求,然后自动处理。
10.1. 配置代理应用注册
.cfg
文件中。例如:
auth.instance_id=
10.2. 自动注册
- 基于目录的注册。最终实体使用其用户 ID 和密码或其 DN 和密码对 LDAP 目录进行身份验证。请参阅 第 10.2.1 节 “设置基于目录的身份验证”。
- 基于 PIN 的注册。结束实体使用在其目录条目中设置的用户 ID、密码和 PIN 对 LDAP 目录进行身份验证。请参阅 第 10.2.2 节 “设置基于 PIN 的注册”。
- 基于证书的验证。某些类型的实体 - 最终用户和其他实体(如服务器或令牌)都使用 CA 发布的证书来证明其身份。这最常用于续订,其中显示了原始证书来验证续订过程。请参阅 第 10.2.3 节 “使用基于证书的身份验证”。
- AgentCertAuth.如果提交了请求作为子系统代理进行身份验证,此方法会自动批准证书请求。用户通过提供代理证书来作为代理进行身份验证。如果显示的证书被子系统识别为代理证书,则 CA 会自动处理证书请求。这种形式的自动身份验证可与证书配置文件关联,以注册服务器证书。此插件默认为启用,且没有参数。
- 基于平面文件的注册。专门用于路由器(SCEP)注册,使用文本文件,其中包含 IP 地址、主机名或其他标识符列表,通常是随机 PIN。路由器通过其 ID 和 PIN 验证 CA,然后将提供的凭据与文本文件的身份列表进行比较。请参阅 第 10.2.4 节 “配置平面文件身份验证”。
10.2.1. 设置基于目录的身份验证
- 创建 UidPwdDirAuth 或 UdnPwdDirAuth 身份验证插件模块的实例并配置实例。
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,在导航树中选择 Authentication。注意UidPwdDirAuth 插件默认为启用。
- 点击。此时会出现 Select Authentication Plug-in Implementation 窗口。
- 选择 UidPwdDirAuth 用于用户 ID 和密码身份验证,或者选择 UdnPwdDirAuth 用于 DN 和密码身份验证。
- 在 Authentication Instance Editor 窗口中填写以下字段:
- 身份验证实例 ID。接受默认实例名称,或输入一个新名称。
- dnpattern.指定代表主题名称模式的字符串,从目录属性和条目 DN 中公式。
- ldapStringAttributes.指定应被视为最终实体 验证的 LDAP 字符串属性列表。如果指定,与这些属性对应的值将从身份验证令牌复制到身份验证令牌中,证书配置文件使用它来生成主题名称。为此参数输入值是可选的。
- ldapByteAttributes.指定应该被视为最终实体的 LDAP 字节(binary)属性列表。如果指定,与这些属性对应的值将从身份验证令牌复制到身份验证令牌中,供其他模块使用,如向用户的证书添加其他信息。为此参数输入值是可选的。
- ldap.ldapconn.host.指定身份验证目录的完全限定 DNS 主机名。
- ldap.ldapconn.port.指定身份验证目录侦听请求的 TCP/IP 端口;如果选择了 ldap.ldapconn.secureConn. 复选框,则这应该是 SSL 端口号。
- ldap.ldapconn.secureConn.指定身份验证目录侦听证书系统请求的端口的类型 SSL 或非 SSL。如果这是 SSL 端口,请选择。
- ldap.ldapconn.version.指定 LDAP 协议版本,可以是 2 或 3。默认值为 3,因为所有在版本 3.x 之后的 Directory 服务器都是 LDAPv3。
- ldap.basedn.指定搜索身份验证目录的基本 DN。服务器使用 HTTP 输入中的 uid 字段的值(用户在注册表单中输入什么用户)和基本 DN 来构建 LDAP 搜索过滤器。
- ldap.minConns.指定允许到身份验证目录的最小连接数。允许的值是 1 到 3。
- ldap.maxConns.指定允许到身份验证目录的最大连接数。允许的值为 3 到 10。
- 点。身份验证实例已设置并启用。
- 通过为特定证书设置策略,将证书配置文件设置为用于注册用户。通过在证书配置文件中配置输入来自定义注册表单,并包含插件所需信息的输入来验证用户。如果默认输入不包含需要收集的所有信息,请提交使用第三方工具创建的请求。有关配置配置集的详情,请参考 第 3.7.2 节 “将 LDAP 目录属性值和其他信息插入到主题 Alt 名称”。
pkiconsole
已被弃用。
设置 Bound LDAP 连接
- 根据
CS.cfg
中的以下示例设置基于目录的身份验证:auths.instance.UserDirEnrollment.ldap.ldapBoundConn=true auths.instance.UserDirEnrollment.ldap.ldapauth.authtype=BasicAuth auths.instance.UserDirEnrollment.ldap.ldapauth.bindDN=cn=Directory Manager auths.instance.UserDirEnrollment.ldap.ldapauth.bindPWPrompt=externalLDAP externalLDAP.authPrefix=auths.instance.UserDirEnrollment cms.passwordlist=internaldb,replicationdb,externalLDAP
其中bindPWPrompt
是password.conf
文件中使用的标签或提示;它也是cms.passwordlist
和authPrefix
选项下使用的名称。 - 在
password.conf
中使用其密码从CS.cfg
添加标签或提示:externalLDAP=your_password
设置外部授权
CS.cfg
中配置以下选项:
groupsEnable
是一个布尔值选项,它允许检索组。默认值为false
。基于组的组
是组的基本 DN。当它与默认的基于值不同时,需要指定它
。groups
是组的 DN 组件。默认值为ou=groups
。groupObjectClass
是以下组对象类之一:groupofuniquenames
,groupofnames
.默认值为groupofuniquenames
。groupUseridName
是组对象成员属性中的用户 ID 属性的名称。默认值为cn
。useridName
是用户 ID DN 组件的名称。默认值为uid
。searchGroupUserByUserdn
是一个布尔值选项,它决定是否为userdn
或${groupUserIdName}=${uid}
属性搜索组对象成员属性。默认值为true
。
auths.instance.UserDirEnrollment.pluginName=UidPwdDirAuth auths.instance.UserDirEnrollment.ldap.basedn=cn=users,cn=accounts,dc=local auths.instance.UserDirEnrollment.ldap.groupObjectClass=groupofnames auths.instance.UserDirEnrollment.ldap.groups=cn=groups auths.instance.UserDirEnrollment.ldap.groupsBasedn=cn=accounts,dc=local auths.instance.UserDirEnrollment.ldap.groupsEnable=true auths.instance.UserDirEnrollment.ldap.ldapconn.host=local auths.instance.UserDirEnrollment.ldap.ldapconn.port=636 auths.instance.UserDirEnrollment.ldap.ldapconn.secureConn=true
/instance_path/ca/profiles/ca/profile_id.cfg
文件,将配置集配置为使用 CS.cfg
中定义的 UserDirEnrollment
auth 实例,以及根据组提供 ACL。例如:
auth.instance_id=UserDirEnrollment auths.acl=group="cn=devlab-access,ou=engineering,dc=example,dc=com"
10.2.2. 设置基于 PIN 的注册
- 将 PIN 的必要模式添加到 LDAP 目录中。
- 为设置的 PIN 管理器用户添加具有读写权限的 PIN 管理器用户。
- 设置 ACI,以便在使用 PIN 后允许 PIN 移除,为 PIN 管理器授予 PIN 的读写权限,并防止用户创建或更改 PIN。
- 在每个用户条目中创建 PIN。
- 使用 PIN 工具添加 PINs 所需的模式,将 PIN 添加到用户条目,然后将 PIN 分发到用户。
- 打开
/usr/share/pki/native-tools/
目录。 - 在文本编辑器中打开
setpin.conf
文件。 - 按照文件中介绍的说明进行适当的更改。通常,需要更新的参数是目录服务器的主机名、目录管理器的绑定密码和 PIN 管理器的密码。
- 使用指向
setpin.conf
文件的 optfile 选项运行 setpin 命令。setpin optfile=/usr/share/pki/native-tools/setpin.conf
该工具使用新属性(默认为 pin)和新对象类(默认为 pinPerson)、创建一个 pinmanager 用户,并设置 ACI 来只允许 pinmanager 用户修改 pin 属性。 - 要为特定用户条目或提供用户定义的 PIN 生成 PIN,请创建一个输入文件,其中包含列出这些条目的 DN。对于 ezample:
dn:uid=bjensen,ou=people,dc=example,dc=com dn:uid=jsmith,ou=people,dc=example,dc=com dn:jtyler,ou=people,dc=example,dc=com ...
有关构建输入文件的详情,请参考 证书系统命令行工具指南中的 PIN 生成器章节。 - 禁用 setpin 命令的设置模式。注释掉 setup 行,或将值改为 no。
vim /usr/share/pki/native-tools/setpin.conf setup=no
设置模式创建所需的 uers 和对象类,但工具不会在设置模式中生成 PIN。 - 运行 setpin 命令,在目录中创建 PIN。TIP首先,测试工具没有
写入
选项来生成 PIN 列表,而无需实际更改目录。例如:setpin host=yourhost port=9446 length=11 input=infile output=outfile write "binddn=cn=pinmanager,o=example.com" bindpw="password" basedn=o=example.com "filter=(uid=u*)" hash=sha256
WARNING不要将hash
参数设置为none
。使用hash=none
运行 setpin 命令会导致固定以纯文本形式存储在用户 LDAP 条目中。 - 在完成设置所需的身份验证方法后,使用输出文件向用户发送 PIN。
- 在证书配置文件中为特定证书设置策略以注册用户。有关证书配置文件策略的详情,请查看 第 3 章 为颁发证书(证书配置文件)进行规则。
- 创建并配置 UidPwdPinDirAuth 身份验证插件的实例。
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,在导航树中选择 Authentication。
- 点击。此时会出现 Select Authentication Plug-in Implementation 窗口。
- 选择 UidPwdPinDirAuth 插件模块。
- 在 Authentication Instance Editor 窗口中填写以下字段:
- 身份验证实例 ID。接受默认实例名称或输入新名称。
- removePin.设置在最终用户成功验证后是否从身份验证目录中删除 PIN。从目录中删除 PIN 会限制用户一次注册多次,从而防止他们获取多个证书。
- pinAttr.指定 PIN 的身份验证目录属性。PIN Generator 实用程序将属性设置为
setpin.conf
文件中的 objectclass 参数的值;此参数的值是 pin。 - dnpattern.指定代表主题名称模式的字符串,从目录属性和条目 DN 中公式。
- ldapStringAttributes.指定应被视为最终实体 验证的 LDAP 字符串属性列表。为此参数输入值是可选的。
- ldapByteAttributes.指定应该被视为最终实体的 LDAP 字节(binary)属性列表。如果指定,与这些属性对应的值将从身份验证令牌复制到身份验证令牌中,供其他模块使用,如向用户的证书添加其他信息。为此参数输入值是可选的。
- ldap.ldapconn.host.指定身份验证目录的完全限定 DNS 主机名。
- ldap.ldapconn.port.指定身份验证目录侦听证书系统请求的 TCP/IP 端口。
- ldap.ldapconn.secureConn.指定身份验证目录侦听请求的端口的类型 SSL 或非 SSL。如果这是 SSL 端口,请选择。
- ldap.ldapconn.version.指定 LDAP 协议版本,可以是 2 或 3。默认情况下,这是 3,因为 3.x 之后的所有目录服务器版本都是 LDAPv3。
- ldap.ldapAuthentication.bindDN.指定从身份验证目录中删除 PIN 时要绑定的用户条目。仅在选择了 removePin 复选框时指定此参数。建议单独用户条目,它只有权修改目录中的 PIN 属性。例如,请勿使用 Directory Manager 条目,因为它有修改整个目录内容的特权。
- 密码。提供与 ldap.ldapauthbindDN 参数指定的 DN 关联的密码。在保存更改时,服务器会将密码存储在单点登录密码缓存中,并使用它进行后续启动。只有在选择了 removePin 复选框时,才需要设置此参数。
- ldap.ldapAuthentication.clientCertNickname.指定用于 SSL 客户端对要删除 PIN 的身份验证的证书 nickname。确保证书有效,并由身份验证目录的证书数据库中信任的 CA 签名,并且身份验证目录的
certmap.conf
文件中已被正确配置,以正确将证书映射到目录中的 DN。这是仅删除 PIN 所必需的。 - ldap.ldapAuthentication.authtype.指定身份验证类型、基本身份验证或 SSL 客户端身份验证,以便从身份验证目录中删除 PIN。
- Basic auth 指定基本身份验证。使用此选项时,为 ldap.ldapAuthentication.bindDN 和密码 参数输入正确的值;服务器使用来自 ldap. ldapAuthentication.bindDN 属性的 DN 来绑定到该目录。
- SslClientAuth 指定 SSL 客户端身份验证。使用此选项时,将 ldap.ldapconn.secureConn 参数的值设置为 true,将 ldap.ldapAuthentication.clientCertNickname 参数的值设置为用于 SSL 客户端身份验证的证书 nickname。
- ldap.basedn.指定搜索身份验证目录的基本 DN;服务器使用来自 HTTP 输入的 uid 字段的值(用户在注册表单中输入的内容)和基本 DN 来构造 LDAP 搜索过滤器。
- ldap.minConns.指定允许到身份验证目录的最小连接数。允许的值是 1 到 3。
- ldap.maxConns.指定允许到身份验证目录的最大连接数。允许的值为 3 到 10。
- 点。
- 通过在证书配置文件中配置输入来自定义注册表单。包含插件验证用户所需的信息。如果默认输入不包含需要收集的所有信息,请提交使用第三方工具创建的请求。
pkiconsole
已被弃用。
10.2.3. 使用基于证书的身份验证
10.2.4. 配置平面文件身份验证
10.2.4.1. 配置 flatFileAuth 模块
- 打开 CA 控制台。
pkiconsole https://server.example.com:8443/ca
- 在 Configuration 选项卡中,在导航树中选择 Authentication。
- 选择 flatFileAuth 身份验证模块。
- 点。
- 要更改文件位置和名称,请重置 fileName 字段。要更改身份验证名称参数,请将 keyAttributes 值重置为 SCEP 注册表单提交的另一个值,如 CN。也可以通过逗号(如 UID、CN )分隔多个 name 参数来使用它们。要更改 password 参数名称,请重置 authAttributes 字段。
- 保存编辑。
pkiconsole
已被弃用。
10.2.4.2. 编辑 flatfile.txt
flatfile.txt
文件用于验证每个 SCEP 注册。每次向路由器发布新 PIN 时,都必须手动更新此文件。
/var/lib/pki/pki-ca/ca/conf/
中,并为每个身份验证条目指定两个参数:站点 UID (通常是 IP 地址,可以是 IPv4 或 IPv6),以及路由器发布的 PIN。
UID:192.168.123.123 PIN:HU89dj
UID:192.168.123.123 PIN:HU89dj UID:12.255.80.13 PIN:fiowIO89 UID:0.100.0.100 PIN:GRIOjisf
... flatfile.txt entry ... UID:192.168.123.123 PIN:HU89dj UID:12.255.80.13 PIN:fiowIO89 ... error log entry ... [13/Jun/2020:13:03:09][http-9180-Processor24]: FlatFileAuth: authenticating user: finding user from key: 192.168.123.123 [13/Jun/2020:13:03:09][http-9180-Processor24]: FlatFileAuth: User not found in password file.
10.3. CMC 身份验证插件
CMCAuth
- 当 CA 代理签署 CMC 请求时,请使用此插件。要使用
CMCAuth
插件,请在注册配置集中设置以下内容:auth.instance_id=CMCAuth
默认情况下,以下注册配置集使用CMCAuth
插件:- 对于系统证书:
caCMCauditSigningCert
caCMCcaCert
caCMCECserverCert
caCMCECsubsystemCert
caCMCECUserCert
caCMCkraStorageCert
caCMCkraTransportCert
caCMCocspCert
caCMCserverCert
caCMCsubsystemCert
- 对于用户证书:
caCMCUserCert
caECFullCMCUserCert
caFullCMCUserCert
CMCUserSignedAuth
- 当用户提交签名或基于 SharedSecret 的 CMC 请求时,请使用此插件。要使用
CMCUserSignedAuth
插件,请在注册配置集中设置以下内容:auth.instance_id=CMCUserSignedAuth
用户签名的 CMC 请求必须由用户的证书签名,其中包含与请求的证书相同的subjectDN
属性。如果用户已经获得了一个签名证书,则只能使用用户签名的 CMC 请求,它可用于为其他证书证明用户身份。基于 SharedSecret 的 CMC 请求意味着请求由请求本身的私钥签名。在这种情况下,CMC 请求必须使用 Shared Secret 机制进行身份验证。基于 SharedSecret 的 CMC 请求通常用于获取用户的第一个签名证书,稍后用于获取其他证书。详情请查看 第 10.4 节 “CMC SharedSecret 身份验证”。默认情况下,以下注册配置集使用CMCUserSignedAuth
插件:caFullCMCUserSignedCert
caECFullCMCUserSignedCert
caFullCMCSharedTokenCert
caECFullCMCSharedTokenCert