智能卡
-
登录 Linux 虚拟桌面会话时,您可以使用连接到客户端设备的智能卡进行身份验证。此功能通过 ICA® 智能卡虚拟通道上的智能卡重定向实现。您还可以在会话中使用智能卡。用例包括:
- 向文档添加数字签名
- 加密或解密电子邮件
- 对网站进行身份验证
Linux VDA 对此功能使用与 Windows VDA 相同的配置。有关详细信息,请参阅本文中的配置智能卡环境部分。
注意:
不支持在 Linux VDA 会话中使用映射的智能卡登录 Citrix Gateway。
先决条件
智能卡直通身份验证的可用性取决于以下条件:
-
您的 Linux VDA 可以向 Delivery Controller™ 注册,并且您可以使用 Windows 凭据打开已发布的 Linux 桌面会话。
-
使用 OpenSC 支持的智能卡。有关详细信息,请参阅确保 OpenSC 支持您的智能卡。
确保 OpenSC 支持您的智能卡
OpenSC 是 RHEL 7.4+ 上广泛使用的智能卡驱动程序。作为 CoolKey 的完全兼容替代品,OpenSC 支持多种类型的智能卡(请参阅 Smart Card Support in Red Hat Enterprise Linux)。
本文以 YubiKey 智能卡为例说明配置。YubiKey 是一款一体式 USB CCID PIV 设备,可轻松从 Amazon 或其他零售商处购买。OpenSC 驱动程序支持 YubiKey。
如果您的组织需要其他更高级的智能卡,请准备一台安装了受支持的 Linux 发行版和 OpenSC 软件包的物理计算机。有关 OpenSC 安装的信息,请参阅安装智能卡驱动程序。插入智能卡,然后运行以下命令以验证 OpenSC 是否支持您的智能卡:
pkcs11-tool --module opensc-pkcs11.so --list-slots
<!--NeedCopy-->
配置
准备根证书
根证书用于验证智能卡上的证书。完成以下步骤以下载并安装根证书。
-
获取 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 <path where you install the root certificate>。
配置智能卡环境
您可以使用 ctxsmartlogon.sh 脚本配置智能卡环境,也可以手动完成配置。
(选项 1)使用 ctxsmartlogon.sh 脚本配置智能卡环境
注意:
ctxsmartlogon.sh 脚本会将 PKINIT 信息添加到默认领域。您可以通过 /etc/krb5.conf 配置文件更改此设置。
首次使用智能卡之前,请运行 ctxsmartlogon.sh 脚本以配置智能卡环境。
提示:
如果您已使用 SSSD 进行域加入,请在运行 ctxsmartlogon.sh 后重新启动 SSSD 服务。 对于 RHEL 8 及更高版本,由于 PAM_KRB5 已移至 EPEL 存储库,因此该脚本将尝试在这些发行版中启用 EPEL。
sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->
结果类似于以下内容:

注意:
如果您使用 Quest 作为域加入方法,则需要指定密钥分发中心 (KDC) 的主机名。例如:
您还可以通过运行 ctxsmartlogon.sh 脚本禁用智能卡:
sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->
结果类似于以下内容:

(选项 2)手动配置智能卡环境
Linux VDA 使用与 Windows VDA 相同的智能卡环境。在该环境中,必须配置多个组件,包括域控制器、Microsoft 证书颁发机构 (CA)、Internet Information Services、Citrix StoreFront 和 Citrix Workspace 应用程序。有关基于 YubiKey 智能卡的配置信息,请参阅知识中心文章 CTX206156。
在进入下一步之前,请确保:
- 您已正确配置所有组件。
- 您已将私钥和用户证书下载到智能卡。
- 您可以使用智能卡成功登录 VDA。
安装 PC/SC Lite 软件包
PCSC Lite 是 Linux 中个人计算机/智能卡 (PC/SC) 规范的一种实现。它提供了一个 Windows 智能卡接口,用于与智能卡和读卡器进行通信。Linux VDA 中的智能卡重定向是在 PC/SC 级别实现的。
运行以下命令安装 PC/SC Lite 软件包:
RHEL 9.4/9.2/8.x、Rocky Linux 9.4/9.2/8.x:
yum install pcsc-lite pcsc-lite-ccid pcsc-lite-libs
<!--NeedCopy-->
Ubuntu 24.04、Ubuntu 22.04、Ubuntu 20.04、Debian 12.7、Debian 12.5、Debian 11.11:
apt-get install -y libpcsclite1 libccid
<!--NeedCopy-->
安装智能卡驱动程序
OpenSC 是一种广泛使用的智能卡驱动程序。如果未安装 OpenSC,请运行以下命令进行安装:
RHEL 9.4/9.2/8.x、Rocky Linux 9.4/9.2/8.x:
yum install opensc
<!--NeedCopy-->
Ubuntu 24.04、Ubuntu 22.04、Ubuntu 20.04、Debian 12.7、Debian 12.5、Debian 11.11:
apt-get install -y opensc
<!--NeedCopy-->
运行以下命令安装 pam_krb5 和 krb5-pkinit 模块。
RHEL 9.4/9.2/8.x、Rocky Linux 9.4/9.2/8.x:
yum install krb5-pkinit
<!--NeedCopy-->
Ubuntu 24.04、Ubuntu 22.04、Ubuntu 20.04:
apt-get install libpam-krb5 krb5-pkinit
<!--NeedCopy-->
Debian 12.7、Debian 12.5、Debian 11.11:
apt-get install -y libpam-krb5 krb5-pkinit
<!--NeedCopy-->
pam_krb5 模块是一个可插拔身份验证模块。支持 PAM 的应用程序可以使用 pam_krb5 检查密码并从密钥分发中心 (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:<path to the pkcs11 driver>/opensc-pkcs11.so
如果使用 SSSD,修改后的配置文件如下所示。

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

快速智能卡登录
快速智能卡是对现有基于 HDX PC/SC 的智能卡重定向的改进。当智能卡在高延迟 WAN 环境中使用时,它提高了性能。有关详细信息,请参阅智能卡。
Linux VDA 支持在以下版本的 Citrix Workspace 应用程序上使用快速智能卡:
- Citrix Receiver for Windows 4.12
- Citrix Workspace 应用程序 1808 for Windows 及更高版本
在客户端上启用快速智能卡登录
快速智能卡登录在 VDA 上默认启用,在客户端上默认禁用。在客户端上,要启用快速智能卡登录,请在关联的 StoreFront 站点的 default.ica 文件中包含以下参数:
[WFClient]
SmartCardCryptographicRedirection=On
<!--NeedCopy-->
在客户端上禁用快速智能卡登录
要在客户端上禁用快速智能卡登录,请从关联的 StoreFront 站点的 default.ica 文件中删除 SmartCardCryptographicRedirection 参数。
运行 XDPing
完成上述步骤后,您可以使用 Linux XDPing 工具检查 Linux VDA 环境中可能存在的常见配置问题。
用法
使用智能卡登录到 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 发行版和 AD 集成方法的支持
-
智能卡直通身份验证支持有限的 Linux 发行版和 AD 集成方法。请参阅以下矩阵:
Winbind SSSD Centrify Quest Debian 12.7/12.5/11.11 Yes Yes Yes No RHEL 9.4/9.2 Yes Yes No Yes RHEL 8.10/8.8 Yes Yes Yes Yes Rocky Linux 9.4/9.2 Yes Yes No No Rocky Linux 8.10/8.8 Yes Yes No No Ubuntu 24.04 Yes Yes No No Ubuntu 22.04/20.04 Yes Yes Yes Yes
智能卡移除设置
要指定在会话期间从智能卡读卡器中移除已登录用户的智能卡时的行为,请在 Linux VDA 上编辑以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\LocalPolicies\SecurityOptions
| 值名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| SCardRemoveOption | REG_DWORD | 0x00000000 | 此设置确定在会话期间从智能卡读卡器中移除已登录用户的智能卡时发生的情况。选项如下: |
| 0 无操作 | |||
| 1 强制注销:移除智能卡后,用户将自动注销。 | |||
| 2 断开会话连接:移除智能卡后,会话将断开连接,而不会注销用户。用户可以稍后重新插入智能卡以重新连接会话。 | |||
| SCardRemoveActionDelaySeconds | REG_DWORD | 15 | 如果移除选项设置为强制注销或断开会话连接,您可以进一步指定操作发生前的几秒延迟。使用此设置,在移除智能卡后,用户会话中将出现一个消息框,指示会话将在指定秒数后强制注销或断开连接。如果您在此时间之前重新插入智能卡,会话将不中断地继续。 |
限制
Linux VDA 一次仅支持一个智能卡读卡器。
对其他智能卡和 PKCS#11 库的支持
Citrix 提供了一个通用的智能卡重定向解决方案。尽管我们的支持列表中只列出了 OpenSC 智能卡,您可以尝试使用其他智能卡和 PKCS#11 库。要切换到您的特定智能卡或 PKCS#11 库:
-
将所有
opensc-pkcs11.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/opensc-pkcs11.so -
在客户端上禁用快速智能卡登录。
