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

在本例中,如果请求与 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 名称中:

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

    1. 打开 CA 控制台。

      # pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
      注意

      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
    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]$

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

  4. 重启 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 “用于填充证书的变量” 中,默认配置集包含如何使用这些令牌的示例。

表 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
  2. 编辑配置集:

    # 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
    • 保存配置集。
  3. 启用配置集:

    # 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 注册。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.