管理智能卡验证
配置和使用智能卡验证
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 了解智能卡验证 复制链接链接已复制到粘贴板!
使用基于智能卡的验证是使用密码进行验证的替代选择。您可以将用户凭证以私钥和证书的形式存储在智能卡上,并使用证书、特殊的软件和硬件来访问它们。将智能卡放在读卡器或 USB 端口中,并为智能卡提供 PIN 代码,而不是提供您的密码。
这部分论述了如何使用智能卡以及智能卡验证的工作方式。它描述了可以用来读取和操作智能卡内容的工具。它还提供了示例用例,并描述了 IdM 服务器和 IdM 客户端用于智能卡验证的设置。
1.1. 什么是智能卡 复制链接链接已复制到粘贴板!
智能卡是一个物理设备,通常是一个带有微处理器的塑料板卡,它可以使用保存在卡中的证书进行个人验证。个人验证意味着,您可以象使用用户密码一样使用智能卡。
您可以将用户凭证以私钥和证书的形式存储在智能卡上,并使用特殊的软件和硬件来访问它们。您可以将智能卡放在读卡器或 USB 插座中,并为智能卡提供 PIN 代码,而不是提供您的密码。
1.2. 什么是智能卡验证 复制链接链接已复制到粘贴板!
基于公钥的验证和基于证书的身份验证是两个广泛使用的、基于密码验证的替代选择。使用公钥和私钥而不是您的密码确认您的身份。证书是一个电子文件,用于识别个人、服务器、公司或其他实体并将该身份与公钥关联。比如某个驱动程序的许可或论坛,证书可提供个人身份的可识别验证。公钥加密使用证书来解决身份模拟问题。
如果使用智能卡验证,您的用户凭证(您的公钥和私钥和证书)保存在智能卡中,且只能在智能卡插入读卡机并提供了一个个人身份码(PIN)后才能使用。这需要您拥有物理设备(智能卡)并知道其 PIN 时,因此智能卡验证被认为是双因素验证类型。
1.2.1. IdM 中智能卡验证示例 复制链接链接已复制到粘贴板!
以下示例描述了在 IdM 中使用智能卡的两个简单场景。
使用智能卡登录到您的系统
您可以使用智能卡以本地用户对 RHEL 系统进行身份验证。如果您的系统被配置为强制智能卡登录,则会提示您插入智能卡并输入其 PIN,如果失败,则无法登录到您的系统。或者,您可以将您的系统配置为使用智能卡验证或者您的用户名和密码进行验证。在这种情况下,如果您没有插入智能卡,会提示您输入您的用户名和密码。
登陆到 GDM 并在移除卡时进行锁定
如果您在 RHEL 系统中配置了智能卡验证,您可以设置 在移除卡时进行锁定。如果您登录到 GNOME 显示管理器 (GDM) 并移除智能卡,则屏幕锁定会被启用,您必须重新插入智能卡并使用 PIN 验证来解锁屏幕。您不能使用您的用户名和密码进行验证。
如果您登录到 GDM 并移除智能卡,则屏幕锁定会被启用,您必须重新插入智能卡并使用 PIN 验证来解锁屏幕。
1.3. 支持的智能卡 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 支持四种类型的卡:coolkey 卡、CAC、PIV 和 PKCS #15 。有关卡类型之间的区别的详情,请查看相应的文档。
在 Red Hat Enterprise Linux 中,支持以下类型的智能卡:
带有 Coolkey 小程序的卡:
- Gemalto TOP IM FIPS CY2 64K 令牌(SCP01)
- Giesecke & Devrient (G&D) SmartCafe Expert 7.0 (SCP03)
- SafeNet Assured Technologies SC-650 (SCP01)
- CAC 和 PIV 智能卡。如需更多信息,请参阅 联邦雇员和承包商(PIV)的个人身份验证
- 也支持所选的 PKCS #15 卡。虽然这个系列中的多个卡都支持,但这些卡有许多不同的配置和选项。有关哪些卡与 RHEL 兼容的详情,请联系您的客户代表。
- 另外,红帽可自行决定是否支持其他卡。有关支持的其他卡的详情,请联系您的客户代表。
有关硬件要求的更多信息,请参阅 RHEL 中的智能卡支持。
1.3.1. 支持的智能卡读卡器 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 中,支持的智能卡读卡器遵循 pcsc-lite 上游项目。大多数兼容 CCID 的读卡器应该可以正常工作,而没有任何问题。红帽定期将上游项目中的 USB 识别器更新到我们的 pcsc-lite-ccid 驱动程序中。此外,红帽可自行决定是否支持其他读卡器。以下智能卡读卡器的列表已由红帽测试并验证:
- SCR331/SCR3310
- Omnikey 3121 (必须是 SC650 卡的配件号 R31210399 )
有关上游项目中支持的硬件的列表,请参阅 支持的 CCID 读卡器/ICCD 令牌。
1.4. 支持的硬件安全模块 复制链接链接已复制到粘贴板!
下表列出了身份管理(IdM)支持的硬件安全模块(HSM):
| HSM | 固件 | 设备软件 | 客户端软件 |
|---|---|---|---|
| nCipher nShield Connect XC (High) | nShield_HSM_Firmware-12.72.1 | 12.71.0 | SecWorld_Lin64-12.71.0 |
| Thales TCT Luna Network HSM Luna-T7 | lunafw_update-7.11.1-4 | 7.11.0-25 | 610-500244-001_LunaClient-7.11.1-5 |
1.5. RHEL 中的智能卡验证选项 复制链接链接已复制到粘贴板!
您可以使用 authselect 命令(authselect enable-feature <smartcard_option>)配置如何让智能卡验证在特定的身份管理(IdM)客户端中工作。可用的智能卡选项如下:
-
with-smartcard: 用户可以使用用户名和密码进行身份验证,或者使用他们的智能卡进行身份验证 with-smartcard-required: 用户可以使用智能卡进行验证,并禁用密码验证。您不能在没有智能卡的情况下访问该系统。使用智能卡进行身份验证后,一直保持登录状态,即使您的智能卡已从读取器中移除。注意with-smartcard-required选项代表只对登陆服务(如login,gdm,xdm,xscreensaver, 和gnome-screensaver)强制只能使用智能卡进行验证。对于其它服务,如使用su或sudo来切换用户,则不会强制使用智能卡进行验证,如果没有插入您的智能卡,则会提示您输入密码。with-smartcard-lock-on-removal: 用户可以使用其智能卡进行验证。但是,如果您从读取器中移除智能卡,则系统会被锁定。您不能使用密码进行验证。注意with-smartcard-lock-on-removal选项仅适用于具有 GNOME 桌面环境的系统。如果您使用基于tty或控制台的系统,并且您从读卡器中删除了智能卡,则不会将您自动锁在系统之外。
1.6. 管理智能卡及其内容的工具 复制链接链接已复制到粘贴板!
您可以使用许多不同的工具来管理保存在智能卡中的密钥和证书。您可以使用这些工具进行以下操作:
- 列出连接到系统的可用智能卡读取器。
- 列出可用的智能卡并查看其内容。
- 操作智能卡内容(密钥和证书)。
有很多工具可以提供相似的功能,但某些工具在系统的不同层上工作。智能卡由多个组件在多个层上进行管理。在较低级别上,操作系统使用 PC/SC 协议与智能卡读卡器进行通信,此通信由 pcsc-lite 守护进程处理。守护进程将收到的命令转发到智能卡读取器通常通过 USB,这由低级 CCID 驱动程序处理。PC/SC 低级通信很少显示在应用程序级别。用于应用程序访问智能卡的主要方法是通过更高级别的应用程序编程界面(API),OASIS PKCS#11 API,它将卡通信基于加密对象(例如,私钥)。智能卡厂商提供了一个共享模块,如一个 .so 文件,它遵循 PKCS#11 API,并作为智能卡的驱动程序。
您可以使用以下工具管理您的智能卡及其内容:
OpenSC 工具:使用
opensc中实施的驱动程序。-
opensc-tool: 执行智能卡操作。 -
pkcs15-tool:管理智能卡上的 PKCS#15 数据结构,如列出和读取存储在令牌上的 PIN、密钥和证书。 -
pkcs11-tool:管理智能卡上的 PKCS#11 数据对象,如列出和读取令牌上存储的 PIN、密钥和证书。
-
GnuTLS utils: 一个 API,用于应用程序的 API 来启用网络传输层的安全通信,以及访问 X.509、PKCS#12、OpenPGP 和其他结构的接口。
-
p11tool: 对 PKCS#11 智能卡和安全模块执行操作。 -
certtool:解析并生成 X.509 证书、请求和私钥。
-
网络安全服务(NSS)工具:一组库,旨在支持启用了安全的客户端和服务器应用程序的跨平台开发。使用 NSS 构建的应用程序支持 SSL v3、TLS、Pce PKCS #5、PKCS #7、PKCS #11, PKCS #12、S/MIME、X.509 v3 证书和其他安全标准。
-
modutil:使用安全模块数据库管理 PKCS#11 模块信息。 -
certutil:管理 NSS 数据库和其它 NSS 令牌中的密钥和证书。
-
有关使用这些工具排除使用智能卡进行身份验证的问题的更多信息,请参阅 使用智能卡对身份验证进行故障排除。
1.7. 证书和智能卡验证 复制链接链接已复制到粘贴板!
如果您使用 Identity Management (IdM) 或 Active Directory (AD) 来管理域中的身份存储、身份验证、策略和授权策略,则 IdM 或 AD 用于身份验证的证书会分别生成。您还可以使用外部证书颁发机构提供的证书,在这种情况下,您必须配置 Active Directory 或 IdM 接受来自外部提供程序的证书。如果用户不是某个域的一部分,您可以使用本地证书颁发机构生成的证书。详情请查看以下部分:
有关有资格进行智能卡验证的证书的完整列表,请参阅 符合智能卡的证书。
1.8. IdM 中智能卡验证所需的步骤 复制链接链接已复制到粘贴板!
在 Identity Management (IdM) 中使用智能卡进行身份验证前,您必须确定以下步骤:
- 为智能卡验证配置 IdM 服务器。请参阅为智能卡验证配置 IdM 服务器
- 为智能卡验证配置 IdM 客户端。请参阅为智能卡验证配置 IdM 客户端
- 将证书添加到 IdM 的用户条目。请参阅在 IdM Web UI 的用户条目中添加证书
- 在智能卡中保存密钥和证书。请参阅智能卡中的证书
1.9. 使用 Active Directory 发布的证书的智能卡验证所需的步骤 复制链接链接已复制到粘贴板!
在使用由 Active Directory (AD) 发布的证书的智能卡验证前,您必须确定以下步骤:
第 2 章 为智能卡验证配置身份管理 复制链接链接已复制到粘贴板!
身份管理(IdM)支持使用如下方式的智能卡身份验证:
- IdM 证书颁发机构发布的用户证书
- 外部证书颁发机构发布的用户证书
您可以在 IdM 中为两种类型的证书配置智能卡验证。在这种情况下,rootca.pem CA 证书是包含可信外部证书颁发机构证书的文件。
目前,IdM 不支持导入多个共享相同主题区分名称(DN)但加密方式不同的 CA。
2.1. 为智能卡验证配置 IdM 服务器 复制链接链接已复制到粘贴板!
此流程涵盖了如何为其证书已由您的身份管理(IdM) CA 信任的 <EXAMPLE.ORG> 域的证书颁发机构(CA)发布的用户启用智能卡验证。
先决条件
- 有到 IdM 服务器的 root 访问权限。
您有 root CA 证书和所有中间 CA 证书:
- 为 <EXAMPLE.ORG> CA 直接发布或者通过一个或多个其子 CA 发布证书的根 CA 的证书。您可以从颁发机构发布证书的网页下载证书链。
-
IdM CA 证书。您可以从运行 IdM CA 实例的 IdM 服务器上的
/etc/ipa/ca.crt文件获取 CA 证书。 - 所有中间 CA 的证书,即介于 <EXAMPLE.ORG> CA 和 IdM CA 之间。
流程
创建要进行配置的目录:
mkdir ~/SmartCard/
[root@server]# mkdir ~/SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入该目录:
cd ~/SmartCard/
[root@server]# cd ~/SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取存储在 PEM 格式文件中的相关 CA 证书。如果您的 CA 证书存储再不同格式的文件中,如 DER,请将其转换为 PEM 格式。IdM 证书颁发机构证书采用 PEM 格式,位于
/etc/ipa/ca.crt文件中。将 DER 文件转换为 PEM 文件:
openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为方便起见,将证书复制到您要进行配置的目录中:
cp /tmp/rootca.pem ~/SmartCard/ cp /tmp/subca.pem ~/SmartCard/ cp /tmp/issuingca.pem ~/SmartCard/
[root@server SmartCard]# cp /tmp/rootca.pem ~/SmartCard/ [root@server SmartCard]# cp /tmp/subca.pem ~/SmartCard/ [root@server SmartCard]# cp /tmp/issuingca.pem ~/SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您使用外部证书颁发机构的证书,请使用
openssl x509工具查看PEM格式的文件的内容,以检查Issuer和Subject值是否正确:openssl x509 -noout -text -in rootca.pem | more
[root@server SmartCard]# openssl x509 -noout -text -in rootca.pem | moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用管理员特权,通过内置的
ipa-advise工具生成配置脚本:kinit admin ipa-advise config-server-for-smart-card-auth > config-server-for-smart-card-auth.sh
[root@server SmartCard]# kinit admin [root@server SmartCard]# ipa-advise config-server-for-smart-card-auth > config-server-for-smart-card-auth.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow config-server-for-smart-card-auth.sh脚本执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
执行脚本,将包含根 CA 和子 CA 证书的 PEM 文件添加为参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在任何子 CA 证书前,确保将根 CA 的证书添加为参数,并且 CA 或子 CA 证书还没有过期。
可选:如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,则您可能需要禁用 OCSP 检查,以对 IdM Web UI 进行身份验证:
在
/etc/httpd/conf.d/ssl.conf文件中将SSLOCSPEnable参数设为off:SSLOCSPEnable off
SSLOCSPEnable offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Apache 守护进程(httpd)使更改立即生效:
systemctl restart httpd
[root@server SmartCard]# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
警告如果您只使用 IdM CA 发出的用户证书,不要禁用 OCSP 检查。OCSP 响应器是 IdM 的一部分。
有关如何保持 OCSP 检查处于启用状态,同时防止 IdM 服务器拒绝用户证书(如果 IdM 服务器不包含有关颁发用户证书的 CA 侦听 OCSP 服务请求的位置的信息)的说明,请参阅 Apache mod_ssl 配置选项 中的
SSLOCSPDefaultResponder指令。该服务器现在被配置为智能卡验证。
注意要在整个拓扑中启用智能卡验证,请在每个 IdM 服务器中运行操作过程。
2.2. 使用 Ansible 为智能卡验证配置 IdM 服务器 复制链接链接已复制到粘贴板!
您可以使用 Ansible 为其证书是由身份管理(IdM) CA 信任的 <EXAMPLE.ORG> 域的证书颁发机构(CA)发布的用户启用智能卡验证。要做到这一点,您必须获取以下证书,以便在运行具有 ipasmartcard_server ansible-freeipa 角色脚本的 Ansible playbook 时使用它们:
- 为 <EXAMPLE.ORG> CA 直接发布或者通过一个或多个其子 CA 发布证书的根 CA 的证书。您可以从颁发机构发布证书的网页下载证书链。详情请参阅 配置浏览器以启用证书验证 中的步骤 4。
-
IdM CA 证书。您可以从任何 IdM CA 服务器上的
/etc/ipa/ca.crt文件获取 CA 证书。 - 介于<EXAMPLE.ORG> CA 和 IdM CA 之间的所有 CA 的证书。
先决条件
-
您有到 IdM 服务器的
root访问权限。 -
您需要知道 IdM
admin密码。 - 您有根 CA 证书、IdM CA 证书以及所有中间 CA 证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
freeipa.ansible_freeipa集合。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。
流程
如果您的 CA 证书存储在不同格式(如
DER)的文件中,请将其转换为PEM格式:openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 证书颁发机构证书采用
PEM格式,位于/etc/ipa/ca.crt文件中。可选:使用
openssl x509工具查看PEM格式的文件内容,以检查Issuer和Subject值是否正确:openssl x509 -noout -text -in root-ca.pem | more
# openssl x509 -noout -text -in root-ca.pem | moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建专用于 CA 证书的子目录:
mkdir SmartCard/
$ mkdir SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为方便起见,将所有必需的证书复制到 ~/MyPlaybooks/SmartCard/ 目录中:
cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt
# cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 清单文件中指定以下内容:
- 要为智能卡验证配置的 IdM 服务器。
- IdM 管理员密码。
CA 证书的路径按以下顺序:
- 根 CA 证书文件
- 中间 CA 证书文件
- IdM CA 证书文件
文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建一个
install-smartcard-server.ymlplaybook:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipasmartcard_serverAnsible 角色执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
可选:如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,则您可能需要禁用 OCSP 检查,以对 IdM Web UI 进行身份验证:
以
root用户身份连接到 IdM 服务器:ssh root@ipaserver.idm.example.com
ssh root@ipaserver.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/httpd/conf.d/ssl.conf文件中将SSLOCSPEnable参数设为off:SSLOCSPEnable off
SSLOCSPEnable offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Apache 守护进程(httpd)使更改立即生效:
systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
警告如果您只使用 IdM CA 发出的用户证书,不要禁用 OCSP 检查。OCSP 响应器是 IdM 的一部分。
有关如何保持 OCSP 检查处于启用状态,同时防止 IdM 服务器拒绝用户证书(如果 IdM 服务器不包含有关颁发用户证书的 CA 侦听 OCSP 服务请求的位置的信息)的说明,请参阅 Apache mod_ssl 配置选项 中的
SSLOCSPDefaultResponder指令。清单文件中列出的服务器现在已被配置为进行智能卡验证。
注意要在整个拓扑中启用智能卡验证,请将 Ansible playbook 中的
hosts变量设为ipacluster:--- - name: Playbook to set up smartcard for IPA server and replicas hosts: ipacluster [...]
--- - name: Playbook to set up smartcard for IPA server and replicas hosts: ipacluster [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 为智能卡验证配置 IdM 客户端 复制链接链接已复制到粘贴板!
您可以为智能卡验证配置 IdM 客户端。这个过程需要运行在每个 IdM 系统、客户端或服务器上,您希望在使用智能卡进行身份验证时连接到这些系统。例如,若要启用从主机 A 到主机 B 的 ssh 连接,需要在主机 B 上运行脚本。
作为管理员,运行这个流程来使用如下方法启用智能卡身份验证
ssh协议详情请查看 使用智能卡验证配置 SSH 访问。
- 控制台登录
- GNOME 显示管理器(GDM)
-
su命令
对于向 IdM Web UI 进行身份验证,不需要此流程。向 IdM Web UI 进行身份验证涉及两个主机,它们都不必是 IdM 客户端:
- 其上运行浏览器的机器。机器可以在 IdM 域之外。
-
其上运行
httpd的 IdM 服务器。
以下流程假设您在 IdM 客户端,而不是 IdM 服务器上配置智能卡身份验证。因此,您需要两台计算机:生成配置脚本的 IdM 服务器,以及运行脚本的 IdM 客户端。
先决条件
- 为智能卡验证配置了您的 IdM 服务器,如 为智能卡验证配置 IdM 服务器 所述。
- 有对 IdM 服务器和 IdM 客户端的 root 访问权限。
- 您有 root CA 证书和所有中间 CA 证书。
-
您使用
--mkhomedir选项安装了 IdM 客户端,以确保远程用户可以成功登录。如果您没有创建主目录,则默认登录位置为目录结构的根目录/。
流程
在 IdM 服务器上,使用管理员权限通过
ipa-advise生成配置脚本:kinit admin ipa-advise config-client-for-smart-card-auth > config-client-for-smart-card-auth.sh
[root@server SmartCard]# kinit admin [root@server SmartCard]# ipa-advise config-client-for-smart-card-auth > config-client-for-smart-card-auth.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow config-client-for-smart-card-auth.sh脚本执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
- 它配置系统安全服务守护进程 (SSSD),允许用户使用其用户名和密码或其智能卡进行验证。有关智能卡验证的 SSSD 配置集选项的详情,请参考 RHEL 中的智能卡验证选项。
从 IdM 服务器中,将脚本复制到 IdM 客户端机器中选择的目录中:
scp config-client-for-smart-card-auth.sh root@client.idm.example.com:/root/SmartCard/ Password: config-client-for-smart-card-auth.sh 100% 2419 3.5MB/s 00:00
[root@server SmartCard]# scp config-client-for-smart-card-auth.sh root@client.idm.example.com:/root/SmartCard/ Password: config-client-for-smart-card-auth.sh 100% 2419 3.5MB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了方便起见,将 IdM 服务器上的 PEM 格式的 CA 证书文件复制到 IdM 客户端机器上与在上一步中所使用的相同的目录中:
scp {rootca.pem,subca.pem,issuingca.pem} root@client.idm.example.com:/root/SmartCard/ Password: rootca.pem 100% 1237 9.6KB/s 00:00 subca.pem 100% 2514 19.6KB/s 00:00 issuingca.pem 100% 2514 19.6KB/s 00:00[root@server SmartCard]# scp {rootca.pem,subca.pem,issuingca.pem} root@client.idm.example.com:/root/SmartCard/ Password: rootca.pem 100% 1237 9.6KB/s 00:00 subca.pem 100% 2514 19.6KB/s 00:00 issuingca.pem 100% 2514 19.6KB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端机器上执行脚本,将包含 CA 证书的 PEM 文件添加为参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在任何子 CA 证书前,确保将根 CA 的证书添加为参数,并且 CA 或子 CA 证书还没有过期。
现在为智能卡验证配置了客户端。
2.4. 使用 Ansible 为智能卡验证配置 IdM 客户端 复制链接链接已复制到粘贴板!
按照以下流程,使用 ansible-freeipa ipasmartcard_client 模块配置特定的身份管理(IdM)客户端,以允许 IdM 用户使用智能卡进行身份验证。运行这个流程为使用以下任一方法访问 IdM 的用户启用智能卡验证:
ssh协议详情请查看 使用智能卡验证配置 SSH 访问。
- 控制台登录
- GNOME 显示管理器(GDM)
-
su命令
对于向 IdM Web UI 进行身份验证,不需要此流程。向 IdM Web UI 进行身份验证涉及两个主机,它们都不必是 IdM 客户端:
- 其上运行浏览器的机器。机器可以在 IdM 域之外。
-
其上运行
httpd的 IdM 服务器。
先决条件
- 您的 IdM 服务器已被配置为进行智能卡验证,如 使用 Ansible 为智能卡验证配置 IdM 服务器 中所述。
- 有对 IdM 服务器和 IdM 客户端的 root 访问权限。
- 您有根 CA 证书、IdM CA 证书以及所有中间 CA 证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
freeipa.ansible_freeipa集合。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。
流程
如果您的 CA 证书存储在不同格式(如
DER)的文件中,请将其转换为PEM格式:openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM CA 证书采用
PEM格式,位于/etc/ipa/ca.crt文件中。可选:使用
openssl x509工具查看PEM格式的文件内容,以检查Issuer和Subject值是否正确:openssl x509 -noout -text -in root-ca.pem | more
# openssl x509 -noout -text -in root-ca.pem | moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 控制节点上,导航到 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建专用于 CA 证书的子目录:
mkdir SmartCard/
$ mkdir SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为方便起见,将所有必需的证书复制到 ~/MyPlaybooks/SmartCard/ 目录中,例如:
cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt
# cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 清单文件中指定以下内容:
- 要为智能卡验证配置的 IdM 客户端。
- IdM 管理员密码。
CA 证书的路径按以下顺序:
- 根 CA 证书文件
- 中间 CA 证书文件
- IdM CA 证书文件
文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
install-smartcard-clients.ymlplaybook:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-clients.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-clients.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipasmartcard_clientAnsible 角色执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
它将系统安全服务守护进程(SSSD)配置为允许用户使用其用户名和密码或者智能卡进行身份验证。有关智能卡验证的 SSSD 配置集选项的详情,请参考 RHEL 中的智能卡验证选项。
清单文件的 ipaclients 部分中列出的客户端现在配置为进行智能卡验证。
注意如果您使用
--mkhomedir选项安装了 IdM 客户端,则远程用户将能够登录到其主目录。否则,默认登录位置是目录结构的根目录,/。
2.5. 在 IdM Web UI 的用户条目中添加证书 复制链接链接已复制到粘贴板!
您可以在 IdM Web UI 中将外部证书添加到用户条目中。
也可以将证书映射数据上传到 IdM 中的用户条目,而不必上传整个证书。包含完整证书或证书映射数据的用户条目可以和相应的证书映射规则一起使用,以便于系统管理员配置智能卡身份验证。详情请参阅 配置身份验证的证书映射规则。
如果用户的证书已由 IdM 证书颁发机构发布,则证书已存储在用户条目中,您不需要按照以下流程操作。
先决条件
- 您有要添加到用户条目的证书。
流程
- 如果要给另一个用户添加证书,请以管理员身份登录到 IdM Web UI。要在您自己的配置文件中添加证书,您不需要管理员的凭证。
-
导航到
Users→Active users→sc_user。 -
找到
Certificate选项,并单击Add。 在命令行上,使用
cat工具或文本编辑器以PEM格式显示证书:cat testuser.crt
[user@client SmartCard]$ cat testuser.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 将证书从 CLI 复制并粘贴到 Web UI 中打开的窗口中。
点击
Add。sc_user条目现在包含一个外部证书。
2.6. 在 IdM CLI 中向用户条目中添加证书 复制链接链接已复制到粘贴板!
您可以在 IdM CLI 中将外部证书添加到用户条目中。
也可以将证书映射数据上传到 IdM 中的用户条目,而不必上传整个证书。包含完整证书或证书映射数据的用户条目可以和相应的证书映射规则一起使用,以便于系统管理员配置智能卡身份验证。详情请参阅 配置身份验证的证书映射规则。
如果用户的证书已由 IdM 证书颁发机构发布,则证书已存储在用户条目中,您不需要按照以下流程操作。
先决条件
- 您有要添加到用户条目的证书。
流程
如果要给另一个用户添加证书,请以管理员身份登录到 IdM CLI:
kinit admin
[user@client SmartCard]$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在您自己的配置文件中添加证书,您不需要管理员的凭证。
kinit <smartcard_user>
[user@client SmartCard]$ kinit <smartcard_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个包含证书的环境变量,该变量移除了标头和页脚,并串联成一行,这是
ipa user-add-cert命令期望的格式:export CERT=`openssl x509 -outform der -in testuser.crt | base64 -w0 -`
[user@client SmartCard]$ export CERT=`openssl x509 -outform der -in testuser.crt | base64 -w0 -`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
testuser.crt文件中的证书必须是PEM格式。使用
ipa user-add-cert命令将证书添加到 <smartcard_user> 的配置文件中:ipa user-add-cert <smartcard_user> --certificate=$CERT
[user@client SmartCard]$ ipa user-add-cert <smartcard_user> --certificate=$CERTCopy to Clipboard Copied! Toggle word wrap Toggle overflow <smartcard_user>条目现在包含一个外部证书。
2.7. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡之前,您必须安装可以生成证书的相应工具,并启动 pscd 服务。
先决条件
-
您有
root权限。
流程
安装
opensc和gnutls-utils软件包:dnf -y install opensc gnutls-utils
# dnf -y install opensc gnutls-utilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd服务。systemctl start pcscd
# systemctl start pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd服务是否已启动并正在运行:systemctl status pcscd
# systemctl status pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 pkcs15-init 工具配置智能卡,该工具帮助您配置:
- 擦除智能卡
- 设置新的 PIN 和可选的 PIN Unblocking Keys(PUKs)
- 在智能卡上创建新插槽
- 在插槽存储证书、私钥和公钥
- 如果需要,请锁定智能卡设置,因为某些智能卡需要这个类型的最终化
pkcs15-init 工具可能无法使用所有智能卡。您必须使用您使用智能卡的工具。
先决条件
已安装
opensc软件包,其中包括pkcs15-init工具。如需了解更多详细信息,请参阅 安装用于管理和使用智能卡的工具。
- 该卡插入读卡器并连接到计算机。
-
您有一个要存储在智能卡上的私钥、公钥和证书。在此流程中,
testuser.key、testuserpublic.key和testuser.crt是用于私钥、公钥和证书的名称。 - 您有当前的智能卡用户 PIN 和 Security Officer PIN (SO-PIN)。
流程
擦除智能卡并使用您的 PIN 验证自己:
pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:
$ pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个卡已经被清除。
初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:
pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader name$ pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow pcks15-init工具在智能卡上创建一个新插槽。为插槽设置标签和验证 ID:
pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标签设置为人类可读的值,在本例中为
testuser。auth-id必须是两个十六进制值,在本例中设为01。在智能卡的新插槽中存储并标记私钥:
pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在存储您的私钥并将证书存储在下一步中时,您为
--id指定的值必须相同。建议为--id指定自己的值,否则它们将更复杂的值由工具计算。在智能卡上的新插槽中存储并标记该证书:
pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在智能卡的新插槽中保存并标记公钥:
pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -FCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
2.9. 使用智能卡登录到 IdM 复制链接链接已复制到粘贴板!
您可以使用智能卡登录到 IdM Web UI。
先决条件
- web 浏览器被配置为使用智能卡验证。
- IdM 服务器被配置为智能卡验证。
- 在您的智能卡中安装的证书由 IdM 服务器发出,或者已添加到 IdM 的用户条目中。
- 您知道解锁智能卡所需的 PIN。
- 智能卡已插入到读取器中。
流程
- 在浏览器中打开 IdM Web UI。
- 点使用证书登陆。
如果 Password Required 对话框打开,请添加 PIN 来解锁智能卡,然后单击 OK 按钮。
此时会打开 User Identification Request 对话框。
如果智能卡包含多个证书,请在 选择用于验证的证书 下方的下拉列表中选择您要用于身份验证的证书。
点确定按钮。
现在,您已成功登录到 IdM Web UI。
2.10. 在 IdM 客户端中使用智能卡验证登录到 GDM 复制链接链接已复制到粘贴板!
GNOME 桌面管理器(GDM)需要身份验证。您可以使用您的密码,但是,您也可以使用智能卡进行身份验证。
按照以下流程,使用智能卡验证访问 GDM。
先决条件
- 为智能卡验证配置了系统。详情请参阅为智能卡验证配置 IdM 客户端。
- 该智能卡包含您的证书和私钥。
- 该用户帐户是 IdM 域的成员。
智能卡上的证书通过以下方式映射到用户条目:
- 为特定用户条目分配证书。详情请参阅 Adding a certificate to a user entry in the IdM Web UI 或 Adding a certificate to a user entry in the IdM CLI。
- 应用到该帐户的证书映射数据。详情请查看用于 在智能卡上配置身份验证的证书映射规则。
流程
- 在读取器中插入智能卡。
- 输入智能卡 PIN。
点 Sign In。
您成功登录到 RHEL 系统,并且您有一张由 IdM 服务器提供的 TGT。
验证
在 Terminal 中输入
klist,并检查结果:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11. 在 su 命令中使用智能卡验证 复制链接链接已复制到粘贴板!
切换到其他用户需要身份验证。您可以使用密码或证书。按照以下流程,通过 su 命令使用智能卡。这意味着输入 su 命令后,系统会提示您输入智能卡 PIN。
先决条件
为智能卡验证配置了您的 IdM 服务器和客户端。
- 该卡插入读卡器并连接到计算机。
流程
在终端窗口中,使用
su命令切换到其他用户:su - <user_name> PIN for smart_card
$ su - <user_name> PIN for smart_cardCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置正确,会提示您输入智能卡 PIN。
第 3 章 为 IdM 中智能卡验证配置 ADCS 发布的证书 复制链接链接已复制到粘贴板!
要在 IdM 中为其证书是由活动目录(AD)证书服务发布的用户配置智能卡验证:
- 您的部署是基于身份管理(IdM)和活动目录(AD)之间的跨林信任。
- 您希望允许智能卡验证存储在 AD 中的帐户的用户。
- 证书创建并存储在活动目录证书服务(ADCS)中。
3.1. 先决条件 复制链接链接已复制到粘贴板!
- 身份管理(IdM)和活动目录(AD)信任已安装
- 活动目录证书服务(ADCS)已安装,并且用户证书已生成
3.2. 信任配置和证书使用量所需的 Windows 服务器设置 复制链接链接已复制到粘贴板!
您必须在 Windows 服务器上配置以下内容:
- 已安装活动目录证书服务(ADCS)
- 创建证书颁发机构
- 可选:如果您使用证书颁发机构 Web 注册,则必须配置互联网信息服务(IIS)
导出的证书必须满足以下条件:
-
密钥必须有
2048位或更多 - 包括一个私钥
您将需要以下格式的证书:个人信息交换—
PKCS #12(.PFX)- 启用证书隐私
3.3. 使用 sftp 从 Active Directory 复制证书 复制链接链接已复制到粘贴板!
为了可以使用智能卡验证,您需要复制以下证书文件:
-
CER格式的根 CA 证书:IdM 服务器上的adcs-winserver-ca.cer。 -
具有
PFX格式私钥的用户证书:IdM 客户端上的aduser1.pfx。
这个过程预期 SSH 访问是允许的。如果 SSH 不可用,用户必须将 文件从 AD 服务器复制到 IdM 服务器和客户端。
流程
从 IdM 服务器 连接,并将
adcs-winserver-ca.cer根证书复制到 IdM 服务器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 IdM 客户端 连接,并将
aduser1.pfx用户证书复制到客户端:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,CA 证书保存在 IdM 服务器上,用户证书存储在客户端机器上。
3.4. 使用 ADCS 证书为智能卡身份验证配置 IdM 服务器和客户端 复制链接链接已复制到粘贴板!
您必须配置 IdM(身份管理)服务器和客户端,以便能够在 IdM 环境中使用智能卡身份验证。IdM 包含进行了所有必要更改的 ipa-advise 脚本:
- 安装所需的软件包
- 配置 IdM 服务器和客户端
- 将 CA 证书复制到期望的位置
您可以在 IdM 服务器中运行 ipa-advise。
按照以下流程,为智能卡验证配置服务器和客户端:
-
在 IdM 服务器中:准备
ipa-advise脚本,为智能卡验证配置 IdM 服务器。 -
在 IdM 服务器中:准备
ipa-advise脚本,以配置 IdM 客户端以进行智能卡验证。 -
在 IdM 服务器中:使用 AD 证书应用 IdM 服务器上的
ipa-advise服务器脚本。 - 将客户端脚本移动到 IdM 客户端机器中。
-
在 IdM 客户端上:使用 AD 证书在 IdM 客户端上应用
ipa-advise客户端脚本。
先决条件
- 证书已复制到 IdM 服务器。
- 获取 Kerberos 票据。
- 以具有管理权限的用户身份登录。
流程
在 IdM 服务器上,使用
ipa-advise脚本来配置客户端:ipa-advise config-client-for-smart-card-auth > sc_client.sh
[root@idmserver ~]# ipa-advise config-client-for-smart-card-auth > sc_client.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 服务器上,使用
ipa-advise脚本来配置服务器:ipa-advise config-server-for-smart-card-auth > sc_server.sh
[root@idmserver ~]# ipa-advise config-server-for-smart-card-auth > sc_server.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 服务器中执行脚本:
sh -x sc_server.sh adcs-winserver-ca.cer
[root@idmserver ~]# sh -x sc_server.sh adcs-winserver-ca.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
将
sc_client.sh脚本复制到客户端系统中:scp sc_client.sh root@client1.idm.example.com:/root Password: sc_client.sh 100% 2857 1.6MB/s 00:00
[root@idmserver ~]# scp sc_client.sh root@client1.idm.example.com:/root Password: sc_client.sh 100% 2857 1.6MB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Windows 证书复制到客户端系统中:
scp adcs-winserver-ca.cer root@client1.idm.example.com:/root Password: adcs-winserver-ca.cer 100% 1254 952.0KB/s 00:00
[root@idmserver ~]# scp adcs-winserver-ca.cer root@client1.idm.example.com:/root Password: adcs-winserver-ca.cer 100% 1254 952.0KB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端系统中运行客户端脚本:
sh -x sc_client.sh adcs-winserver-ca.cer
[root@idmclient1 ~]# sh -x sc_client.sh adcs-winserver-ca.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow CA 证书现在以正确的格式安装在 IdM 服务器和客户端系统上。下一步是将用户证书复制到智能卡本身。
3.5. 转换 PFX 文件 复制链接链接已复制到粘贴板!
在将 PFX(PKCS#12)文件保存到智能卡中前,您必须:
- 将文件转换为 PEM 格式
- 将私钥和证书提取到两个不同的文件中
先决条件
- PFX 文件被复制到 IdM 客户端机器中。
流程
在 IdM 客户端上,将文件转换为 PEM 格式:
openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes Enter Import Password:
[root@idmclient1 ~]# openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes Enter Import Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将密钥提取到单独的文件中:
openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.key
[root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将公共证书提取到单独的文件中:
openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crt
[root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,您可以将
aduser1.key和aduser1.crt存储在智能卡中。
3.6. 安装用来管理和使用带有 ADCS 证书的智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书的相应工具,并启动 pscd 服务。
先决条件
-
您有
root权限。
流程
安装
opensc和gnutls-utils软件包:dnf -y install opensc gnutls-utils
# dnf -y install opensc gnutls-utilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd服务。systemctl start pcscd
# systemctl start pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd服务是否已启动并正在运行:systemctl status pcscd
# systemctl status pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. 准备智能卡并将 ADCS 证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 pkcs15-init 工具配置智能卡,该工具帮助您配置:
- 擦除智能卡
- 设置新的 PIN 和可选的 PIN Unblocking Keys(PUKs)
- 在智能卡上创建新插槽
- 在插槽存储证书、私钥和公钥
- 如果需要,请锁定智能卡设置,因为某些智能卡需要这个类型的最终化
pkcs15-init 工具可能无法使用所有智能卡。您必须使用您使用智能卡的工具。
先决条件
已安装
opensc软件包,其中包括pkcs15-init工具。如需了解更多详细信息,请参阅 安装用于管理和使用智能卡的工具。
- 该卡插入读卡器并连接到计算机。
-
您有一个要存储在智能卡上的私钥、公钥和证书。在此流程中,
testuser.key、testuserpublic.key和testuser.crt是用于私钥、公钥和证书的名称。 - 您有当前的智能卡用户 PIN 和 Security Officer PIN (SO-PIN)。
流程
擦除智能卡并使用您的 PIN 验证自己:
pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:
$ pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个卡已经被清除。
初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:
pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader name$ pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow pcks15-init工具在智能卡上创建一个新插槽。为插槽设置标签和验证 ID:
pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标签设置为人类可读的值,在本例中为
testuser。auth-id必须是两个十六进制值,在本例中设为01。在智能卡的新插槽中存储并标记私钥:
pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在存储您的私钥并将证书存储在下一步中时,您为
--id指定的值必须相同。建议为--id指定自己的值,否则它们将更复杂的值由工具计算。在智能卡上的新插槽中存储并标记该证书:
pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在智能卡的新插槽中保存并标记公钥:
pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -FCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
3.8. 在 sssd.conf 中配置超时 复制链接链接已复制到粘贴板!
使用智能卡证书进行身份验证的时间可能比 SSSD 使用的默认超时时间更长。超时时间可能是由以下原因造成的:
- 很慢的读卡器
- 从物理设备转发到虚拟环境
- 保存在智能卡上的证书太多
- 如果使用 OCSP 来验证证书,则来自 OCSP(在线证书状态协议)响应器的响应较慢
在这种情况下,您可以将 sssd.conf 文件中的以下超时时间延长为 60 秒:
-
p11_child_timeout -
krb5_auth_timeout
先决条件
- 您必须以 root 身份登录。
流程
打开
sssd.conf文件:vim /etc/sssd/sssd.conf
[root@idmclient1 ~]# vim /etc/sssd/sssd.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
p11_child_timeout的值:[pam] p11_child_timeout = 60
[pam] p11_child_timeout = 60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
krb5_auth_timeout的值:[domain/IDM.EXAMPLE.COM] krb5_auth_timeout = 60
[domain/IDM.EXAMPLE.COM] krb5_auth_timeout = 60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存设置。
现在,在因超时而验证失败之前,允许与智能卡的交互运行 1 分钟(60 秒)。
3.9. 为智能卡身份验证创建证书映射规则 复制链接链接已复制到粘贴板!
如果要将一个证书用于 AD(Active Directory)和 IdM(身份管理)中的帐户,您可以在 IdM 服务器上创建证书映射规则。
创建此类规则后,用户可以在两个域中使用其智能卡进行身份验证。
有关证书映射规则的详情,请参阅 用于配置身份验证的证书映射规则。
第 4 章 配置身份验证的证书映射规则 复制链接链接已复制到粘贴板!
在以下情况下可能需要配置证书映射规则:
- 证书已由与 IdM 域处于信任关系的活动目录(AD)的证书系统发布。
- 证书已由外部证书颁发机构发布。
- IdM 环境较大,很多用户使用智能卡的用户。在这种情况下,添加完整证书可能会比较复杂。在大多数情况下,主题和签发者是可预测的,因此与完整证书相比,更容易提前添加。
作为系统管理员,您可以创建证书映射规则,并在向特定用户签发证书之前,为用户条目添加证书映射数据。签发证书后,用户可以使用该证书登录,即使完整证书尚未上传到用户条目。
另外,因为证书会定期续订,所以证书映射规则减少了管理开销。续订用户证书时,管理员不必更新用户条目。例如,如果映射基于 Subject 和 Issuer 值,如果新证书的主题和签发者与旧证书相同,则映射仍适用。如果使用完整证书,则管理员必须将新证书上传到用户条目以替换旧证书。
设置证书映射:
- 管理员必须将证书映射数据或完整的证书加载到用户帐户中。
- 管理员必须创建证书映射规则,以允许其帐户包含与证书上信息匹配的证书映射数据条目的用户成功登录到 IdM。
创建证书映射规则后,当最终用户提供存储在 文件系统 或 智能卡 上的证书时,身份验证就成功。
密钥分发中心(KDC)有一个用于证书映射规则的缓存。缓存在第一个 certauth 请求时填充,它有一个 300 秒的硬编码超时。KDC 不会看到对证书映射规则的任何更改,除非它重启了或缓存过期了。
您的证书映射规则可取决于您使用证书的用例。例如,如果您使用带有证书的 SSH,则必须有完整的证书,来从证书中提取公钥。
第 5 章 使用 Web 控制台为集中管理的用户配置智能卡验证 复制链接链接已复制到粘贴板!
您可以在 RHEL web 控制台中为集中管理的用户配置智能卡验证:
- 身份管理
- Active Directory,它在 Identity Management 的跨林信任中连接
先决条件
您要使用智能卡验证的系统必须是 Active Directory 或 Identity Management 域的成员。
有关使用 Web 控制台将 RHEL 系统加入到域中的详情,请参阅 使用 web 控制台将 RHEL 系统加入到 IdM 域。
用于智能卡验证的证书必须与身份管理或 Active Directory 中的特定用户关联。
有关在 Identity Management 中将证书与用户关联的详情,请参阅在 IdM Web UI 中的用户条目中添加证书,或将证书添加到 IdM CLI 中的用户条目中。
5.1. 用于集中管理用户的智能卡验证 复制链接链接已复制到粘贴板!
智能卡是一个物理设备,可以使用保存在卡中的证书提供个人验证。个人验证意味着,您可以象使用用户密码一样使用智能卡。
您可以使用私钥和证书的形式在智能卡中保存用户凭证。特殊的软件和硬件可用于访问它们。您可以将智能卡插入到读取器或者 USB 套接字中,并为智能卡提供 PIN 代码,而不是提供密码。
身份管理(IdM)支持使用以下证书进行的智能卡验证:
活动目录证书服务(ADCS)证书颁发机构发布的用户证书。
详情请查看 为 IdM 中的智能卡身份验证配置 ADCS 发布的证书。
如果要开始使用智能卡验证,请参阅RHEL8+ 中的硬件要求:智能卡支持。
5.2. 为 Web 控制台启用智能卡验证 复制链接链接已复制到粘贴板!
要在 web 控制台中使用智能卡验证,请在 cockpit.conf 文件中启用此身份验证方法。
另外,您还可以在同一文件中禁用密码验证。
先决条件
您已安装了 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
- 登录到 RHEL 10 web 控制台。
- 点 Terminal。
在
/etc/cockpit/cockpit.conf中,将ClientCertAuthentication设置为yes:[WebService] ClientCertAuthentication = yes
[WebService] ClientCertAuthentication = yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用以下方法在
cockpit.conf中禁用基于密码的身份验证:[Basic] action = none
[Basic] action = noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个配置禁用了密码验证,且必须总是使用智能卡。
重启 Web 控制台,以确保
cockpit.service接受更改:systemctl restart cockpit
# systemctl restart cockpitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 使用智能卡登录到 web 控制台 复制链接链接已复制到粘贴板!
您可以使用智能卡登录到 web 控制台。
先决条件
- 保存在智能卡中的有效证书,该证书与 Active Directory 或 Identity Management 域中的用户帐户关联。
- PIN 用于解锁智能卡。
- 已经将智能卡放入读卡器。
您已安装了 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 10 web 控制台。
浏览器要求您添加 PIN 保护保存在智能卡中的证书。
- 在 Password Required 对话框中,输入 PIN 并点 OK。
- 在 User Identification Request 对话框中,选择保存在智能卡中的证书。
选择 Remember this decision。
系统下次打开这个窗口。
注意此步骤不适用于 Google Chrome 用户。
- 点击 OK。
您现在已连接,Web 控制台会显示其内容。
5.4. 为智能卡用户启用免密码 sudo 身份验证 复制链接链接已复制到粘贴板!
您可以在 web 控制台中为智能卡用户配置对 sudo 和其他服务的无密码身份验证。
作为替代方案,如果您使用 RHEL 身份管理,您可以将初始 Web 控制台证书身份验证声明为可信的身份验证,来对 sudo、SSH 或其他服务进行身份验证。为此,Web 控制台会在用户会话中自动创建 S4U2Proxy Kerberos ticket。
先决条件
- 身份管理已安装。
- 跨林信任中与身份管理连接的活动目录。
- 您的智能卡已设置为登录到 web 控制台。如需更多信息,请参阅使用 Web 控制台配置智能卡验证。
流程
设置约束委派规则,以列出托管票据可以访问哪些主机。
例 5.1. 设置约束委派规则
Web 控制台会话运行主机
host.example.com,并应受信任,以通过sudo访问自己的主机。此外,我们还添加了第二个可信主机 -remote.example.com。创建以下委派:
运行以下命令添加特定规则可以访问的目标机器列表:
ipa servicedelegationtarget-add cockpit-target ipa servicedelegationtarget-add-member cockpit-target \ --principals=host/host.example.com@EXAMPLE.COM \ --principals=host/remote.example.com@EXAMPLE.COM
# ipa servicedelegationtarget-add cockpit-target # ipa servicedelegationtarget-add-member cockpit-target \ --principals=host/host.example.com@EXAMPLE.COM \ --principals=host/remote.example.com@EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要允许 Web 控制台会话(HTTP/principal)访问该主机列表,请使用以下命令:
ipa servicedelegationrule-add cockpit-delegation ipa servicedelegationrule-add-member cockpit-delegation \ --principals=HTTP/host.example.com@EXAMPLE.COM ipa servicedelegationrule-add-target cockpit-delegation \ --servicedelegationtargets=cockpit-target
# ipa servicedelegationrule-add cockpit-delegation # ipa servicedelegationrule-add-member cockpit-delegation \ --principals=HTTP/host.example.com@EXAMPLE.COM # ipa servicedelegationrule-add-target cockpit-delegation \ --servicedelegationtargets=cockpit-targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在对应服务中启用 GSS 身份验证:
对于 sudo,在
/etc/sssd/sssd.conf文件中启用pam_sss_gss模块:以 root 用户身份,将域的条目添加到
/etc/sssd/sssd.conf配置文件。[domain/example.com] pam_gssapi_services = sudo, sudo-i
[domain/example.com] pam_gssapi_services = sudo, sudo-iCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在第一行启用
/etc/pam.d/sudo文件中的模块。auth sufficient pam_sss_gss.so
auth sufficient pam_sss_gss.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
对于 SSH,将
/etc/ssh/sshd_config文件中的GSSAPIAuthentication选项更新为yes。
从 Web 控制台连接到远程 SSH 主机时,委派的 S4U 票据不会被转发到远程 SSH 主机。使用您的票据在远程主机上向 sudo 进行身份验证将无法正常工作。
验证
- 使用智能卡登录到 web 控制台。
-
点
Limited access按钮。 - 使用您的智能卡进行验证。
或者:
- 尝试使用 SSH 连接到其他主机。
5.5. 限制用户会话和内存以防止 DoS 攻击 复制链接链接已复制到粘贴板!
证书验证被分离和隔离 cockpit-ws Web 服务器的实例保护,使其免受要模拟其他用户的攻击者的攻击。但是,这可能会引入潜在的拒绝服务(DoS)攻击:远程攻击者可以创建大量证书,并使用不同的证书向 cockpit-ws 发送大量的 HTTPS 请求。
为防止此类 DoS 攻击,这些 Web 服务器实例的集体资源是有限的。默认情况下,对连接和内存使用率的限制被设置为 200 个线程,75 % (软)或 90 %(硬)内存限值。
示例流程通过限制连接数和内存演示了资源保护。
流程
在终端中,打开
system-cockpithttps.slice配置文件:systemctl edit system-cockpithttps.slice
# systemctl edit system-cockpithttps.sliceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
TasksMax限制为 100,将CPUQuota限制为 30% :[Slice] # change existing value TasksMax=100 # add new restriction CPUQuota=30%
[Slice] # change existing value TasksMax=100 # add new restriction CPUQuota=30%Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要应用这些更改,请重启系统:
systemctl daemon-reload systemctl stop cockpit
# systemctl daemon-reload # systemctl stop cockpitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,新内存和用户会话降低了对 cockpit-ws Web 服务器的 DoS 攻击的风险。
第 6 章 使用本地证书配置智能卡验证 复制链接链接已复制到粘贴板!
要使用本地证书配置智能卡验证:
- 主机没有连接到某个域。
- 您需要在这个主机上使用智能卡进行验证。
- 您需要使用智能卡验证配置 SSH 访问。
-
您需要使用
authselect配置智能卡。
使用以下配置来实现这种情况:
为希望使用智能卡进行身份验证的用户获取用户证书。证书应该由在域中使用的可信认证认证机构生成。
如果您无法获得证书,您可以生成由本地证书颁发机构签名的用户证书用于测试。
- 在智能卡中保存证书和私钥。
- 为 SSH 访问配置智能卡验证。
如果主机可以作为域的一部分,将主机添加到域中,并使用活动目录或者身份管理认证机构生成的证书。
有关如何为智能卡创建 IdM 证书的详情,请参考为智能卡验证配置身份管理。
6.1. 先决条件 复制链接链接已复制到粘贴板!
authselect 已安装。
authselect工具在 Linux 主机上配置用户身份验证,您可以使用它来配置智能卡验证参数。有关 authselect 的详情,请参考浏览 authselect。支持的智能卡或者 USB 设备。
详情请查看 RHEL 中支持的智能卡。
6.2. 创建本地证书 复制链接链接已复制到粘贴板!
按照此流程执行以下任务:
- 生成 OpenSSL 证书颁发机构
- 创建证书签名请求
以下步骤仅用于测试目的。由本地自签名证书颁发机构生成的证书不如使用 AD、IdM 或 RHCS 认证认证机构的安全。即使主机不是域的一部分,您仍应使用企业认证认证机构生成的证书。
流程
创建可生成证书的目录,例如:
mkdir /tmp/ca cd /tmp/ca
# mkdir /tmp/ca # cd /tmp/caCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置证书(将此文本复制到
ca目录中的命令行):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下目录:
mkdir certs crl newcerts
# mkdir certs crl newcertsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下文件:
touch index.txt crlnumber index.txt.attr
# touch index.txt crlnumber index.txt.attrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在串行文件中写入数字 01:
echo 01 > serial
# echo 01 > serialCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在串行文件中写入数字 01。它是证书的序列号。当这个 CA 发布一个新证书时这个数字会加一。
创建一个 OpenSSL root CA 密钥:
openssl genrsa -out rootCA.key 2048
# openssl genrsa -out rootCA.key 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建自签名 root 认证认证机构证书:
openssl req -batch -config ca.cnf \ -x509 -new -nodes -key rootCA.key -sha256 -days 10000 \ -set_serial 0 -extensions v3_ca -out rootCA.crt
# openssl req -batch -config ca.cnf \ -x509 -new -nodes -key rootCA.key -sha256 -days 10000 \ -set_serial 0 -extensions v3_ca -out rootCA.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的用户名创建密钥:
openssl genrsa -out example.user.key 2048
# openssl genrsa -out example.user.key 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个密钥是在本地系统中生成的,因此当密钥保存在卡中时,从系统中删除密钥。
您还可以直接在智能卡中创建密钥。要做到这一点,请遵循智能卡生产商生成的说明。
创建证书签名请求配置文件(将这个文本复制到 ca 目录中的命令行中):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 example.user 证书创建证书签名请求:
openssl req -new -nodes -key example.user.key \ -reqexts req_exts -config req.cnf -out example.user.csr
# openssl req -new -nodes -key example.user.key \ -reqexts req_exts -config req.cnf -out example.user.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置新证书。过期期限设定为 1 年:
openssl ca -config ca.cnf -batch -notext \ -keyfile rootCA.key -in example.user.csr -days 365 \ -extensions usr_cert -out example.user.crt
# openssl ca -config ca.cnf -batch -notext \ -keyfile rootCA.key -in example.user.csr -days 365 \ -extensions usr_cert -out example.user.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,认证颁发机构和证书被成功生成并准备好导入到智能卡。
6.3. 将证书复制到 SSSD 目录中 复制链接链接已复制到粘贴板!
GNOME 桌面管理器(GDM)需要 SSSD。如果使用 GDM,则需要将 PEM 证书复制到 /etc/sssd/pki 目录。
先决条件
- 已生成本地 CA 颁发机构和证书
流程
确保已在系统中安装了 SSSD。
rpm -q sssd sssd-2.0.0.43.el8_0.3.x86_64
# rpm -q sssd sssd-2.0.0.43.el8_0.3.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
/etc/sssd/pki目录:file /etc/sssd/pki /etc/sssd/pki/: directory
# file /etc/sssd/pki /etc/sssd/pki/: directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
rootCA.crt作为 PEM 文件复制到/etc/sssd/pki/目录中:cp /tmp/ca/rootCA.crt /etc/sssd/pki/sssd_auth_ca_db.pem
# cp /tmp/ca/rootCA.crt /etc/sssd/pki/sssd_auth_ca_db.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您已成功生成了证书颁发机构和证书,并将其保存在
/etc/sssd/pki目录中。注意如果要与另一个应用程序共享证书颁发机构证书,您可以在 sssd.conf 中更改位置:
-
SSSD PAM 响应器:
[pam]部分中的pam_cert_db_path -
SSSD ssh 响应器:
[ssh]部分中的ca_db
详情请查看
sssd.conf的 man page。红帽建议保留默认路径,并为 SSSD 使用专用证书颁发机构证书文件来确保此处仅列出可信的证书颁发机构。
-
SSSD PAM 响应器:
6.4. 使用智能卡验证配置 SSH 访问 复制链接链接已复制到粘贴板!
SSH 连接需要身份验证。您可以使用密码或证书。按照以下流程,使用保存在智能卡上的证书启用验证。
有关使用 authselect 配置智能卡的详情,请参考使用 authselect 配置智能卡。
先决条件
- 该智能卡包含您的证书和私钥。
- 该卡插入读卡器并连接到计算机。
pcscd服务正在您的本地计算机上运行。详情请查看安装用于管理和使用智能卡的工具。
流程
在使用智能卡验证的用户主目录中为 SSH 密钥创建新目录:
mkdir /home/<example_user>/.ssh
# mkdir /home/<example_user>/.sshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
opensc库运行ssh-keygen -D命令以使用智能卡中的私钥检索现有公钥对,并将其添加到用户的 SSH 密钥目录的authorized_keys列表中,以便通过智能卡验证启用 SSH 访问。ssh-keygen -D /usr/lib64/pkcs11/opensc-pkcs11.so >> ~<example_user>/.ssh/authorized_keys
# ssh-keygen -D /usr/lib64/pkcs11/opensc-pkcs11.so >> ~<example_user>/.ssh/authorized_keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 需要访问
/.ssh目录和authorized_keys文件的适当配置。要设置或更改访问权限,请输入:chown -R <example_user:example_user> ~<example_user>/.ssh/ chmod 700 ~<example_user>/.ssh/ chmod 600 ~<example_user>/.ssh/authorized_keys
# chown -R <example_user:example_user> ~<example_user>/.ssh/ # chmod 700 ~<example_user>/.ssh/ # chmod 600 ~<example_user>/.ssh/authorized_keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示密钥:
cat ~<example_user>/.ssh/authorized_keys
# cat ~<example_user>/.ssh/authorized_keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 终端会显示密钥。
您可以使用以下命令验证 SSH 访问:
ssh -I /usr/lib64/opensc-pkcs11.so -l <example_user> localhost hostname
# ssh -I /usr/lib64/opensc-pkcs11.so -l <example_user> localhost hostname
如果配置成功,会提示您输入智能卡 PIN。
这个配置现在可以在本地运行。现在,您可以复制公钥并将其分发到您要使用 SSH 的所有服务器中的 authorized_keys 文件。
6.5. 使用智能卡时创建证书映射规则 复制链接链接已复制到粘贴板!
您需要创建证书映射规则,以便使用存储在智能卡上的证书进行登录。
先决条件
- 该智能卡包含您的证书和私钥。
- 该卡插入读卡器并连接到计算机。
-
pcscd服务正在您的本地计算机上运行。
流程
-
创建一个证书映射配置文件,如
/etc/sssd/conf.d/sssd_certmap.conf。 将证书映射规则添加到
sssd_certmap.conf文件中:[certmap/shadowutils/otheruser] matchrule = <SUBJECT>.*CN=certificate_user.*<ISSUER>^CN=Example Test CA,OU=Example Test,O=EXAMPLE$
[certmap/shadowutils/otheruser] matchrule = <SUBJECT>.*CN=certificate_user.*<ISSUER>^CN=Example Test CA,OU=Example Test,O=EXAMPLE$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您必须在单独的部分中定义每个证书映射规则。定义每个部分,如下所示:
[certmap/<DOMAIN_NAME>/<RULE_NAME>]
[certmap/<DOMAIN_NAME>/<RULE_NAME>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 SSSD 被配置为使用代理提供者来允许对本地用户而不是 AD、IPA 或 LDAP 进行智能卡验证,则 <RULE_NAME> 可以简单地是具有与
matchrule中提供的数据匹配的卡的用户名。
验证
请注意,要验证使用智能卡的 SSH 访问,必须配置 SSH 访问。如需更多信息,请参阅 使用智能卡身份验证配置 SSH 访问。
您可以使用以下命令验证 SSH 访问:
ssh -I /usr/lib64/opensc-pkcs11.so -l otheruser localhost hostname
# ssh -I /usr/lib64/opensc-pkcs11.so -l otheruser localhost hostnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置成功,会提示您输入智能卡 PIN。
第 7 章 使用 authselect 配置智能卡验证 复制链接链接已复制到粘贴板!
您可以配置智能卡,以达到以下目标之一:
- 启用密码和智能卡验证
- 禁用密码并启用智能卡验证
- 在删除时启用锁定
7.1. 先决条件 复制链接链接已复制到粘贴板!
authselect工具已安装在您的系统上authselect工具在 Linux 主机上配置用户身份验证,您可以使用它来配置智能卡验证参数。有关authselect的详情,请参考 使用 authselect 配置用户身份验证。支持的智能卡或者 USB 设备。
详情请查看 RHEL 中支持的智能卡。
7.2. 适用于智能卡的证书 复制链接链接已复制到粘贴板!
在使用 authselect 配置智能卡前,您必须将证书导入您的卡中。您可以使用以下工具生成证书:
- Active Directory(AD)
身份管理(IdM)
有关如何创建 IdM 证书的详情,请参考
红帽认证系统(RHCS)
详情请参阅使用企业安全客户端管理智能卡。
- 第三方认证机构 (CA)
- 本地认证认证机构。如果用户不是某个域的一部分或用于测试,您可以使用本地认证认证机构生成的证书。
7.3. 配置您的系统以启用智能卡和密码验证 复制链接链接已复制到粘贴板!
按照以下流程,在您的系统上启用智能卡和密码验证。
先决条件
- 智能卡包含您的证书和私钥。
- 在读卡器中插入卡并连接到计算机。
-
authselect工具已安装在您的系统中。
步骤
输入以下命令允许智能卡和密码验证:
authselect select sssd with-smartcard --force
# authselect select sssd with-smartcard --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,智能卡验证会被启用。但是如果您忘记携带了智能卡,密码验证仍可以正常工作。
7.4. 配置您的系统以强制智能卡验证 复制链接链接已复制到粘贴板!
authselect 工具可让您在系统中配置智能卡验证,并禁用默认密码验证。authselect 命令包括以下选项:
-
with-smartcard-- 除了密码验证外,启用智能卡验证 -
with-smartcard-required— 启用智能卡验证,禁用密码验证
with-smartcard-required 选项只对使用智能卡进行特定登录服务时才强制执行,如 login、gdm、xdm、kdm、xscreensaver、gnome-screensaver 和 kscreensaver。其他服务(如 su 或 sudo )默认情况下不使用智能卡验证,并将继续提示您输入密码。
先决条件
- 智能卡包含您的证书和私钥。
- 在读卡器中插入卡并连接到计算机。
-
authselect工具安装在您的本地系统中。
步骤
输入以下命令强制智能卡验证:
authselect select sssd with-smartcard with-smartcard-required --force
# authselect select sssd with-smartcard with-smartcard-required --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意运行此命令后,密码验证将无法正常工作,您只能使用智能卡登录。在运行此命令之前,确保智能卡验证正在运行,或者您会被锁定于您的系统。
7.5. 配置智能卡认证,使它在取出智能卡时进行锁定 复制链接链接已复制到粘贴板!
authselect 服务可让您配置智能卡验证,以便在从读取器中删除智能卡后立即锁定屏幕。authselect 命令必须包括以下变量:
-
with-smartcard— 启用智能卡验证 -
with-smartcard-required- 启用专用智能卡验证(禁用密码验证) with-smartcard-lock-on-removal— 在智能卡被取出后会强制登出注意with-smartcard-lock-on-removal选项仅适用于具有 GNOME 桌面环境的系统。如果您使用基于tty或控制台的系统,并且您从读卡器中删除了智能卡,则不会将您自动锁在系统之外。
先决条件
- 智能卡包含您的证书和私钥。
- 在读卡器中插入卡并连接到计算机。
-
authselect工具安装在您的本地系统中。
步骤
输入以下命令启用智能卡验证、禁用密码验证并在删除时强制锁定:
authselect select sssd with-smartcard with-smartcard-required with-smartcard-lock-on-removal --force
# authselect select sssd with-smartcard with-smartcard-required with-smartcard-lock-on-removal --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,当您取出卡时,屏幕会锁定。您必须重新插入智能卡来解锁它。
第 8 章 使用智能卡进行远程向 sudo 进行身份验证 复制链接链接已复制到粘贴板!
您可以使用智能卡远程对 sudo 进行身份验证。ssh-agent 服务在本地运行并且可以将 ssh-agent 套接字转发到远程计算机后,您可以使用 sudo PAM 模块中的 SSH 身份验证协议远程验证用户。
在使用智能卡进行本地登录后,您可以通过 SSH 登录到远程机器并运行 sudo 命令,而无需使用智能卡验证的 SSH 转发来提示输入密码。
在本例中,客户端通过 SSH 连接到 IPA 服务器,并在 IPA 服务器上使用保存在智能卡上的凭证运行 sudo 命令。
8.1. 在 IdM 中创建 sudo 规则 复制链接链接已复制到粘贴板!
按照以下流程在 IdM 中创建 sudo 规则,来给 <idm_user> 赋予在远程主机上运行 sudo 的权限。
在本例中,less 和 whoami 命令被添加为 sudo 命令,来测试该流程。
先决条件
-
IdM 用户已创建。在本例中,用户名为
<idm_user>。 -
您有远程运行
sudo的系统的主机名。在本示例中,主机是server.ipa.test。
流程
创建名为 <sudorule_name> 的
sudo规则,以允许用户运行命令。将 <sudorule_name> 替换为您要创建的 sudo 规则的实际名称。ipa sudorule-add <sudorule_name>
# ipa sudorule-add <sudorule_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
less和whoami作为sudo命令:ipa sudocmd-add /usr/bin/less ipa sudocmd-add /usr/bin/whoami
# ipa sudocmd-add /usr/bin/less # ipa sudocmd-add /usr/bin/whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
less和whoami命令添加到 <sudorule_name> 中:ipa sudorule-add-allow-command <sudorule_name> --sudocmds /usr/bin/less ipa sudorule-add-allow-command <sudorule_name> --sudocmds /usr/bin/whoami
# ipa sudorule-add-allow-command <sudorule_name> --sudocmds /usr/bin/less # ipa sudorule-add-allow-command <sudorule_name> --sudocmds /usr/bin/whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<idm_user>用户添加到 <sudorule_name> 中:ipa sudorule-add-user <sudorule_name> --users <idm_user>
# ipa sudorule-add-user <sudorule_name> --users <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将在其上运行
sudo的主机添加到 <sudorule_name> 中:ipa sudorule-add-host <sudorule_name> --hosts server.ipa.test
# ipa sudorule-add-host <sudorule_name> --hosts server.ipa.testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2. 使用智能卡远程连接到 sudo 复制链接链接已复制到粘贴板!
按照以下流程,配置 SSH 代理和客户端,以使用智能卡远程连接到 sudo。
先决条件
-
您已在 IdM 中创建了
sudo规则。 - 您已将 IdM 配置为支持使用 FIDO2 Yubikeys 或使用智能卡的 PKINIT 身份验证的 passkey 身份验证。
-
您已在要运行
sudo的远程系统上为sudo身份验证配置了pam_sss_gss模块。
流程
启动 SSH 代理(如果尚未运行)。
eval `ssh-agent`
# eval `ssh-agent`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的智能卡添加到 SSH 代理。提示时输入您的 PIN:
ssh-add -s /usr/lib64/opensc-pkcs11.so
# ssh-add -s /usr/lib64/opensc-pkcs11.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用启用了 ssh-agent 转发的 SSH 连接到需要远程运行
sudo的系统。使用-A选项:ssh -A ipauser1@server.ipa.test
# ssh -A ipauser1@server.ipa.testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
sudo运行whoami命令:sudo /usr/bin/whoami
# sudo /usr/bin/whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
插入智能卡时,不会提示您输入 PIN 或密码。
如果 SSH 代理被配置为使用其他源,如 GNOME Keyring,且您在删除智能卡后运行 sudo 命令,可能不会提示您输入 PIN 或密码,因为其他源可能提供了对有效私钥的访问。要检查 SSH 代理已知的所有身份的公钥,请运行 ssh-add -L 命令。
第 9 章 使用带有智能卡的 PKINIT,以活动目录用户身份进行身份验证 复制链接链接已复制到粘贴板!
活动目录(AD)用户可以使用智能卡向加入到 IdM 的桌面客户端系统进行身份验证,并从客户端获取用于单点登录(SSO)身份验证的 Kerberos 票据授予票据(TGT)。这个过程适用于需要智能卡验证的 AD 用户帐户,这防止它们使用基于密码的登录。
您不能使用这些指令来访问 IdM 资源,应为其 Kerberos 服务有 pkinit 身份验证指示器要求。这是因为进程从 Active Directory Kerberos 分发中心(AD KDC),而不是从 IdM KDC 获取 TGT 。因此,TGT 不包含必要的身份验证指示器,IdM 服务将拒绝您的访问。
要为 IdM 用户启用 PKINIT 身份验证来访问 IdM 服务,请参阅 管理 Kerberos 票据策略。
先决条件
- IdM 服务器被配置为智能卡验证。如需更多信息,请参阅 为智能卡验证配置 IdM 服务器 或 使用 Ansible 为智能卡验证配置 IdM 服务器。
- 已为智能卡验证配置了客户端。如需更多信息,请参阅 为智能卡验证配置 IdM 客户端 或 使用 Ansible 为智能卡验证配置 IdM 客户端。
-
krb5-pkinit软件包已安装。 - AD 服务器被配置为信任签发智能卡证书的证书颁发机构(CA)。将 CA 证书导入到 NTAuth 存储(请参阅 Microsoft 支持),并将 CA 添加为可信 CA。详情请查看活动目录文档。
流程
将 Kerberos 客户端配置为信任签发智能卡证书的 CA:
-
在 IdM 客户端上,打开
/etc/krb5.conf文件。 在文件中添加以下行:
[realms] AD.DOMAIN.COM = { pkinit_eku_checking = kpServerAuth pkinit_kdc_hostname = adserver.ad.domain.com }[realms] AD.DOMAIN.COM = { pkinit_eku_checking = kpServerAuth pkinit_kdc_hostname = adserver.ad.domain.com }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在 IdM 客户端上,打开
如果用户证书不包含证书撤销列表(CRL)分布点扩展,请将 AD 配置为忽略撤销错误:
将以下 REG 格式的内容保存在一个纯文本文件中,并将其导入到 Windows 注册表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以使用
regedit.exe应用程序手动设置值。- 重启 Windows 系统以应用更改。
在身份管理客户端上使用
kinit工具进行身份验证。使用用户名和域名指定活动目录用户:kinit -X X509_user_identity='PKCS11:opensc-pkcs11.so' ad_user@AD.DOMAIN.COM
$ kinit -X X509_user_identity='PKCS11:opensc-pkcs11.so' ad_user@AD.DOMAIN.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow -X选项将opensc-pkcs11.so 模块指定为预身份验证属性。
第 10 章 使用智能卡对身份验证进行故障排除 复制链接链接已复制到粘贴板!
以下流程描述了如何解决在设置智能卡验证时可能遇到的一些问题。
10.1. 测试系统中的智能卡访问 复制链接链接已复制到粘贴板!
按照以下流程测试是否可以访问智能卡。
先决条件
- 已安装并配置了用于智能卡的 IdM 服务器和客户端。
-
您已从
nss-tools软件包安装了certutil工具。 - 您有智能卡的 PIN 或密码。
步骤
使用
lsusb命令,验证智能卡读取器是否在操作系统中看到:lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 072f:b100 Advanced Card Systems, Ltd ACR39U Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 072f:b100 Advanced Card Systems, Ltd ACR39U Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 RHEL 中已测试的和支持的智能卡和读卡器的更多信息,请参阅 RHEL 10 中支持的智能卡。
确保
pcscd服务和套接字已启用并正在运行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
p11-kit list-modules命令,显示有关配置的智能卡和智能卡中的令牌的信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您可以访问智能卡的内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
certutil命令显示智能卡中的证书内容:运行以下命令来确定证书的正确名称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在智能卡中显示证书内容:
注意确保证书的名称是与上一步中显示的输出完全匹配,在本例中为
MyEID(sctest):Certificate。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2. 使用 SSSD 对智能卡验证进行故障排除 复制链接链接已复制到粘贴板!
按照以下流程,使用智能卡对具有 SSSD 的验证进行故障排除。
先决条件
- 已安装并配置了用于智能卡的 IdM 服务器和客户端。
-
已安装
sssd-tools软件包。 - 您可以检测智能卡读取器并显示智能卡的内容。请参阅在系统上测试智能卡访问。
步骤
使用
su验证您可以使用智能卡进行验证:su - idmuser1 -c ‘su - idmuser1 -c whoami' PIN for MyEID (sctest): idmuser1
$ su - idmuser1 -c ‘su - idmuser1 -c whoami' PIN for MyEID (sctest): idmuser1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有提示输入智能卡 PIN,且返回一个密码提示或者返回授权错误,请检查 SSSD 日志。有关登录 SSSD 的信息,请参阅 对 IdM 中使用 SSSD 的身份验证进行故障排除 。以下是身份验证失败的示例:
su - idmuser1 -c ‘su - idmuser1 -c whoami' PIN for MyEID (sctest): su: Authentication failure
$ su - idmuser1 -c ‘su - idmuser1 -c whoami' PIN for MyEID (sctest): su: Authentication failureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 SSSD 日志指明了
krb5_child的问题,类似于以下内容,则可能对您的 CA 证书有问题。要排除与证书相关的问题,请参阅 验证 IdM Kerberos KDC 可以使用 Pkinit 以及 CA 证书正确位于。[Pre-authentication failed: Failed to verify own certificate (depth 0): unable to get local issuer certificate: could not load the shared library]
[Pre-authentication failed: Failed to verify own certificate (depth 0): unable to get local issuer certificate: could not load the shared library]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 SSSD 日志表示来自
p11_child或krb5_child的超时,您可能需要提高 SSSD 超时,并尝试使用智能卡再次进行身份验证。有关如何增加超时的详情,请参阅增加 SSSD 超时。验证您的 GDM 智能卡验证配置是否正确。应返回 PAM 验证的成功消息,如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果身份验证错误(类似于以下内容)被返回,请检查 SSSD 日志尝试并确定导致这个问题的原因。有关登录 SSSD 的信息,请参阅 对 IdM 中使用 SSSD 的身份验证进行故障排除 。
pam_authenticate for user [idmuser1]: Authentication failure PAM Environment: - no env -
pam_authenticate for user [idmuser1]: Authentication failure PAM Environment: - no env -Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 PAM 验证仍失败,请清除您的缓存并再次运行命令。
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
# 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] yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3. 验证 IdM Kerberos KDC 可以使用 PKINIT 和 CA 证书正确位置 复制链接链接已复制到粘贴板!
按照以下流程验证 IdM Kerberos KDC 是否可以使用 PKINIT,并描述如何验证您的 CA 证书是否被正确定位。
先决条件
- 已安装并配置了用于智能卡的 IdM 服务器和客户端。
- 您可以检测智能卡读取器并显示智能卡的内容。请参阅在系统上测试智能卡访问。
步骤
运行
kinit工具,以idmuser1使用保存在智能卡中的证书进行验证:kinit -X X509_user_identity=PKCS11: idmuser1 MyEID (sctest) PIN:
$ kinit -X X509_user_identity=PKCS11: idmuser1 MyEID (sctest) PIN:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入您的智能卡 PIN。如果没有提示输入 PIN,请检查您是否可检测智能卡读取器并显示智能卡的内容。请参阅链接:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_smart_card_authentication/troubleshooting-authentication-with-smart-cards#testing-smart-card-access-on-the-system
如果您的 PIN 被接受,系统会提示您输入密码,可能会缺少您的 CA 签名证书。
使用
openssl命令,验证默认证书捆绑包文件中列出的 CA 链:openssl crl2pkcs7 -nocrl -certfile /var/lib/ipa-client/pki/ca-bundle.pem | openssl pkcs7 -print_certs -noout subject=O = IDM.EXAMPLE.COM, CN = Certificate Authority issuer=O = IDM.EXAMPLE.COM, CN = Certificate Authority
$ openssl crl2pkcs7 -nocrl -certfile /var/lib/ipa-client/pki/ca-bundle.pem | openssl pkcs7 -print_certs -noout subject=O = IDM.EXAMPLE.COM, CN = Certificate Authority issuer=O = IDM.EXAMPLE.COM, CN = Certificate AuthorityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您的证书的有效性:
查找
idmuser1的用户身份验证证书 ID:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从智能卡以 DER 格式读取用户证书信息:
pkcs11-tool --read-object --id 01 --type cert --output-file cert.der Using slot 0 with a present token (0x0)
$ pkcs11-tool --read-object --id 01 --type cert --output-file cert.der Using slot 0 with a present token (0x0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 DER 证书转换为 PEM 格式:
openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM
$ openssl x509 -in cert.der -inform DER -out cert.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证证书是否有有效的签发者签名到 CA:
openssl verify -CAfile /var/lib/ipa-client/pki/ca-bundle.pem <path>/cert.pem cert.pem: OK
$ openssl verify -CAfile /var/lib/ipa-client/pki/ca-bundle.pem <path>/cert.pem cert.pem: OKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您的智能卡包含多个证书,
kinit可能无法选择正确的证书进行验证。在这种情况下,您需要使用certid=<ID>选项将证书 ID 指定为kinit命令的参数。检查保存在智能卡中的证书数量,并获取您要使用的证书 ID:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用证书 ID 01 运行
kinit:kinit -X kinit -X X509_user_identity=PKCS11:certid=01 idmuser1 MyEID (sctest) PIN:
$ kinit -X kinit -X X509_user_identity=PKCS11:certid=01 idmuser1 MyEID (sctest) PIN:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行
klist查看 Kerberos 凭证缓存的内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 完成后销毁您的活跃 Kerberos 票据:
kdestroy -A
$ kdestroy -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.4. 增加 SSSD 超时 复制链接链接已复制到粘贴板!
如果您在使用智能卡进行身份验证时遇到问题,请检查 krb5_child.log 和 p11_child.log 文件以查找类似如下的超时条目:
krb5_child: Timeout for child [9607] reached.....consider increasing value of krb5_auth_timeout.
krb5_child: Timeout for child [9607] reached.....consider increasing value of krb5_auth_timeout.
如果日志文件中有一个超时条目,请尝试增加 SSSD 超时,如此过程中所述。
先决条件
- 您已为智能卡验证配置了 IdM 服务器和客户端。
步骤
在 IdM 客户端中打开
sssd.conf文件:vim /etc/sssd/sssd.conf
# vim /etc/sssd/sssd.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的 domain 部分中,如
[domain/idm.example.com],添加以下选项:krb5_auth_timeout = 60
krb5_auth_timeout = 60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
[pam]部分中,添加以下内容:p11_child_timeout = 60
p11_child_timeout = 60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 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
# 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] yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 增加超时后,请尝试使用智能卡再次进行身份验证。如需了解更多详细信息,请参阅测试智能卡验证。