9.5. 证书映射和匹配规则故障排除

如果您在使用智能卡验证时遇到问题,请检查您已将智能卡证书正确链接到用户。默认情况下,当用户条目包含完整证书作为 usercertificate 属性的一部分时,会关联一个证书。但是,如果您定义了证书映射规则,您可能已经更改了与用户关联的证书的方式。要排除证书映射和匹配规则的问题,请参阅以下部分:

注意

如果您通过 SSH 使用智能卡进行验证,则需要将完整证书添加到 Identity Management(IdM)的用户条目中。如果您不使用 SSH 验证智能卡,您可以使用 ipa user-add-certmapdata 命令添加证书映射数据。

9.5.1. 检查证书如何映射到用户

默认情况下,当用户条目包含完整证书作为 usercertificate 属性的一部分时,会关联一个证书。但是,如果您定义了证书映射规则,您可能已经更改了与用户关联的证书的方式。按照以下流程检查您的证书映射规则。

先决条件

步骤

  1. 验证当前为 IdM 配置的证书映射规则:

    # ipa certmaprule-find
    -------------------------------------------
    1 Certificate Identity Mapping Rule matched
    -------------------------------------------
      Rule name: smartcardrule
      Mapping rule: (ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})
      Matching rule: <ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM
      Enabled: TRUE
    ----------------------------
    Number of entries returned 1
    ----------------------------

    您可以看到定义的以下映射规则之一:

    • ipacertmapdata 表示使用 IdM 用户条目 certmapdata 属性。
    • altSecurityIdentities 指定使用 Active Directory 的用户条目名称映射属性。
    • userCertificate;binary= 表示使用 IdM 或 AD 中的整个证书。

    您可以定义许多匹配选项,但一些通常配置的选项如下:

    • <ISSUER>CN=[…​] 指定被检查的证书的 issuer 属性,以确保它与此匹配。
    • <SUBJECT>.*,DC=MY,DC=DOMAIN 表示是否已检查证书的主题。
  2. 通过在 IdM 服务器上的 /etc/sssd/sssd.conf 文件中添加 debug_level = 9 来启用系统安全服务守护进程(SSSD)日志:

    [domain/idm.example.com]
    ...
    debug_level = 9
  3. 重启 SSSD:

    # systemctl restart sssd
  4. 如果正确读取映射,您应该在 /var/log/sssd/sssd_idm.example.com.log 文件中看到以下条目:

    [be[idm.example.com]] [sdap_setup_certmap] (0x4000): Trying to add rule [smartcardrule][-1][<ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM][(|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}))].
  5. 如果您的映射规则包含无效的语法,则日志文件中可以看到类似如下的条目:

    [be[idm.example.com]]] [sss_certmap_init] (0x0040): sss_certmap initialized.
    [be[idm.example.com]]] [ipa_certmap_parse_results] (0x4000): Trying to add rule [smartcardrule][-1][<ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM][(ipacertmapdata=X509:<I>{issuer_dn!x509}<S>{subject_dn})].
    [be[idm.example.com]]] [parse_template] (0x0040): Parse template invalid.
    [be[idm.example.com]]] [parse_ldap_mapping_rule] (0x0040): Failed to add template.
    [be[idm.example.com]]] [parse_mapping_rule] (0x0040): Failed to parse LDAP mapping rule.
    [be[idm.example.com]]] [ipa_certmap_parse_results] (0x0020): sss_certmap_add_rule failed for rule [smartcardrule], skipping. Please check for typos and if rule syntax is supported.
    [be[idm.example.com]]] [ipa_subdomains_certmap_done] (0x0040): Unable to parse certmap results [22]: Invalid argument
    [be[idm.example.com]]] [ipa_subdomains_refresh_certmap_done] (0x0020): Failed to read certificate mapping rules [22]: Invalid argument
  6. 检查您的映射规则语法。

    # ipa certmaprule-show smartcardrule
      Rule name: smartcardrule
      Mapping rule: (|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}))
      Matching rule: <ISSUER>CN=Certificate Authority,O=IDM.EXAMPLE.COM
      Domain name: ipa.test
      Enabled: TRUE
  7. 如果需要,修改您的证书映射规则:

    # ipa certmaprule-mod smartcardrule --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'

其他资源

  • 请参阅 sss-certmap man page。

9.5.2. 检查与智能卡证书关联的用户

如果您在使用智能卡进行身份验证时遇到问题,请验证正确的用户是否与您的智能卡证书关联。

先决条件

步骤

  1. 验证用户是否与您的智能卡证书关联:

    # ipa certmap-match cert.pem
    --------------
    1 user matched
    --------------
      Domain: IDM.EXAMPLE.COM
      User logins: idmuser1
    ----------------------------
    Number of entries returned 1
    ----------------------------

    如果用户或域不正确,请检查您的证书如何映射到用户。请参阅检查如何将证书映射到用户

  2. 检查用户条目是否包含证书:

    # ipa user-show idmuser1
      User login: idmuser1
    [...]
    Certificate:MIIEejCCAuKgAwIBAgIBCzANBgkqhkiG9w0BAQsFADAzMREwDwYDVQQKDAhJUEEuVEVTVDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XD
  3. 如果您的用户条目不包含证书,请将您的 base-64 编码证书添加到用户条目中:

    1. 创建一个包含证书的环境变量,该变量移除了标头和页脚,并串联成一行,这是 ipa user-add-cert 命令期望的格式:

      $ export CERT=`openssl x509 -outform der -in idmuser1.crt | base64 -w0 -`

      请注意,idmuser1.crt 文件中的证书必须采用 PEM 格式。

    2. 使用 ipa user-add-cert 命令将证书添加到 idmuser1 配置集中:

      $ ipa user-add-cert idmuser1 --certificate=$CERT
    3. 清除系统安全服务守护进程(SSSD)缓存。

      # sssctl cache-remove
      SSSD must not be running. Stop SSSD now? (yes/no) [yes] yes
      Creating backup of local data…
      Removing cache files…
      SSSD needs to be running. Start SSSD now? (yes/no) [yes] yes
  4. 再次运行 ipa certmap-match 来确认用户与您的智能卡证书关联。