智能卡支持
您可以使用连接到客户端设备的智能卡,在登录 Linux 虚拟桌面会话时进行身份验证。此功能通过 ICA® 智能卡虚拟通道上的智能卡重定向实现。您还可以在会话中使用智能卡。用例包括向文档添加数字签名、加密或解密电子邮件,或者对需要智能卡身份验证的网站进行身份验证。
-
Linux VDA 对此功能使用与 Windows VDA 相同的配置。有关详细信息,请参阅本文中的配置智能卡环境部分。
-
通过使用智能卡进行直通身份验证的可用性取决于以下条件:
- Linux VDA 安装在 RHEL 7.7 上。
- 使用 CoolKey 支持的智能卡。
- 使用适用于 Windows 的 Citrix Workspace™ 应用程序。
注意:
在 Linux VDA 会话中使用映射的智能卡登录 Citrix Gateway 尚未获得官方支持。
在 RHEL 7.7 上安装 Linux VDA 软件
使用 RPM 软件包管理器或轻松安装安装 Linux VDA 软件,请参阅安装概述部分。
VDA 安装完成后,请验证 VDA 是否可以向 Delivery Controller™ 注册,以及已发布的 Linux 桌面会话是否可以使用密码身份验证成功启动。
确保 CoolKey 支持您的智能卡
CoolKey 是 RHEL 上广泛使用的智能卡驱动程序。CoolKey 支持四种类型的智能卡,即 CoolKey 卡、CAC、PIV 和 PKCS#15。但是,正式支持和验证的卡数量仍然有限(请参阅 Red Hat Enterprise Linux 中的智能卡支持)。
在本文中,YubiKey 4 智能卡用作示例来说明配置。YubiKey 4 是一款一体式 USB CCID PIV 设备,可以轻松地从 Amazon 或其他零售商处购买。CoolKey 驱动程序支持 YubiKey 4。

如果您的组织需要其他更高级的智能卡,请准备一台安装了 RHEL 7.7 和 CoolKey 软件包的物理计算机。有关 CoolKey 安装的信息,请参阅安装智能卡驱动程序。插入智能卡,然后运行以下命令以验证 CoolKey 是否支持您的智能卡:
pkcs11-tool --module libcoolkeypk11.so --list-slots
<!--NeedCopy-->
如果 CoolKey 支持您的智能卡,则命令输出类似于以下内容,其中包含插槽信息。
s
配置
准备根证书
根证书用于验证智能卡上的证书。执行以下操作以下载并安装根证书。
-
获取 PEM 格式的根证书,通常来自您的 CA 服务器。
您可以运行类似于以下内容的命令,将 DER 文件(*.crt、*.cer、*.der)转换为 PEM。在以下命令示例中,certnew.cer 是一个 DER 文件。
openssl x509 -inform der -in certnew.cer -out certnew.pem <!--NeedCopy--> -
将根证书安装到
openssl目录。certnew.pem 文件用作示例。cp certnew.pem <path where you install the root certificate> <!--NeedCopy-->要创建用于安装根证书的路径,请运行
sudo mdkir -p <安装根证书的路径>。
配置 NSS 数据库
Linux VDA 登录模块依赖 NSS 数据库来访问智能卡和证书。执行以下操作以配置 NSS 数据库。
-
将前面提到的根证书添加到 NSS 数据库。
certutil -A -n "My Corp Root" -t "CT,C,C" -a -d /etc/pki/nssdb -i /etc/pki/CA/certs/certnew.pem <!--NeedCopy--> -
运行以下命令以验证根证书是否已成功添加到 NSS 数据库。
certutil -L -d /etc/pki/nssdb <!--NeedCopy-->如果根证书添加成功,则命令输出类似于以下内容。

-
检查 CoolKey 是否安装在 NSS PKCS#11 库中。
modutil -list -dbdir /etc/pki/nssdb <!--NeedCopy-->如果 CoolKey 模块已安装,则命令输出类似于以下内容。

如果未安装 CoolKey 模块,请运行以下命令手动安装该模块,然后再次检查安装。
modutil -add "CoolKey PKCS #11 Module" -libfile libcoolkeypk11.so -dbdir /etc/pki/nssdb <!--NeedCopy--> -
配置 pam_pkcs11 模块。
pam_pkcs11 模块依赖本地 VDA 配置来验证用户证书。pam_pkcs11 使用的默认根证书位于 /etc/pam_pkcs11/cacerts/。此路径中的每个根证书都有一个哈希链接。运行以下命令以安装准备好的根证书并配置 pam_pkcs11。
yum install pam_pkcs11 mkdir /etc/pam_pkcs11/cacerts/ cp certnew.pem /etc/pam_pkcs11/cacerts/ cacertdir_rehash /etc/pam_pkcs11/cacerts <!--NeedCopy-->
配置智能卡环境
您可以使用 ctxsmartlogon.sh 脚本配置智能卡环境,也可以手动进行配置。
-
使用 ctxsmartlogon.sh 脚本配置智能卡环境
注意:
ctxsmartlogon.sh 脚本会将 PKINIT 信息添加到默认领域。您可以通过 /etc/krb5.conf 配置文件更改此设置。
首次使用智能卡之前,请运行 ctxsmartlogon.sh 脚本以配置智能卡环境。
提示:
如果您已使用 SSSD 加入域,请在运行 ctxsmartlogon.sh 后重新启动 SSSD 服务。
sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh <!--NeedCopy-->结果类似于以下内容:

您还可以通过运行 ctxsmartlogon.sh 脚本禁用智能卡:
sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh <!--NeedCopy-->结果类似于以下内容:

-
手动配置智能卡环境
Linux VDA 使用与 Windows VDA 相同的智能卡环境。在此环境中,必须配置多个组件,包括域控制器、Microsoft 证书颁发机构 (CA)、Internet Information Services、Citrix StoreFront 和 Citrix Workspace 应用程序。有关基于 YubiKey 4 智能卡的配置信息,请参阅知识中心文章 CTX206156。
-
在继续执行下一步之前,请确保所有组件均已正确配置,私钥和用户证书已下载到智能卡,并且您可以使用智能卡成功登录到 Windows VDA。
安装 PC/SC Lite 软件包
PCSC Lite 是 Linux 中个人计算机/智能卡 (PC/SC) 规范的一种实现。它提供了一个 Windows 智能卡接口,用于与智能卡和读卡器进行通信。Linux VDA 中的智能卡重定向是在 PC/SC 级别实现的。
运行以下命令以安装 PC/SC Lite 软件包。
yum install pcsc-lite pcsc-lite-ccid pcsc-lite-libs
<!--NeedCopy-->
CoolKey 是 RHEL 上广泛使用的智能卡驱动程序。如果未安装 CoolKey,请运行以下命令进行安装。
yum install coolkey
<!--NeedCopy-->
安装用于智能卡身份验证的 PAM 模块
运行以下命令安装 pam_krb5 和 krb5-pkinit 模块。
yum install pam_krb5 krb5-pkinit
<!--NeedCopy-->
pam_krb5 模块是一个可插入身份验证模块,支持 PAM 的应用程序可以使用它来检查密码并从密钥分发中心 (KDC) 获取票证授予票证。krb5-pkinit 模块包含 PKINIT 插件,允许客户端使用私钥和证书从 KDC 获取初始凭据。
配置 pam_krb5 模块
pam_krb5 模块与 KDC 交互,以使用智能卡中的证书获取 Kerberos 票证。要在 PAM 中启用 pam_krb5 身份验证,请运行以下命令:
authconfig --enablekrb5 --update
<!--NeedCopy-->
在 /etc/krb5.conf 配置文件中,根据实际领域添加 PKINIT 信息。
注意:
pkinit_cert_match 选项指定客户端证书在尝试 PKINIT 身份验证之前必须匹配的匹配规则。匹配规则的语法为:
[relation-operator] component-rule …其中
relation-operator可以是&&(表示所有组件规则都必须匹配)或||(表示只有一个组件规则必须匹配)。
以下是通用 krb5.conf 文件的示例:
EXAMPLE.COM = {
kdc = KDC. EXAMPLE.COM
auth_to_local = RULE:[1:$1@$0]
pkinit_anchors = FILE:<path where you install the root certificate>/certnew.pem
pkinit_kdc_hostname = KDC.EXAMPLE.COM
pkinit_cert_match = ||<EKU>msScLogin,<KU>digitalSignature
pkinit_eku_checking = kpServerAuth
}
<!--NeedCopy-->
添加 PKINIT 信息后,配置文件类似于以下内容。

配置 PAM 身份验证
PAM 配置文件说明了用于 PAM 身份验证的模块。要将 pam_krb5 添加为身份验证模块,请将以下行添加到 /etc/pam.d/smartcard-auth 文件中:
auth [success=done ignore=ignore default=die] pam_krb5.so preauth_options=X509_user_identity=PKCS11:/usr/lib64/pkcs11/libcoolkeypk11.so
如果使用 SSSD,修改后的配置文件类似于以下内容。

如果使用 Winbind,修改后的配置文件类似于以下内容。

如果使用 Centrify,修改后的配置文件类似于以下内容。

(可选)使用智能卡进行单点登录
单点登录 (SSO) 是 Citrix 的一项功能,它通过虚拟桌面和应用程序启动实现直通身份验证。此功能可减少用户键入 PIN 的次数。要将 SSO 与 Linux VDA 结合使用,请配置 Citrix Workspace app。此配置与 Windows VDA 相同。有关详细信息,请参阅知识中心文章 CTX133982。
在 Citrix Workspace app 中配置组策略时,按如下方式启用智能卡身份验证。

快速智能卡登录
快速智能卡是对现有基于 HDX PC/SC 的智能卡重定向的改进。它提高了在延迟较高的 WAN 环境中使用智能卡时的性能。有关详细信息,请参阅智能卡。
Linux VDA 支持以下版本的 Citrix Workspace app 上的快速智能卡:
- 适用于 Windows 4.12 的 Citrix Receiver
- 适用于 Windows 1808 及更高版本的 Citrix Workspace app
在客户端上启用快速智能卡登录
快速智能卡登录在 VDA 上默认启用,在客户端上默认禁用。在客户端上,要启用快速智能卡登录,请在关联 StoreFront 站点的 default.ica 文件中包含以下参数:
[WFClient]
SmartCardCryptographicRedirection=On
<!--NeedCopy-->
在客户端上禁用快速智能卡登录
要在客户端上禁用快速智能卡登录,请从关联 StoreFront 站点的 default.ica 文件中删除 SmartCardCryptographicRedirection 参数。
用法
使用智能卡登录 Linux VDA
您可以在 SSO 和非 SSO 场景中使用智能卡登录 Linux VDA。
- 在 SSO 场景中,您将使用缓存的智能卡证书和 PIN 自动登录 StoreFront™。当您在 StoreFront 中启动 Linux 虚拟桌面会话时,PIN 将传递给 Linux VDA 进行智能卡身份验证。
-
在非 SSO 场景中,系统会提示您选择证书并键入 PIN 以登录 StoreFront。

当您在 StoreFront 中启动 Linux 虚拟桌面会话时,将出现一个用于登录 Linux VDA 的对话框,如下所示。用户名从智能卡中的证书中提取,您必须再次键入 PIN 进行登录身份验证。
此行为与 Windows VDA 相同。

使用智能卡重新连接到会话
要重新连接到会话,请确保智能卡已连接到客户端设备。否则,Linux VDA 侧会出现一个灰色缓存窗口并快速退出,因为在未连接智能卡的情况下重新身份验证会失败。在这种情况下,不会提供其他提示来提醒您连接智能卡。
但是,在 StoreFront 侧,如果您在尝试重新连接到会话时未连接智能卡,StoreFront Web 可能会发出如下警报。

限制
智能卡移除策略
Linux VDA 仅使用智能卡移除的默认行为。成功登录 Linux VDA 后移除智能卡时,会话仍保持连接,并且会话屏幕不会锁定。
对其他智能卡和 PKCS#11 库的支持
尽管我们的支持列表中仅列出了 CoolKey 智能卡,但您可以尝试使用其他智能卡和 PKCS#11 库,因为 Citrix 提供了通用的智能卡重定向解决方案。要切换到您的特定智能卡或 PKCS#11 库:
-
将所有
libcoolkeypk11.so实例替换为您的 PKCS#11 库。 -
要将 PKCS#11 库的路径设置为注册表,请运行以下命令:
/opt/Citrix/VDA/bin/ctxreg update -k "HKLM\System\CurrentControlSet\Control\Citrix\VirtualChannels\Scard" -v "PKCS11LibPath" -d "PATH" <!--NeedCopy-->其中 PATH 指向您的 PKCS#11 库,例如 /usr/lib64/pkcs11/libcoolkeypk11.so
-
在客户端上禁用快速智能卡登录。