搜索

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

download PDF
证书的主题名称是 可分辨名称(DN),包含识别签发证书的实体的信息。此主题名称可以从标准 LDAP 目录组件构建,如通用名称和组织单元。这些组件在 X.500 中定义。除了 - 甚至替换主题名称外,证书还可以具有 主题替代名称,这是为包含 X.500 中未定义的附加信息的证书设置的扩展类型。
可以自定义主题名称和主题备用名称的命名组件。
重要
如果主题名称为空,则必须存在 Subject Alternative Name 扩展并标记为 critical。

3.7.1. 在 Subject Name 中使用 Requester 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 为 cn=John Smith,则证书将通过主题 DN cn=John Smith,DC=example, DC=com 签发。如果请求位于 中,但 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

3.7.2. 将 LDAP 目录属性值和其他信息插入到主题 Alt 名称

可以使用 Subject Alt Name Extension Default 配置中的匹配变量,将来自 LDAP 目录或请求者提交的信息插入到证书的主题备用名称中。此默认设置信息的类型(格式),然后设置用于检索信息的匹配模式(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
这会插入请求者的电子邮件作为主题 alt 名称中的第一个 CN 组件。要使用其他组件,请按顺序递增 Type_Pattern_Enable_ 值,如 Type_1
配置主题 alt 名称也会在 第 B.1.23 节 “主题备用名称扩展默认值” 中详细介绍。
将 LDAP 组件插入到证书的主题 alt 名称中:
  1. 插入 LDAP 属性值需要启用用户目录身份验证插件 SharedSecret
    1. 打开 CA 控制台。
      pkiconsole https://server.example.com:8443/ca
    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. 保存新的插件实例。
    注意
    pkiconsole 已被弃用。
    有关设置 CMC 共享令牌的详情,请参考 第 10.4.2 节 “设置 CMC 共享 Secret”
  2. ldapStringAttributes 参数指示身份验证插件从用户的 LDAP 条目读取 mail 属性的值,并将该值放在证书请求中。当值位于请求中时,证书配置文件策略可以设置为插入扩展值的值。
  3. 要让 CA 在证书扩展中插入 LDAP 属性值,请编辑配置文件的配置文件,并为扩展插入策略设置参数。例如,要在 caFullCMCSharedTokenCert 配置集中的 Subject Alternative Name 扩展中插入 mail 属性值,请更改以下代码:
    policyset.setID.8.default.params.subjAltExtPattern_0=$request.auth_token.mail[0]$
    有关编辑配置集的详情,请参考 第 3.2.1.3 节 “以 Raw 格式编辑证书配置文件”
  4. 重启 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
有很多属性可以通过在策略集中的任何 Pattern_ 参数中设置为令牌($X$)自动插入到证书中。常见的令牌在 表 3.1 “用于保留证书的变量” 中列出,默认配置集包含如何使用这些令牌的示例。
表 3.1. 用于保留证书的变量
策略设置令牌 描述
$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 属性

多个客户端应用程序和库不再支持使用 Subject DN 的通用名称(CN)属性进行验证,这已在 RFC 2818 中被弃用。相反,这些应用程序和库在证书请求中使用 dNSName Subject Alternative Name (SAN)值。
只有 CN 根据 RFC 1034 第 3.5 节,并且具有多个组件时,才会复制 CN。此外,还会保留现有的 SAN 值。例如,基于 CN 的 dNSName 值附加到现有的 SAN 中。
要将证书系统配置为使用 SAN 扩展中的 CN 属性,请编辑用于发布证书的证书配置文件。例如:
  1. 禁用配置集:
    # pki -c password -p 8080 \
         -n "PKI Administrator for example.com" ca-profile-disable profile_name
  2. 编辑配置集:
    # pki -c password -p 8080 \
         -n "PKI Administrator for example.com" ca-profile-edit profile_name
    1. 使用配置集的唯一设置号添加以下配置。例如:
      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 作为集合号。
    2. 将新策略集号附加到 policyset.userCertSet.list 参数。例如:
      policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9,12
    3. 保存配置集。
  3. 启用配置集:
    # pki -c password -p 8080 \
         -n "PKI Administrator for example.com" 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 /root/request.csr.p10
生成 CSR 后,请按照 第 5.5.2 节 “CMC 注册过程” 中描述的步骤完成 CMC 注册。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.