无IDM情况下RHEL8基于Active Directory的智能卡配置故障求助
RHEL8智能卡AD认证故障:无法触发PIN输入,提示"Please (Re)Insert (Different) Smartcard"
问题背景
从使用UI/Coolkey智能卡+AD认证(支持移除自动锁定)的RHEL7环境,迁移至无网络连接安全区域的RHEL8环境,配置过程中遭遇无法解决的智能卡认证故障,红帽24小时单次答复支持无法提供有效帮助。
已完成配置操作
Windows Server 2019端
- 打开
mmc.exe - 依次点击
File > Add/Remove Snap-in...,选择Certificates > "add>" > My User Account - 进入
Trust Root Certificate Authorities,右键CA选择All Tasks > Export;在证书导出向导中选择DER Encoded Library x.509 (.CER),命名为ca_root.cer并保存 - 通过scp将证书传输至RHEL8主机
RHEL8端
- 转换证书格式:
openssl x509 -inform der -in ca_root.cer -out ca_root.pem - 安装依赖包:
dnf install -y samba-common samba-common-tools oddjob-mkhomedir sssd authselect nss-tools ccid pcsc-lite pcsc-lite-devel pcsc-tools opensc gnutls-utils - 导入根证书:
mkdir -p /etc/pki/ca-trust/source/anchors cp ca_root.pem /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust sudo certutil -A -i /etc/pki/ca-trust/source/anchors/ca_root.pem -n CA_ROOT -t CT,C,C -d /etc/pki/nssdb - 启动oddjobd服务:
systemctl enable oddjobd.service systemctl start oddjobd.service - 配置SSSD:
- 创建并设置权限:
touch /etc/sssd/sssd.conf chmod 600 /etc/sssd/sssd.conf chown root:root /etc/sssd/sssd.conf /etc/sssd/sssd.conf内容:[sssd] config_file_version = 2 domains = mydomain.local services = nss, pam, pac [domain/MYDOMAIN.LOCAL] id_provider = ad auth_provider = ad chpass_provider = ad access_provider = ad cache_credentials = true [pam] pam_cert_auth = True- 启动SSSD:
systemctl enable sssd.service systemctl start sssd.service
- 创建并设置权限:
- 配置krb5:
/etc/krb5.conf内容:# To opt out of the system crypto-policies configuration of krb5, remove the # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated. includedir /etc/krb5.conf.d/ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt spake_preauth_groups = edwards25519 default_realm = MYDOMAIN.LOCAL default_ccache_name = KEYRING:persistent:%{uid}
- 加入AD域:
realm join -U myadminuser MYDOMAIN.LOCAL - 启用authselect智能卡配置:
authselect select sssd with-smartcard with-smartcard-required with-smartcard-lock-on-removal --force
故障现象
- 通过
pcsc_scan、pkcs11_listcerts、pkcs11_inspects命令可确认Dell KB813t、智能卡及卡上证书均被正常识别 - 该智能卡可在RHEL7及Windows 10主机上通过PIN正常登录
- RHEL8登录界面仅显示
Please (Re)Insert (Different) Smartcard,无PIN输入提示,无法完成认证 /var/log/secure及/var/log/messages日志仅记录相同提示及unable to authenticate信息- 移除authselect配置后,可通过用户名密码正常登录
排查及解决方案建议
1. 完善SSSD智能卡相关配置
在/etc/sssd/sssd.conf中补充以下配置:
- 在
[domain/MYDOMAIN.LOCAL]段添加:ad_use_pkinit = True - 在
[pam]段添加PKCS11模块路径:pam_pkcs11_module_path = /usr/lib64/pkcs11/opensc-pkcs11.so
修改后重启SSSD服务:
systemctl restart sssd
2. 验证PKINIT配置有效性
修改/etc/krb5.conf中的pkinit_anchors,直接指定导出的根证书路径:
pkinit_anchors = FILE:/etc/pki/ca-trust/source/anchors/ca_root.pem
测试PKINIT票据获取:
kinit -X509_identity=PKCS11:<智能卡ID> <用户名>@MYDOMAIN.LOCAL
若命令触发PIN输入并成功获取票据,说明PKINIT层面无问题,故障出在PAM认证流程。
3. 检查PAM配置细节
查看authselect生成的PAM配置文件(/etc/pam.d/system-auth、/etc/pam.d/password-auth),确认包含pam_pkcs11.so的配置行,可添加debug参数以获取详细日志:
auth sufficient pam_pkcs11.so debug
重启系统后查看/var/log/secure,分析认证失败的具体环节。
4. 验证智能卡证书的UPN映射
使用以下命令检查证书的Subject Alternative Name字段,确保包含用户的UPN(userPrincipalName):
openssl x509 -in <卡导出的证书文件> -noout -text
RHEL8对证书与AD用户的绑定要求更严格,UPN不匹配会导致认证失败。
5. 配置pam_pkcs11映射规则
编辑/etc/pam_pkcs11/pam_pkcs11.conf,确保映射规则正确关联证书与AD用户:
map = msUPN:userPrincipalName;
启用debug日志:
debug = true;
重启系统后查看/var/log/messages中的pam_pkcs11详细日志,定位映射或认证失败原因。
内容的提问来源于stack exchange,提问作者Steven C.
相关产品推荐
相关产品推荐

