3.7. 管理主题名称和主题备用名称


证书的主题名称是一个可分辨名称(DN),其中包含有关签发证书的实体的信息。此主题名称可以从标准 LDAP 目录组件构建,如通用名称和组织单元。这些组件在 X.500 中定义。除了 - 主题名称甚至代替 - 主题名称外,证书还可以具有 主题替代名称,这是包含 X.500 中未定义的额外信息的扩展类型。

主题名称和主题替代名称的命名组件可以自定义。

重要

如果主题名称为空,则必须显示 Subject Alternative Name 扩展并标记为 critical。

3.7.1. 在主题名称中使用请求者 CN 或 UID

证书请求的 cnuid 值可用于构建签发的证书的主题名称。本节演示了一个配置集,需要在 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
Copy to Clipboard Toggle word wrap

在本例中,如果请求与 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
Copy to Clipboard Toggle word wrap

pattern 参数的格式包含在 第 B.2.11 节 “主题名称约束”第 B.1.27 节 “主题名称默认” 中。

来自 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
Copy to Clipboard Toggle word wrap

这会插入请求者的电子邮件作为主题备用名称中的第一个 CN 组件。要使用其他组件,以数字方式递增 Type_Pattern_Enable_ 值,如 Type_1

另外,在 第 B.1.23 节 “主题备用名称扩展默认” 中还提供了配置主题备用名称。

将 LDAP 组件插入到证书的 subject alt 名称中:

  1. 插入 LDAP 属性值需要启用用户目录身份验证插件 SharedSecret

    1. 打开 CA 控制台。

      # pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
      Copy to Clipboard Toggle word wrap
      注意

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

    2. 在左侧导航树中选择 Authentication
    3. Authentication Instance 选项卡中,点 Add,并添加 SharedSecret 身份验证插件的实例。
    4. 输入以下信息:

      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
      Copy to Clipboard Toggle word wrap
    5. 保存新插件实例。

    有关设置 CMC 共享令牌的详情,请参考 第 8.4.2 节 “设置 CMC 共享 Secret”

  2. ldapStringAttributes 参数指示身份验证插件从用户的 LDAP 条目读取 mail 属性的值,并将该值放在证书请求中。当该值在请求中时,可将证书配置文件策略设置为插入扩展值。

    dnpattern 参数的格式包含在 第 B.2.11 节 “主题名称约束”第 B.1.27 节 “主题名称默认” 中。

  3. 要启用 CA 在证书扩展中插入 LDAP 属性值,请编辑配置集的配置文件,并为扩展插入策略设置参数。例如,要在 caFullCMCSharedTokenCert 配置集中的 Subject Alternative Name 扩展中插入 mail 属性值,请更改以下代码:

    policyset.setID.8.default.params.subjAltExtPattern_0=$request.auth_token.mail[0]$
    Copy to Clipboard Toggle word wrap

    有关编辑配置集的详情,请参考 第 3.2.2.2 节 “使用原始格式编辑证书配置文件”

  4. 重启 CA。

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

在本例中,通过 caFullCMCSharedTokenCert 配置文件注册表单提交的证书将添加 Subject Alternative Name 扩展,并添加了请求者的 mail LDAP 属性的值。例如:

Identifier: Subject Alternative Name - 2.5.29.17
    Critical: no
    Value:
    RFC822Name: jsmith@example.com
Copy to Clipboard Toggle word wrap

通过将在策略集中的任何 Pattern_ 参数中设置为令牌($X$),可以将许多属性自动插入到证书中。常见令牌列在 表 3.1 “用于填充证书的变量” 中,默认配置集包含如何使用这些令牌的示例。

Expand
表 3.1. 用于填充证书的变量
策略设置令牌描述

$request.auth_token.cn[0]$

请求证书的用户的 LDAP 通用名称(cn)属性。

$request.auth_token.mail[0]$

请求证书的用户的 LDAP 电子邮件(邮件)属性的值。

$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 属性

多个客户端应用程序和库不再支持将 Subject DN 的通用名称(CN)属性用于域名验证,该属性已在 RFC 2818 中弃用。相反,这些应用程序和库在证书请求中使用 dNSName Subject Alternative Name (SAN)值。

证书系统仅当与 RFC 1034 第 3.5 节中的首选名称语法匹配且具有多个组件时,才会复制 CN。另外,会保留现有的 SAN 值。例如,基于 CN 的 dNSName 值会附加到现有 SAN 中。

要将证书系统配置为自动使用 SAN 扩展中的 CN 属性,请编辑用于发布证书的证书配置文件。例如:

  1. 禁用配置集:

    # pki -c password -d /administrator_nssdb_directory/ -p 8443 -n administrator_cert_nickname ca-profile-disable profile_name
    Copy to Clipboard Toggle word wrap
  2. 编辑配置集:

    # pki -c password -d /administrator_nssdb_directory/ -p 8443 -n administrator_cert_nickname ca-profile-edit profile_name
    Copy to Clipboard Toggle word wrap
    • 使用配置集的唯一集合号添加以下配置。例如:

      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
      Copy to Clipboard Toggle word wrap

      上例使用 12 作为集合号。

    • 将新策略设置号附加到 policyset.userCertSet.list 参数。例如:

      policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9,12
      Copy to Clipboard Toggle word wrap
    • 保存配置集。
  3. 启用配置集:

    # pki -c password -d /administrator_nssdb_directory/ -p 8443 -n administrator_nickname ca-profile-enable profile_name
    Copy to Clipboard Toggle word wrap
注意

所有默认服务器配置文件都包含 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
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

生成 CSR 后,请按照 第 5.3.1 节 “CMC 注册过程” 中描述的步骤完成 CMC 注册。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat