管理智能卡验证
配置和使用智能卡验证
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。帮助我们如何进行改进。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您的建议以改进。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 了解智能卡验证 复制链接链接已复制到粘贴板!
使用基于智能卡的验证是使用密码进行验证的替代选择。您可以将用户凭证以私钥和证书的形式存储在智能卡上,并使用证书、特殊的软件和硬件来访问它们。将智能卡放在读卡器或 USB 端口中,并为智能卡提供 PIN 代码,而不是提供您的密码。
这部分论述了如何使用智能卡以及智能卡验证的工作方式。它描述了可以用来读取和操作智能卡内容的工具。它还提供了示例用例,并描述了 IdM 服务器和 IdM 客户端用于智能卡验证的设置。
如果要开始使用智能卡验证,请参阅RHEL8 中的硬件要求:智能卡支持。
1.1. 什么是智能卡 复制链接链接已复制到粘贴板!
智能卡是一个物理设备,通常是一个带有微处理器的塑料板卡,它可以使用保存在卡中的证书进行个人验证。个人验证意味着,您可以象使用用户密码一样使用智能卡。
您可以将用户凭证以私钥和证书的形式存储在智能卡上,并使用特殊的软件和硬件来访问它们。您可以将智能卡放在读卡器或 USB 插座中,并为智能卡提供 PIN 代码,而不是提供您的密码。
1.2. 支持的智能卡 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 支持四种卡类型: coolkey 卡、CAC、PIV 和 PKCS START。有关卡类型之间的区别的详情,请查看相应的文档。
在 Red Hat Enterprise Linux 中,支持以下类型的智能卡:
带有 Coolkey 小程序的卡:
- Gemalto TOP IM FIPS CY2 64K 令牌(SCP01)
- Giesecke & Devrient (G&D) SmartCafeproblem 7.0 (SCP03)
- SafeNet Assured Technologies SC-650 (SCP01)
- CAC 和 PIV 智能卡.如需更多信息,请参阅 联邦员工和合同者(PIV)的个人身份验证
- 也支持所选的 PKCS START 卡。虽然支持这个系列中的多个卡,但这些卡有许多不同的配置和选项。有关与 RHEL 兼容的卡的详情,请联系您的客户代表。
- 另外,红帽可自主裁量支持其他卡。有关支持其他卡的详情,请联系您的客户代表。
有关硬件要求的更多信息,请参阅 RHEL 8 及之后的版本中的智能卡支持。
1.2.1. 支持的智能卡读卡器 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 中,支持的智能卡读取器遵循 pcsc-lite
上游项目。大多数兼容 CCID 的读者应在没有任何问题的情况下正常工作。红帽定期将上游项目的 USB 标识符更新为我们的 pcsc-lite-ccid
驱动程序。此外,红帽可自主裁量支持其他读者。以下智能卡读卡器列表由红帽测试并验证:
- SCR331/SCR3310
- Omnikey 3121 (必须是 SC650 卡的 R31210399 的一部分)
有关上游项目中支持的硬件列表,请参阅支持的 CCID 读取器/ICCD 令牌。
1.3. 支持的硬件安全模块 复制链接链接已复制到粘贴板!
下表列出了 Red Hat Identity Management (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.4. 什么是智能卡验证 复制链接链接已复制到粘贴板!
基于公钥的验证和基于证书的身份验证是两个广泛使用的、基于密码验证的替代选择。使用公钥和私钥而不是您的密码确认您的身份。证书是一个电子文件,用于识别个人、服务器、公司或其他实体并将该身份与公钥关联。比如某个驱动程序的许可或论坛,证书可提供个人身份的可识别验证。公钥加密使用证书来解决身份模拟问题。
如果使用智能卡验证,您的用户凭证(您的公钥和私钥和证书)保存在智能卡中,且只能在智能卡插入读卡机并提供了一个个人身份码(PIN)后才能使用。这需要您拥有物理设备(智能卡)并知道其 PIN 时,因此智能卡验证被认为是双因素验证类型。
1.4.1. IdM 中智能卡验证示例 复制链接链接已复制到粘贴板!
以下示例描述了在 IdM 中使用智能卡的两个简单场景。
1.4.1.1. 使用智能卡登录到您的系统 复制链接链接已复制到粘贴板!
您可以使用智能卡以本地用户对 RHEL 系统进行身份验证。如果您的系统被配置为强制智能卡登录,则会提示您插入智能卡并输入其 PIN,如果失败,则无法登录到您的系统。或者,您可以将您的系统配置为使用智能卡验证或者您的用户名和密码进行验证。在这种情况下,如果您没有插入智能卡,会提示您输入您的用户名和密码。
1.4.1.2. 登陆到 GDM 并在移除卡时进行锁定 复制链接链接已复制到粘贴板!
如果您在 RHEL 系统中配置了智能卡验证,您可以设置 在移除卡时进行锁定。如果您登录到 GNOME 显示管理器 (GDM) 并移除智能卡,则屏幕锁定会被启用,您必须重新插入智能卡并使用 PIN 验证来解锁屏幕。您不能使用您的用户名和密码进行验证。
如果您登录到 GDM 并移除智能卡,则屏幕锁定会被启用,您必须重新插入智能卡并使用 PIN 验证来解锁屏幕。
1.5. RHEL 中的智能卡验证选项 复制链接链接已复制到粘贴板!
您可以使用 authselect 命令配置如何在特定的身份管理(IdM)客户端中进行智能卡验证,
。可用的智能卡选项如下:
authselect
enable-feature <smartcard_option>
-
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
或控制台的系统,并且从读卡器中删除智能卡,则不会自动将您锁定在系统之外。
如需更多信息,请参阅使用 authselect 配置智能卡。
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
:管理智能卡上的 PKCSSTART 数据结构,如列出和读取存储在令牌中的 PIN、密钥和证书。 -
pkcs11-tool
:管理智能卡中的 PKCSGRESS 数据对象,如列出和读取令牌中存储的 PIN、密钥和证书。
-
GnuTLS utils: 一个 API,用于应用程序的 API 来启用网络传输层的安全通信,以及访问 X.509、PKCS#12、OpenPGP 和其他结构的接口。
-
p11tool
: 对 PKCSGRESS 智能卡和安全模块执行操作。 -
certtool
:解析和生成 X.509 证书、请求和私钥。
-
网络安全服务(NSS)工具:一组库,旨在支持启用了安全的客户端和服务器应用程序的跨平台开发。使用 NSS 构建的应用程序支持 SSL v3、TLS、Pce PKCS #5、PKCS #7、PKCS #11, PKCS #12、S/MIME、X.509 v3 证书和其他安全标准。
-
modutil
:使用安全模块数据库管理 PKCSxdg 模块信息。 -
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 的证书。您可以从其证书已被认证机构发布的网页下载证书链。详情请查看 配置浏览器来启用证书身份验证 中的步骤 1 - 4a。
-
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 PEM
Copy 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 | more
Copy 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.sh
Copy 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 off
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Apache 守护进程(httpd)使更改立即生效:
systemctl restart httpd
[root@server SmartCard]# systemctl restart httpd
Copy 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)发布的用户启用智能卡验证。
先决条件
-
您有到 IdM 服务器的
root
访问权限。 -
您需要知道 IdM
admin
密码。 您有 root CA 证书、IdM CA 证书和所有中间 CA 证书:
- 为 <EXAMPLE.ORG> CA 直接发布或者通过一个或多个其子 CA 发布证书的根 CA 的证书。您可以从颁发机构发布证书的网页下载证书链。详情请参阅 配置浏览器以启用证书验证 中的步骤 4。
-
IdM CA 证书。您可以从任何 IdM CA 服务器上的
/etc/ipa/ca.crt
文件获取 CA 证书。 - 介于<EXAMPLE.ORG> CA 和 IdM CA 之间的所有 CA 的证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
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 PEM
Copy 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 | more
Copy 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.crt
Copy 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.yml
playbook: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.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipasmartcard_server
Ansible 角色执行以下操作:- 它配置 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.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/httpd/conf.d/ssl.conf
文件中将SSLOCSPEnable
参数设为off
:SSLOCSPEnable off
SSLOCSPEnable off
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Apache 守护进程(httpd)使更改立即生效:
systemctl restart httpd
# systemctl restart httpd
Copy 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 setup smartcard for IPA server and replicas hosts: ipacluster [...]
---
- name: Playbook to setup smartcard for IPA server and replicas
hosts: ipacluster
[...]
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.sh
Copy 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/
[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:00
Copy 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/
[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:00
Copy 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.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
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 PEM
Copy 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 | more
Copy 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.crt
Copy 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.yml
playbook: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.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipasmartcard_client
Ansible 角色执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
- 它将系统安全服务守护进程(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.crt
Copy 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 admin
Copy 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
命令将证书添加到 & lt;smartcard_user > 的配置集中:ipa user-add-cert <smartcard_user> --certificate=$CERT
[user@client SmartCard]$ ipa user-add-cert <smartcard_user> --certificate=$CERT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
& lt;smartcard_user&
gt; 条目现在包含外部证书。
2.7. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书并启动 pscd
服务的对应工具。
先决条件
-
您有
root
权限。
流程
安装
opensc
和gnutls-utils
软件包:yum -y install opensc gnutls-utils
# yum -y install opensc gnutls-utils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd
服务。systemctl start pcscd
# systemctl start pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd
服务是否正在运行:systemctl status pcscd
# systemctl status pcscd
Copy 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
$ 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
$ 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
Copy 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
$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name
Copy 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
$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy 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
$ 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
Copy 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
$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -F
Copy 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 域的成员。
智能卡上的证书通过以下方式映射到用户条目:
- 为特定用户条目分配证书。详情请参阅 在 IdM Web UI 中向用户条目添加证书 或 在 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>
$ su - <user_name> PIN for smart_card
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置正确,会提示您输入智能卡 PIN。
第 3 章 为 IdM 中智能卡验证配置 ADCS 发布的证书 复制链接链接已复制到粘贴板!
要在 IdM 中为其证书是由活动目录(AD)证书服务发布的用户配置智能卡验证:
- 您的部署是基于身份管理(IdM)和活动目录(AD)之间的跨林信任。
- 您希望允许智能卡验证存储在 AD 中的帐户的用户。
- 证书创建并存储在活动目录证书服务(ADCS)中。
先决条件
身份管理(IdM)和活动目录(AD)信任已安装
详情请参阅在 IdM 和 AD 之间安装信任。
- 活动目录证书服务(ADCS)已安装,并且用户证书已生成
3.1. 信任配置和证书使用量所需的 Windows 服务器设置 复制链接链接已复制到粘贴板!
您必须在 Windows 服务器上配置以下内容:
- 已安装活动目录证书服务(ADCS)
- 创建证书颁发机构
- 可选:如果您使用证书颁发机构 Web 注册,则必须配置互联网信息服务(IIS)
导出的证书必须满足以下条件:
-
密钥必须有
2048
位或更多 - 包括一个私钥
您将需要以下格式的证书:个人信息交换—
PKCS #12(.PFX)
- 启用证书隐私
3.2. 使用 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.3. 使用 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.sh
Copy 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.sh
Copy 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.cer
Copy 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
[root@idmserver ~]# scp sc_client.sh root@client1.idm.example.com:/root Password: sc_client.sh 100% 2857 1.6MB/s 00:00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Windows 证书复制到客户端系统中:
scp adcs-winserver-ca.cer root@client1.idm.example.com:/root
[root@idmserver ~]# scp adcs-winserver-ca.cer root@client1.idm.example.com:/root Password: adcs-winserver-ca.cer 100% 1254 952.0KB/s 00:00
Copy 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.cer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CA 证书现在以正确的格式安装在 IdM 服务器和客户端系统中。下一步是将用户证书复制到智能卡本身。
3.4. 转换 PFX 文件 复制链接链接已复制到粘贴板!
在将 PFX(PKCS#12)文件存储到智能卡之前,您必须:
- 将文件转换为 PEM 格式
- 将私钥和证书提取到两个不同的文件
先决条件
- PFX 文件被复制到 IdM 客户端机器中。
流程
在 IdM 客户端上,将文件转换为 PEM 格式:
openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes
[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.key
Copy 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.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此时,您可以将 aduser1.key
和 aduser1.crt
存储到智能卡。
3.5. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书并启动 pscd
服务的对应工具。
先决条件
-
您有
root
权限。
流程
安装
opensc
和gnutls-utils
软件包:yum -y install opensc gnutls-utils
# yum -y install opensc gnutls-utils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd
服务。systemctl start pcscd
# systemctl start pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd
服务是否正在运行:systemctl status pcscd
# systemctl status pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 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
$ 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
$ 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
Copy 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
$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name
Copy 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
$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy 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
$ 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
Copy 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
$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -F
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
3.7. 在 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.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
p11_child_timeout
的值:[pam] p11_child_timeout = 60
[pam] p11_child_timeout = 60
Copy 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 = 60
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存设置。
现在,在验证失败并显示超时前,允许与智能卡的交互运行 1 分钟(60 秒)。
3.8. 为智能卡身份验证创建证书映射规则 复制链接链接已复制到粘贴板!
如果要将一个证书用于 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 的跨林信任中连接
智能卡验证还没有提高管理权限,Web 控制台会在 web 浏览器中以只读模式打开。
您可以使用 sudo
在内置终端中运行管理命令。
先决条件
您要使用智能卡验证的系统必须是 Active Directory 或 Identity Management 域的成员。
有关使用 Web 控制台将 RHEL 8 系统加入到域中的详情,请参阅使用 web 控制台将 RHEL 系统加入到 IdM 域中。
用于智能卡验证的证书必须与身份管理或 Active Directory 中的特定用户关联。
有关在 Identity Management 中将证书与用户关联的详情,请参阅在 IdM Web UI 中的用户条目中添加证书,或将证书添加到 IdM CLI 中的用户条目中。
5.1. 实现中央管理用户的智能卡验证 复制链接链接已复制到粘贴板!
智能卡是一个物理设备,可以使用保存在卡中的证书提供个人验证。个人验证意味着,您可以象使用用户密码一样使用智能卡。
您可以使用私钥和证书的形式在智能卡中保存用户凭证。特殊的软件和硬件可用于访问它们。您可以将智能卡插入到读取器或者 USB 套接字中,并为智能卡提供 PIN 代码,而不是提供密码。
身份管理(IdM)支持使用如下方式的智能卡身份验证:
- IdM 证书颁发机构发布的用户证书。如需了解更多详细信息,请参阅 为智能卡验证配置身份管理。
- Active Directory 证书服务(ADCS)证书颁发机构发布的用户证书。如需了解更多详细信息,请参阅 为 IdM 中的智能卡身份验证配置 ADCS 发布的证书。
如果要开始使用智能卡验证,请参阅RHEL8+ 中的硬件要求:智能卡支持。
5.2. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书并启动 pscd
服务的对应工具。
先决条件
-
您有
root
权限。
流程
安装
opensc
和gnutls-utils
软件包:yum -y install opensc gnutls-utils
# yum -y install opensc gnutls-utils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd
服务。systemctl start pcscd
# systemctl start pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd
服务是否正在运行:systemctl status pcscd
# systemctl status pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 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
$ 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
$ 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
Copy 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
$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name
Copy 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
$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy 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
$ 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
Copy 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
$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -F
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
5.4. 为 web 控制台启用智能卡验证 复制链接链接已复制到粘贴板!
要在 web 控制台中使用智能卡验证,请在 cockpit.conf
文件中启用这个验证方法。
另外,您还可以在同一文件中禁用密码验证。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Terminal。
在
/etc/cockpit/cockpit.conf
中,将ClientCertAuthentication
设置为yes
:[WebService] ClientCertAuthentication = yes
[WebService] ClientCertAuthentication = yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用以下命令禁用
cockpit.conf
中基于密码的身份验证:[Basic] action = none
[Basic] action = none
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个配置禁用了密码验证,且必须总是使用智能卡。
重启 Web 控制台,以确保
cockpit.service
接受更改:systemctl restart cockpit
# systemctl restart cockpit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 使用智能卡登录到 web 控制台 复制链接链接已复制到粘贴板!
您可以使用智能卡登录到 web 控制台。
先决条件
- 保存在智能卡中的有效证书,该证书与 Active Directory 或 Identity Management 域中的用户帐户关联。
- PIN 用于解锁智能卡。
- 已经将智能卡放入读卡器。
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
浏览器要求您添加 PIN 保护保存在智能卡中的证书。
- 在 Password Required 对话框中,输入 PIN 并点 OK。
- 在 User Identification Request 对话框中,选择保存在智能卡中的证书。
选择 Remember this decision。
系统下次打开这个窗口。
注意此步骤不适用于 Google Chrome 用户。
- 点击 OK。
您现在已连接,Web 控制台会显示其内容。
5.6. 限制用户会话和内存以防止 DoS 攻击 复制链接链接已复制到粘贴板!
证书验证被分离和隔离 cockpit-ws
Web 服务器的实例保护,使其免受要模拟其他用户的攻击者的攻击。但是,这可能会引入潜在的拒绝服务(DoS)攻击:远程攻击者可以创建大量证书,并将大量 HTTPS 请求发送到 cockpit-ws
各自使用不同的证书。
为防止此类 DoS 攻击,这些 Web 服务器实例的集体资源是有限的。默认情况下,对连接和内存使用率的限制被设置为 200 个线程,75 % (软)或 90 %(硬)内存限值。
示例流程通过限制连接数和内存演示了资源保护。
流程
在终端中,打开
system-cockpithttps.slice
配置文件:systemctl edit system-cockpithttps.slice
# systemctl edit system-cockpithttps.slice
Copy 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 cockpit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,新内存和用户会话降低了对 cockpit-ws
Web 服务器的 DoS 攻击的风险。
第 6 章 使用本地证书配置智能卡验证 复制链接链接已复制到粘贴板!
要使用本地证书配置智能卡验证:
- 主机没有连接到某个域。
- 您需要在这个主机上使用智能卡进行验证。
- 您需要使用智能卡验证配置 SSH 访问。
-
您需要使用
authselect
配置智能卡。
使用以下配置来实现这种情况:
为希望使用智能卡进行身份验证的用户获取用户证书。证书应该由在域中使用的可信认证认证机构生成。
如果您无法获得证书,您可以生成由本地证书颁发机构签名的用户证书用于测试。
- 在智能卡中保存证书和私钥。
- 为 SSH 访问配置智能卡验证。
如果主机可以作为域的一部分,将主机添加到域中,并使用活动目录或者身份管理认证机构生成的证书。
有关如何为智能卡创建 IdM 证书的详情,请参考为智能卡验证配置身份管理。
先决条件
已安装 authselect
authselect 工具在 Linux 主机中配置用户验证,您可以使用它配置智能卡验证参数。有关 authselect 的详情,请参考浏览 authselect。
RHEL 8 支持的智能卡或者 USB 设备
详情请参阅 RHEL8 中的智能卡支持。
6.1. 创建本地证书 复制链接链接已复制到粘贴板!
按照此流程执行以下任务:
- 生成 OpenSSL 证书颁发机构
- 创建证书签名请求
以下步骤仅用于测试目的。由本地自签名证书颁发机构生成的证书不如使用 AD、IdM 或 RHCS 认证认证机构的安全。即使主机不是域的一部分,您仍应使用企业认证认证机构生成的证书。
流程
创建可生成证书的目录,例如:
mkdir /tmp/ca cd /tmp/ca
# mkdir /tmp/ca # cd /tmp/ca
Copy 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 newcerts
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下文件:
touch index.txt crlnumber index.txt.attr
# touch index.txt crlnumber index.txt.attr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在串行文件中写入数字 01:
echo 01 > serial
# echo 01 > serial
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在串行文件中写入数字 01。它是证书的序列号。当这个 CA 发布一个新证书时这个数字会加一。
创建一个 OpenSSL root CA 密钥:
openssl genrsa -out rootCA.key 2048
# openssl genrsa -out rootCA.key 2048
Copy 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.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的用户名创建密钥:
openssl genrsa -out example.user.key 2048
# openssl genrsa -out example.user.key 2048
Copy 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.csr
Copy 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.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此时,认证颁发机构和证书被成功生成并准备好导入到智能卡。
6.2. 将证书复制到 SSSD 目录中 复制链接链接已复制到粘贴板!
GNOME 桌面管理器(GDM)需要 SSSD。如果使用 GDM,则需要将 PEM 证书复制到 /etc/sssd/pki
目录。
先决条件
- 已生成本地 CA 颁发机构和证书
流程
确保已在系统中安装了 SSSD。
rpm -q sssd
# rpm -q sssd sssd-2.0.0.43.el8_0.3.x86_64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
/etc/sssd/pki
目录:file /etc/sssd/pki
# file /etc/sssd/pki /etc/sssd/pki/: directory
Copy 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.pem
Copy 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 使用专用证书颁发机构证书文件来确保此处仅列出可信的证书颁发机构。
6.3. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书并启动 pscd
服务的对应工具。
先决条件
-
您有
root
权限。
流程
安装
opensc
和gnutls-utils
软件包:yum -y install opensc gnutls-utils
# yum -y install opensc gnutls-utils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd
服务。systemctl start pcscd
# systemctl start pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd
服务是否正在运行:systemctl status pcscd
# systemctl status pcscd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 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
$ 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
$ 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
Copy 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
$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name
Copy 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
$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy 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
$ 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
Copy 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
$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -F
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
6.5. 使用智能卡验证配置 SSH 访问 复制链接链接已复制到粘贴板!
SSH 连接需要身份验证。您可以使用密码或证书。按照以下流程,使用保存在智能卡上的证书启用验证。
有关使用 authselect
配置智能卡的详情,请参考使用 authselect 配置智能卡。
先决条件
- 该智能卡包含您的证书和私钥。
- 该卡插入读卡器并连接到计算机。
pcscd
服务正在您的本地计算机上运行。详情请查看安装用于管理和使用智能卡的工具。
流程
在使用智能卡验证的用户主目录中为 SSH 密钥创建新目录:
mkdir /home/<example_user>/.ssh
# mkdir /home/<example_user>/.ssh
Copy 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_keys
Copy 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_keys
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示密钥:
cat ~<example_user>/.ssh/authorized_keys
# cat ~<example_user>/.ssh/authorized_keys
Copy 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.6. 使用智能卡时创建证书映射规则 复制链接链接已复制到粘贴板!
您需要创建证书映射规则,以便使用保存在智能卡中的证书进行登录。
先决条件
- 该智能卡包含您的证书和私钥。
- 该卡插入读卡器并连接到计算机。
-
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,则 & lt;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 hostname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置成功,会提示您输入智能卡 PIN。
第 7 章 使用 authselect 配置智能卡验证 复制链接链接已复制到粘贴板!
您可以配置智能卡以达到以下目的之一:
- 启用密码和智能卡验证
- 禁用密码并启用智能卡验证
- 在删除时启用锁定
先决条件
authselect
工具已安装在您的系统中authselect
工具在 Linux 主机上配置用户身份验证,您可以使用它来配置智能卡验证参数。有关authselect
的详情,请参考使用 authselect 配置用户身份验证。RHEL 8 支持的智能卡或者 USB 设备
详情请参阅 RHEL8 中的智能卡支持。
7.1. 适用于智能卡的证书 复制链接链接已复制到粘贴板!
在使用 authselect
配置智能卡前,您必须将证书导入您的卡中。您可以使用以下工具生成证书:
- Active Directory(AD)
身份管理(IdM)
有关如何创建 IdM 证书的详情,请参阅请求新用户证书并将其导出到客户端。
红帽认证系统(RHCS)
详情请参阅使用企业安全客户端管理智能卡。
- 第三方认证机构 (CA)
本地认证认证机构。如果用户不是某个域的一部分或用于测试,您可以使用本地认证认证机构生成的证书。
有关如何创建并导入本地证书到智能卡的详情,请参阅配置和导入本地证书到智能卡。
7.2. 配置您的系统以启用智能卡和密码验证 复制链接链接已复制到粘贴板!
按照以下流程,在您的系统上启用智能卡和密码验证。
先决条件
- 智能卡包含您的证书和私钥。
- 在读卡器中插入卡并连接到计算机。
-
authselect
工具已安装在您的系统中。
步骤
输入以下命令允许智能卡和密码验证:
authselect select sssd with-smartcard --force
# authselect select sssd with-smartcard --force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此时,智能卡验证会被启用。但是如果您忘记携带了智能卡,密码验证仍可以正常工作。
7.3. 配置您的系统以强制智能卡验证 复制链接链接已复制到粘贴板!
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 --force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行此命令后,密码验证将无法正常工作,您只能使用智能卡登录。在运行此命令之前,确保智能卡验证正在运行,或者您会被锁定于您的系统。
7.4. 配置智能卡认证,使它在取出智能卡时进行锁定 复制链接链接已复制到粘贴板!
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 --force
Copy 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/whoami
Copy 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/whoami
Copy 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& gt; 中:ipa sudorule-add-host <sudorule_name> --hosts server.ipa.test
# ipa sudorule-add-host <sudorule_name> --hosts server.ipa.test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2. 为 sudo 设置 PAM 模块 复制链接链接已复制到粘贴板!
按照以下步骤,在您运行 sudo
的任何主机上安装并使用智能卡进行 sudo
身份验证的 pam_ssh_agent_auth.so
PAM 模块。
流程
安装 PAM SSH 代理:
dnf -y install pam_ssh_agent_auth
# dnf -y install pam_ssh_agent_auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在任何其他
auth
条目之前,将pam_ssh_agent_auth.so
添加到/etc/pam.d/sudo
文件的authorized_keys_command
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在运行
sudo
命令时启用 SSH 代理转发功能,请将以下内容添加到/etc/sudoers
文件中:Defaults env_keep += "SSH_AUTH_SOCK"
Defaults env_keep += "SSH_AUTH_SOCK"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这允许从存储在 IPA/SSSD 中的智能卡中的公钥在不输入密码的情况下向
sudo
进行身份验证。重启
sssd
服务:systemctl restart sssd
# systemctl restart sssd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3. 使用智能卡远程连接到 sudo 复制链接链接已复制到粘贴板!
按照以下流程,配置 SSH 代理和客户端,以使用智能卡远程连接到 sudo
。
先决条件
-
您已在 IdM 中创建了
sudo
规则。 -
您已为您要在其上运行
sudo
的远程系统上的sudo
身份验证安装并设置了pam_ssh_agent_auth
PAM 模块。
流程
启动 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.so
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用启用了 ssh-agent 转发的 SSH 连接到需要远程运行
sudo
的系统。使用-A
选项:ssh -A ipauser1@server.ipa.test
# ssh -A ipauser1@server.ipa.test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
sudo
运行whoami
命令:sudo /usr/bin/whoami
# sudo /usr/bin/whoami
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
插入智能卡时,不会提示您输入 PIN 或密码。
如果 SSH 代理被配置为使用其他源,如 GNOME Keyring,且您在删除智能卡后运行 sudo
命令,可能不会提示您输入 PIN 或密码,因为其他源可能提供了对有效私钥的访问。要检查 SSH 代理已知的所有身份的公钥,请运行 ssh-add -L
命令。
第 9 章 使用带有智能卡的 PKINIT,以活动目录用户身份进行身份验证 复制链接链接已复制到粘贴板!
活动目录(AD)用户可以使用智能卡对加入到 IdM 的桌面客户端系统进行身份验证,并获取 Kerberos 票据授予票据(TGT)。这些票据可用于客户端的单点登录(SSO)身份验证。
先决条件
- IdM 服务器被配置为智能卡验证。如需更多信息,请参阅 为智能卡验证配置 IdM 服务器,或使用 Ansible 为智能卡验证配置 IdM 服务器。
- 为智能卡验证配置了客户端。如需更多信息,请参阅 为智能卡验证配置 IdM 客户端,或使用 Ansible 为智能卡验证配置 IdM 客户端。
-
已安装
krb5-pkinit
软件包。 - AD 服务器被配置为信任签发智能卡证书的证书颁发机构(CA)。将 CA 证书导入到 NTAuth 存储(请参阅 Microsoft 支持),并将 CA 添加为可信 CA。详情请查看 Active Directory 文档。
步骤
将 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 registry:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以使用
regedit.exe
应用程序手动设置值。- 重启 Windows 系统以应用更改。
在身份管理客户端中使用
kinit
工具进行身份验证。使用用户名和域名指定 Active Directory 用户: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.COM
Copy to Clipboard Copied! Toggle word wrap Toggle overflow X
选项指定opensc-pkcs11.so 模块
作为 pre-authentication 属性。
第 10 章 使用智能卡对身份验证进行故障排除 复制链接链接已复制到粘贴板!
以下流程描述了如何解决设置智能卡验证时可能会遇到的一些问题。
10.1. 测试系统中的智能卡访问 复制链接链接已复制到粘贴板!
按照以下流程测试是否可以访问智能卡。
先决条件
- 已安装并配置了用于智能卡的 IdM 服务器和客户端。
-
您已从
nss-tools
软件包安装了certutil
工具。 - 您有智能卡的 PIN 或密码。
步骤
使用
lsusb
命令,验证智能卡读取器是否在操作系统中看到: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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 RHEL 中经过测试的和支持的智能卡和读卡器的更多信息,请参阅 RHEL 8 中的智能卡支持。
确保
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’
$ su - idmuser1 -c ‘su - idmuser1 -c whoami’ PIN for MyEID (sctest): idmuser1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有提示输入智能卡 PIN,且返回一个密码提示或者返回授权错误,请检查 SSSD 日志。有关登录 SSSD 的信息,请参阅 对 IdM 中使用 SSSD 的身份验证进行故障排除 。以下是身份验证失败的示例:
su - idmuser1 -c ‘su - idmuser1 -c whoami’
$ su - idmuser1 -c ‘su - idmuser1 -c whoami’ PIN for MyEID (sctest): su: Authentication failure
Copy 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
# 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
Copy 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
$ kinit -X X509_user_identity=PKCS11: idmuser1 MyEID (sctest) PIN:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入您的智能卡 PIN。如果没有提示输入 PIN,请检查您是否可检测智能卡读取器并显示智能卡的内容。请参阅测试智能卡验证。
如果您的 PIN 被接受,系统会提示您输入密码,可能会缺少您的 CA 签名证书。
使用
openssl
命令,验证默认证书捆绑包文件中列出的 CA 链:openssl crl2pkcs7 -nocrl -certfile /var/lib/ipa-client/pki/ca-bundle.pem | openssl pkcs7 -print_certs -noout
$ 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
Copy 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
$ 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 PEM
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证证书是否有有效的签发者签名到 CA:
openssl verify -CAfile /var/lib/ipa-client/pki/ca-bundle.pem <path>/cert.pem
$ openssl verify -CAfile /var/lib/ipa-client/pki/ca-bundle.pem <path>/cert.pem cert.pem: OK
Copy 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
$ 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 -A
Copy 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.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的 domain 部分中,如
[domain/idm.example.com]
,添加以下选项:krb5_auth_timeout = 60
krb5_auth_timeout = 60
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
[pam]
部分中,添加以下内容:p11_child_timeout = 60
p11_child_timeout = 60
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 SSSD 缓存:
sssctl cache-remove
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
增加超时后,请尝试使用智能卡再次进行身份验证。如需了解更多详细信息,请参阅测试智能卡验证。
10.5. 证书映射和匹配规则故障排除 复制链接链接已复制到粘贴板!
如果您在使用智能卡验证时遇到问题,请检查您已将智能卡证书正确链接到用户。默认情况下,当用户条目包含完整证书作为 usercertificate
属性的一部分时,会关联一个证书。但是,如果您定义了证书映射规则,您可能已经更改了与用户关联的证书的方式。
如果您通过 SSH 使用智能卡进行验证,则需要将完整证书添加到 Identity Management(IdM)的用户条目中。如果您不使用 SSH 验证智能卡,您可以使用 ipa user-add-certmapdata
命令添加证书映射数据。
10.5.1. 检查证书如何映射到用户 复制链接链接已复制到粘贴板!
默认情况下,当用户条目包含完整证书作为 usercertificate
属性的一部分时,会关联一个证书。但是,如果您定义了证书映射规则,您可能已经更改了与用户关联的证书的方式。按照以下流程检查您的证书映射规则。
先决条件
- 已安装并配置了 Identity Management(IdM)服务器和客户端,用于智能卡。
- 您可以检测智能卡读取器并显示智能卡的内容。请参阅在系统上测试智能卡访问。
- 您已将智能卡证书映射到 IdM 用户。请参阅在智能卡 上配置身份验证的证书映射规则。
步骤
验证当前为 IdM 配置的证书映射规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以看到定义的以下映射规则之一:
-
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
[domain/idm.example.com] ... debug_level = 9
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 SSSD:
systemctl restart sssd
# systemctl restart sssd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果正确读取映射,您应该在
/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]] [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}))].
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的映射规则包含无效的语法,则日志文件中可以看到类似如下的条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查您的映射规则语法。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,修改您的证书映射规则:
ipa certmaprule-mod smartcardrule --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
# ipa certmaprule-mod smartcardrule --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5.2. 检查与智能卡证书关联的用户 复制链接链接已复制到粘贴板!
如果您在使用智能卡进行身份验证时遇到问题,请验证正确的用户是否与您的智能卡证书关联。
先决条件
- 已安装并配置了 Identity Management(IdM)服务器和客户端,用于智能卡。
- 您可以检测智能卡读取器并显示智能卡的内容。请参阅在系统上测试智能卡访问。
- 您已将智能卡证书映射到 IdM 用户。请参阅在智能卡 上配置身份验证的证书映射规则。
-
您有 PEM 格式的智能卡中的证书副本,例如
cert.pem
。
步骤
验证用户是否与您的智能卡证书关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果用户或域不正确,请检查您的证书如何映射到用户。请参阅检查如何将证书映射到用户。
检查用户条目是否包含证书:
ipa user-show idmuser1
# ipa user-show idmuser1 User login: idmuser1 [...] Certificate:MIIEejCCAuKgAwIBAgIBCzANBgkqhkiG9w0BAQsFADAzMREwDwYDVQQKDAhJUEEuVEVTVDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XD
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的用户条目不包含证书,请将您的 base-64 编码证书添加到用户条目中:
创建一个包含证书的环境变量,该变量移除了标头和页脚,并串联成一行,这是
ipa user-add-cert
命令期望的格式:export CERT=`openssl x509 -outform der -in idmuser1.crt | base64 -w0 -`
$ export CERT=`openssl x509 -outform der -in idmuser1.crt | base64 -w0 -`
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
idmuser1.crt
文件中的证书必须采用 PEM 格式。使用
ipa user-add-cert
命令将证书添加到idmuser1
配置集中:ipa user-add-cert idmuser1 --certificate=$CERT
$ ipa user-add-cert idmuser1 --certificate=$CERT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除系统安全服务守护进程(SSSD)缓存。
sssctl cache-remove
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
再次运行
ipa certmap-match
来确认用户与您的智能卡证书关联。