4.4. 智能卡
基于智能卡进行验证是替代基于密码的身份验证。用户凭证存储在智能卡中,然后使用特殊的软件和硬件来访问它们。要使用智能卡进行身份验证,用户必须将智能卡放在智能卡读取器中,然后提供智能卡的 PIN 代码。
重要
下面的部分论述了如何使用 pam_pkcs11 和 pam_krb5 软件包为本地用户配置智能卡验证系统。请注意,这些软件包现在已弃用,如 7.4 发行注记 中的 Deprecated Functionality 所述。
要集中配置智能卡身份验证,请使用系统安全服务守护进程(SSSD)提供的增强智能卡功能。详情请参阅 Linux 域 身份、身份验证和策略指南中 的身份管理中的智能卡 身份验证。
4.4.1. 使用 authconfig
配置智能卡
选择 启用智能卡支持 选项后,会显示其他控制来配置智能卡的行为。
图 4.3. 智能卡选项
请注意,默认情况下不启用 Red Hat Enterprise Linux 服务器和工作站的智能卡登录,且必须在系统设置中启用。
注意
登录 Red Hat Enterprise Linux 时使用单点登录需要这些软件包:
- nss-tools
- nss-pam-ldapd
- esc
- pam_pkcs11
- pam_krb5
- opensc
- pcsc-lite-ccid
- gdm
- authconfig
- authconfig-gtk
- krb5-libs
- krb5-workstation
- krb5-pkinit
- pcsc-lite
- pcsc-lite-libs
4.4.1.1. 从 UI 启用智能卡身份验证
- 以 root 用户身份登录系统。
- 以基础 64 格式下载网络的 root CA 证书,并将它们安装在服务器上。证书使用 certutil 命令在适当的系统数据库中安装。例如:
[root@server ~]# certutil -A -d /etc/pki/nssdb -n "root CA cert" -t "CT,C,C" -i /tmp/ca_cert.crt
注意不要担心导入的证书稍后不会在authconfig
UI 中显示。您不能在 UI 中看到证书;在身份验证过程中,它从/etc/pki/nssdb/
目录中获取。 - 在顶部菜单中选择菜单,选择 ,然后单击 。
- 打开 Advanced Options 选项卡。
- 点 Enable Smart Card Support 复选框。
- 可以为智能卡配置两种行为:
- Card removal 操作 菜单在活跃会话中删除智能卡时设定系统所采取的响应。
Ignore
选项表示,如果删除了智能卡,系统将继续正常运行,而Lock
会立即锁定屏幕。 - Require smart card for login 复选框设定了登录是否需要智能卡。选择此选项时,所有其他身份验证方法都将被阻止。警告在成功使用智能卡登录 后,不要选择此项。
- 默认情况下,检查证书是否已撤销(在线证书状态协议或 OCSP 响应)的机制已被禁用。要验证证书是否在过期前撤销,请通过在
cert_policy
指令中添加ocsp_on
选项来启用 OCSP 检查。- 打开
pam_pkcs11.conf
文件。vim /etc/pam_pkcs11/pam_pkcs11.conf
- 更改每个
cert_policy
行,使其包含ocsp_on
选项。cert_policy = ca,
ocsp_on,
signature;注意由于文件被解析的方式,cert_policy 和等号之间必须有一个空格。否则,解析参数会失败。
- 如果智能卡尚未注册(使用个人证书和密钥设置),请注册智能卡。
- 如果智能卡是 CAC 卡,请在 CAC 用户的主目录中创建
.k5login
文件。.k5login
文件需要在 CAC 卡上具有 Microsoft Principal Name。 - 在
/etc/pam.d/smartcard-auth
和/etc/pam.d/system-auth
文件中添加以下行:auth optional pam_krb5.so use_first_pass no_subsequent_prompt preauth_options=X509_user_identity=PKCS11:/usr/lib64/pkcs11/opensc-pkcs11.so
如果 OpenSC 模块无法按预期工作,请使用 coolkey 软件包中的模块:/usr/lib64/pkcs11/libcoolkeypk11.so
。在这种情况下,请考虑联系红帽技术支持或就该问题发布 Bugzilla 报告。 - 配置
/etc/krb5.conf
文件。设置根据您是使用 CAC 卡还是 Gemalto 64K 卡而有所不同。- 使用 CAC 卡,在
pkinit_anchors
中指定与 CAC 卡使用相关的所有根证书。在用来配置 CAC 卡的/etc/krb5.conf
文件中,EXAMPLE.COM 是 CAC 卡的域名称,kdc.server.hostname.com 是 KDC 服务器主机名。[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 dns_lookup_kdc = false ticket_lifetime = 1h renew_lifetime = 6h forwardable = true default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = kdc.server.hostname.com admin_server = kdc.server.hostname.com pkinit_anchors = FILE:/etc/pki/nssdb/ca_cert.pem pkinit_anchors = FILE:/etc/pki/nssdb/CAC_CA_cert.pem pkinit_anchors = FILE:/etc/pki/nssdb/CAC_CA_email_cert.pem pkinit_anchors = FILE:/etc/pki/nssdb/CAC_root_ca_cert.pem pkinit_cert_match = CAC card specific information } [domain_realm] EXAMPLE.COM = EXAMPLE.COM .EXAMPLE.COM = EXAMPLE.COM .kdc.server.hostname.com = EXAMPLE.COM kdc.server.hostname.com = EXAMPLE.COM [appdefaults] pam = { debug = true ticket_lifetime = 1h renew_lifetime = 3h forwardable = true krb4_convert = false mappings = username on the CAC card Principal name on the card }
- 在用来配置 Gemalto 64K 卡的
/etc/krb5.conf
文件中,EXAMPLE.COM 是 KDC 服务器上创建的域,kdc-ca.pem 是 CA 证书,kdc.server.hostname.com 是 KDC 服务器主机名。[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 dns_lookup_kdc = false ticket_lifetime = 15m renew_lifetime = 6h forwardable = true default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = kdc.server.hostname.com admin_server = kdc.server.hostname.com pkinit_anchors = FILE:/etc/pki/nssdb/kdc-ca.pem pkinit_cert_match = <KU>digitalSignature pkinit_kdc_hostname = kdc.server.hostname.com } [domain_realm] EXAMPLE.COM = EXAMPLE.COM .EXAMPLE.COM = EXAMPLE.COM .kdc.server.hostname.com = EXAMPLE.COM kdc.server.hostname.com = EXAMPLE.COM [appdefaults] pam = { debug = true ticket_lifetime = 1h renew_lifetime = 3h forwardable = true krb4_convert = false }
注意
当插入智能卡时,pklogin_finder 工具以 debug 模式运行,首先将登录 ID 映射到卡中的证书,然后尝试输出证书的有效性信息:
pklogin_finder debug
命令可用于诊断使用智能卡登录系统的问题。
4.4.1.2. 从命令行配置智能卡身份验证
在系统中使用智能卡所需的一切是设置
--enablesmartcard
选项:
[root@server ~]# authconfig --enablesmartcard --update
智能卡还有其他配置选项,如更改默认智能卡模块、设置智能卡删除时的系统行为,以及登录需要智能卡。
如果删除了智能卡,值为 0 会指示系统立即锁定用户;如果删除了智能卡,1 会忽略它:
[root@server ~]# authconfig --enablesmartcard --smartcardaction=0 --update
智能卡验证成功配置和测试后,便可将系统配置为要求用户进行智能卡验证,而不是简单的基于密码的身份验证。
[root@server ~]# authconfig --enablerequiresmartcard --update
警告
除非您使用智能卡成功验证了系统的身份验证,否则请勿使用
--enablerequiresmartcard
选项。否则,用户可能无法登录系统。
4.4.2. 身份管理中的智能卡身份验证
Red Hat Identity Management 支持 IdM 用户的智能卡验证。如需更多信息,请参阅 Linux 域 身份、身份验证和策略指南中 的身份管理智能卡 身份验证一节。
4.4.3. 支持的智能卡
Red Hat Enterprise Linux 支持以下智能卡和读取器。
智能卡
- Athena ASECard Crypto smart, pkcs15-unit
- ATOS(Siemens)CardOS 5.0
- Gemalto ID Classic 230 / TOP IM CY2 64kv2
- Gemalto Cyberflex Access 64k V2c
- Gemalto GemPCKey USB 组成因素
- Giesecke & Devrient(G&D)SmartCafe Professional 6.0(SCP03)
- Giesecke & Devrient(G&D)SmartCafe Professional 7.0(SCP03)
- Safenet 330J
- Safenet SC650(SCP01)
- Siemens Card CardOS M4.4
- YubiKey 4
读取器
- 带有内置智能卡读取器的 HP Keyboard KUS1206
- Omnikey 3121 reader
- Omnikey 3121,PID 为 0x3022 读取器
- Reiner SCT NetworkJack RFID komfort reader
- SCR331 CCID 读取器