10.5. 证书映射和匹配规则故障排除
如果您在使用智能卡验证时遇到问题,请检查您已将智能卡证书正确链接到用户。默认情况下,当用户条目包含完整证书作为 usercertificate
属性的一部分时,会关联一个证书。但是,如果您定义了证书映射规则,您可能已经更改了与用户关联的证书的方式。要排除证书映射和匹配规则的问题,请参阅以下部分:
如果您通过 SSH 使用智能卡进行验证,则需要将完整证书添加到 Identity Management(IdM)的用户条目中。如果您不使用 SSH 验证智能卡,您可以使用 ipa user-add-certmapdata
命令添加证书映射数据。
10.5.1. 检查证书如何映射到用户
默认情况下,当用户条目包含完整证书作为 usercertificate
属性的一部分时,会关联一个证书。但是,如果您定义了证书映射规则,您可能已经更改了与用户关联的证书的方式。按照以下流程检查您的证书映射规则。
先决条件
- 已安装并配置了 Identity Management(IdM)服务器和客户端,用于智能卡。
- 您可以检测智能卡读取器并显示智能卡的内容。请参阅在系统上测试智能卡访问。
- 您已将智能卡证书映射到 IdM 用户。请参阅在智能卡 上配置身份验证的证书映射规则。
步骤
验证当前为 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
表示是否已检查证书的主题。
-
通过在 IdM 服务器上的
/etc/sssd/sssd.conf
文件中添加debug_level = 9
来启用系统安全服务守护进程(SSSD)日志:[domain/idm.example.com] ... debug_level = 9
重启 SSSD:
# systemctl restart sssd
如果正确读取映射,您应该在
/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}))].
如果您的映射规则包含无效的语法,则日志文件中可以看到类似如下的条目:
[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
检查您的映射规则语法。
# 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
如果需要,修改您的证书映射规则:
# ipa certmaprule-mod smartcardrule --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
其他资源
-
请参阅
sss-certmap
man page。
10.5.2. 检查与智能卡证书关联的用户
如果您在使用智能卡进行身份验证时遇到问题,请验证正确的用户是否与您的智能卡证书关联。
先决条件
- 已安装并配置了 Identity Management(IdM)服务器和客户端,用于智能卡。
- 您可以检测智能卡读取器并显示智能卡的内容。请参阅在系统上测试智能卡访问。
- 您已将智能卡证书映射到 IdM 用户。请参阅在智能卡 上配置身份验证的证书映射规则。
-
您有 PEM 格式的智能卡中的证书副本,例如
cert.pem
。
步骤
验证用户是否与您的智能卡证书关联:
# ipa certmap-match cert.pem -------------- 1 user matched -------------- Domain: IDM.EXAMPLE.COM User logins: idmuser1 ---------------------------- Number of entries returned 1 ----------------------------
如果用户或域不正确,请检查您的证书如何映射到用户。请参阅检查如何将证书映射到用户。
检查用户条目是否包含证书:
# ipa user-show idmuser1 User login: idmuser1 [...] Certificate:MIIEejCCAuKgAwIBAgIBCzANBgkqhkiG9w0BAQsFADAzMREwDwYDVQQKDAhJUEEuVEVTVDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XD
如果您的用户条目不包含证书,请将您的 base-64 编码证书添加到用户条目中:
创建一个包含证书的环境变量,该变量移除了标头和页脚,并串联成一行,这是
ipa user-add-cert
命令期望的格式:$ export CERT=`openssl x509 -outform der -in idmuser1.crt | base64 -w0 -`
请注意,
idmuser1.crt
文件中的证书必须采用 PEM 格式。使用
ipa user-add-cert
命令将证书添加到idmuser1
配置集中:$ ipa user-add-cert idmuser1 --certificate=$CERT
清除系统安全服务守护进程(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
-
再次运行
ipa certmap-match
来确认用户与您的智能卡证书关联。