3.7. 管理主题名称和主题备用名称
证书的主题名称是一个可分辨名称(DN),其中包含有关签发证书的实体的信息。此主题名称可以从标准 LDAP 目录组件构建,如通用名称和组织单元。这些组件在 X.500 中定义。除了 - 主题名称甚至代替 - 主题名称外,证书还可以具有 主题替代名称,这是包含 X.500 中未定义的额外信息的扩展类型。
主题名称和主题替代名称的命名组件可以自定义。
如果主题名称为空,则必须显示 Subject Alternative Name 扩展并标记为 critical。
3.7.1. 在主题名称中使用请求者 CN 或 UID
证书请求的 cn
或 uid
值可用于构建签发的证书的主题名称。本节演示了一个配置集,需要在 Subject Name Constraint 中指定 naming 属性(CN 或 UID)。如果缺少 naming 属性,则请求将被拒绝。
这个配置有两个部分:
-
CN 或 UID 格式在 Subject Name Constraint 中的
模式
配置中设置。 - 主题 DN 的格式,包括 CN 或 UID 令牌以及证书的特定后缀,在 Subject Name Default 中设置。
例如,要在主题 DN 中使用 CN:
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
在本例中,如果请求与 cn=John Smith
的 CN 中出现,则使用 cn=John Smith,DC=example, DC=com
的主题 DN 发布证书。如果请求进入,但 UID uid=jsmith
且没有 CN,则请求将被拒绝。
相同的配置用于将请求者 UID 拉取到主题 DN 中:
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
pattern
参数的格式包含在 第 B.2.11 节 “主题名称约束” 和 第 B.1.27 节 “主题名称默认” 中。
3.7.2. 将 LDAP 目录属性值和其他信息插入到 subject alt name 中
来自 LDAP 目录或由请求者提交的信息可以插入到证书的主题备用名称中,方法是使用 Subject Alt Name Extension Default configuration 中的匹配变量来插入证书的主题备用名称。此默认设置信息的类型(format),然后设置匹配的模式(variable)以检索信息。例如:
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
这会插入请求者的电子邮件作为主题备用名称中的第一个 CN 组件。要使用其他组件,以数字方式递增 Type_
、Pattern_
和 Enable_
值,如 Type_1
。
另外,在 第 B.1.23 节 “主题备用名称扩展默认” 中还提供了配置主题备用名称。
将 LDAP 组件插入到证书的 subject alt 名称中:
插入 LDAP 属性值需要启用用户目录身份验证插件
SharedSecret
。打开 CA 控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
注意pkiconsole
已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole
在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole
等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。- 在左侧导航树中选择 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
- 保存新插件实例。
有关设置 CMC 共享令牌的详情,请参考 第 8.4.2 节 “设置 CMC 共享 Secret”。
ldapStringAttributes
参数指示身份验证插件从用户的 LDAP 条目读取mail
属性的值,并将该值放在证书请求中。当该值在请求中时,可将证书配置文件策略设置为插入扩展值。dnpattern
参数的格式包含在 第 B.2.11 节 “主题名称约束” 和 第 B.1.27 节 “主题名称默认” 中。要启用 CA 在证书扩展中插入 LDAP 属性值,请编辑配置集的配置文件,并为扩展插入策略设置参数。例如,要在
caFullCMCSharedTokenCert
配置集中的 Subject Alternative Name 扩展中插入mail
属性值,请更改以下代码:policyset.setID.8.default.params.subjAltExtPattern_0=$request.auth_token.mail[0]$
有关编辑配置集的详情,请参考 第 3.2.2.2 节 “使用原始格式编辑证书配置文件”。
重启 CA。
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
在本例中,通过 caFullCMCSharedTokenCert
配置文件注册表单提交的证书将添加 Subject Alternative Name 扩展,并添加了请求者的 mail
LDAP 属性的值。例如:
Identifier: Subject Alternative Name - 2.5.29.17 Critical: no Value: RFC822Name: jsmith@example.com
通过将在策略集中的任何 Pattern_
参数中设置为令牌($X$),可以将许多属性自动插入到证书中。常见令牌列在 表 3.1 “用于填充证书的变量” 中,默认配置集包含如何使用这些令牌的示例。
策略设置令牌 | 描述 |
---|---|
$request.auth_token.cn[0]$ |
请求证书的用户的 LDAP 通用名称( |
$request.auth_token.mail[0]$ |
请求证书的用户的 LDAP 电子邮件( |
$request.auth_token.tokencertsubject$ | 证书主题名称。 |
$request.auth_token.uid$ |
请求证书的用户的 LDAP 用户 ID ( |
$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。例如, |
3.7.3. 在 SAN 扩展中使用 CN 属性
多个客户端应用程序和库不再支持将 Subject DN 的通用名称(CN)属性用于域名验证,该属性已在 RFC 2818 中弃用。相反,这些应用程序和库在证书请求中使用 dNSName
Subject Alternative Name (SAN)值。
证书系统仅当与 RFC 1034 第 3.5 节中的首选名称语法匹配且具有多个组件时,才会复制 CN。另外,会保留现有的 SAN 值。例如,基于 CN 的 dNSName
值会附加到现有 SAN 中。
要将证书系统配置为自动使用 SAN 扩展中的 CN 属性,请编辑用于发布证书的证书配置文件。例如:
禁用配置集:
# pki -c password -d /administrator_nssdb_directory/ -p 8443 -n administrator_cert_nickname ca-profile-disable profile_name
编辑配置集:
# pki -c password -d /administrator_nssdb_directory/ -p 8443 -n administrator_cert_nickname 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 -d /administrator_nssdb_directory/ -p 8443 -n administrator_nickname ca-profile-enable profile_name
所有默认服务器配置文件都包含 commonNameToSANDefaultImpl
默认。
3.7.4. 接受 CSR 中的 SAN 扩展
在某些环境中,管理员希望允许在证书签名请求(CSR)中指定主题备用名称(SAN)扩展。
3.7.4.1. 配置配置文件以从 CSR 检索 SAN
要允许从 CSR 检索 SAN,请使用用户扩展默认值。详情请查看 第 B.1.32 节 “用户 Supplied 扩展默认”。
SAN 扩展可以包含一个或多个 SAN。
要接受来自 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 request.csr.p10
生成 CSR 后,请按照 第 5.3.1 节 “CMC 注册过程” 中描述的步骤完成 CMC 注册。