Linux Virtual Delivery Agent

智能卡

  • 当登录 Linux 虚拟桌面会话时,您可以使用连接到客户端设备的智能卡进行身份验证。此功能通过 ICA® 智能卡虚拟通道上的智能卡重定向实现。您还可以在会话中使用智能卡。用例包括:

  • 为文档添加数字签名
  • 加密或解密电子邮件
  • 对网站进行身份验证

Linux VDA 为此功能使用与 Windows VDA 相同的配置。有关详细信息,请参阅本文中的配置智能卡环境部分。

  • 注意:

    不支持在 Linux VDA 会话中使用映射的智能卡登录 Citrix Gateway。

对有限的 Linux 发行版和 AD 集成方法的支持

  • 智能卡直通身份验证支持有限的 Linux 发行版和 AD 集成方法。请参阅以下矩阵:

      Winbind SSSD Centrify Quest
    Debian 12.12
    Debian 13
    RHEL 10/9.7/9.6/9.4
  • RHEL 8.10
  • Rocky Linux 10/9.7/9.6/9.4
    Rocky Linux 8.10
    Ubuntu 24.04
    Ubuntu 22.04

先决条件

智能卡直通身份验证的可用性取决于以下条件:

  • 您的 Linux VDA 可以向 Delivery Controller™ 注册,并且您可以使用 Windows 凭据打开已发布的 Linux 桌面会话。

  • 使用 OpenSC 支持的智能卡。有关详细信息,请参阅确保 OpenSC 支持您的智能卡

确保 OpenSC 支持您的智能卡

OpenSC 是 RHEL 7.4+ 上广泛使用的智能卡驱动程序。作为 CoolKey 的完全兼容替代品,OpenSC 支持多种类型的智能卡(请参阅 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-->

配置

准备根证书

根证书用于验证智能卡上的证书。完成以下步骤以下载并安装根证书。

  1. 获取 PEM 格式的根证书,通常来自您的 CA 服务器。

    您可以运行类似于以下内容的命令将 DER 文件(*.crt、*.cer、*.der)转换为 PEM。在以下命令示例中,certnew.cer 是一个 DER 文件。

    openssl x509 -inform der -in certnew.cer -out certnew.pem
    <!--NeedCopy-->
    
  2. 将根证书安装到 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-->

结果类似于以下内容:

运行 ctxsmartlogon.sh 脚本并选择“是”

注意:

如果您使用 Quest 作为域加入方法,则需要指定密钥分发中心 (KDC) 的主机名。例如:

需要指定 KDC 的主机名

您还可以通过运行 ctxsmartlogon.sh 脚本禁用智能卡:

sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->

结果类似于以下内容:

运行 ctxsmartlogon.sh 脚本并选择“否”

(选项 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.x/8.x、Rocky Linux 9.x/8.x:

yum install pcsc-lite pcsc-lite-ccid pcsc-lite-libs
<!--NeedCopy-->

Ubuntu 24.04、Ubuntu 22.04、Debian 12.x、Debian 11.11:

apt-get install -y libpcsclite1 libccid
<!--NeedCopy-->
安装智能卡驱动程序

OpenSC 是一种广泛使用的智能卡驱动程序。如果未安装 OpenSC,请运行以下命令进行安装:

RHEL 9.x/8.x、Rocky Linux 9.x/8.x:

yum install opensc
<!--NeedCopy-->

Ubuntu 24.04、Ubuntu 22.04、Debian 12.x、Debian 11.11:

-  apt-get install -y opensc
<!--NeedCopy-->
安装用于智能卡身份验证的 PAM 模块

运行以下命令安装 pam_krb5 和 krb5-pkinit 模块。

RHEL 9.x/8.x、Rocky Linux 9.x/8.x:

yum install krb5-pkinit
<!--NeedCopy-->

Ubuntu 24.04、Ubuntu 22.04:

apt-get install libpam-krb5 krb5-pkinit
<!--NeedCopy-->

Debian 12.x、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 信息后,配置文件如下所示。

已添加 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,修改后的配置文件如下所示。

如果使用 SSSD,则修改后的配置文件

(可选)使用智能卡进行单点登录

单点登录 (SSO) 是 Citrix 的一项功能,通过虚拟桌面和应用程序启动实现直通身份验证。此功能减少了用户键入 PIN 的次数。要将 SSO 与 Linux VDA 结合使用,请配置 Citrix Workspace 应用程序。配置与 Windows VDA 相同。有关详细信息,请参阅知识中心文章 CTX133982

在 Citrix Workspace™ 应用程序中配置组策略时,请按如下方式启用智能卡身份验证。

在 Workspace 应用程序中启用智能卡身份验证

快速智能卡登录

快速智能卡是对现有基于 HDX PC/SC 的智能卡重定向的改进。当智能卡用于高延迟 WAN 环境时,它能提高性能。有关详细信息,请参阅智能卡

Linux VDA 支持以下版本的 Citrix Workspace 应用程序上的快速智能卡:

  • 适用于 Windows 的 Citrix Receiver 4.12
  • 适用于 Windows 的 Citrix Workspace 应用程序 1808 及更高版本

在客户端上启用快速智能卡登录

快速智能卡登录在 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。

    键入 PIN 以登录到 StoreFront

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

此行为与 Windows VDA 相同。

登录身份验证

使用智能卡重新连接会话

要重新连接会话,请确保智能卡已连接到客户端设备。否则,Linux VDA 端将出现一个灰色缓存窗口并快速退出,因为未连接智能卡会导致重新身份验证失败。在这种情况下,不会提供其他提示来提醒您连接智能卡。

但是,在 StoreFront 端,如果您在重新连接会话时未连接智能卡,StoreFront Web 可能会发出如下警报:

插入智能卡

限制

智能卡移除设置

要在会话期间从智能卡读卡器中移除已登录用户的智能卡时指定行为,请在 Linux VDA 上编辑以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\LocalPolicies\SecurityOptions

值名称 类型 默认值 描述
SCardRemoveOption REG_DWORD 0x00000000 此设置确定在会话期间从智能卡读卡器中移除已登录用户的智能卡时发生的情况。选项如下。
0 无操作
1 强制注销:移除智能卡后,用户将自动注销。
2 断开会话连接:移除智能卡后,会话将断开连接,而不会注销用户。用户可以稍后重新插入智能卡以重新连接会话。
3 锁定工作站:虚拟桌面将被锁定。用户可以随后重新插入智能卡并输入 PIN 码以解锁屏幕。
SCardRemoveActionDelaySeconds REG_DWORD 15 如果移除选项设置为强制注销断开会话连接,您可以进一步指定操作发生前的延迟时间(以秒为单位)。通过此设置,智能卡移除后,用户会话中将出现一个消息框,指示会话将在指定秒数后强制注销或断开连接。如果您在此时间之前重新插入智能卡,会话将继续而不中断。

限制

Linux VDA 仅支持一次一个智能卡读卡器。

对其他智能卡和 PKCS#11 库的支持

Citrix 提供了一个通用的智能卡重定向解决方案。尽管我们的支持列表中只列出了 OpenSC 智能卡,但您可以尝试使用其他智能卡和 PKCS#11 库。要切换到您的特定智能卡或 PKCS#11 库:

  1. 将所有 opensc-pkcs11.so 实例替换为您的 PKCS#11 库。

  2. 要将您的 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

  3. 在客户端上禁用快速智能卡登录。