智能卡

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

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

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

注意:

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

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

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

      威班德 埃斯埃斯埃斯迪 森特里菲 奎斯特
    德比安 12.12
    德比安 13
    红帽企业版 Linux 10/9.7/9.6/9.4
    RHEL 8.10
    洛基 操作系统 10/9.7/9.6/9.4
    洛基 操作系统 8.10
    乌班图 24.04
    乌班图 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 脚本,并选择不启用智能卡登录(/zh-cn/linux-virtual-delivery-agent/2511/media/smart-card-logon-script2.png)

(选项 2)手动配置智能卡环境

Linux VDA 使用与 Windows VDA 相同的智能卡环境。在此环境中,必须配置多个组件,包括域控制器、Microsoft 证书颁发机构 (CA)、Internet 信息服务、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 模块。

红帽企业版 Linux 9.x/8.x 以及 Rocky Linux 9.x/8.x 操作系统版本:

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

乌班图 24.04 以及 乌班图 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] 组件规则…

其中 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 的次数。要在 Linux VDA 上使用 SSO,请配置 Citrix Workspace 应用程序。配置与 Windows VDA 相同。有关详细信息,请参阅知识中心文章 CTX133982

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

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

快速智能卡登录

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

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

  • 适用于 Windows 平台的 思杰接收器 4.12
  • 适用于 Windows 平台的 思杰工作区应用程序 1808 及更高版本

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

快速智能卡登录在 VDA 上默认启用,在客户端上默认禁用。在客户端上,要启用快速智能卡登录,请在关联 StoreFront 站点的 default.ica 文件中包含以下参数:

[WFClient]
SmartCardCryptographicRedirection=On
<!--NeedCopy-->

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

To disable fast smart card logon on the client, remove the SmartCardCryptographicRedirection parameter from the default.ica file of the associated StoreFront site.

Run XDPing

完成上述步骤后,您可以使用 Linux XDPing 工具检查 Linux VDA 环境中可能存在的常见配置问题。

用法

使用智能卡登录 Linux VDA

您可以在 SSO 和非 SSO 场景中使用智能卡登录 Linux VDA。

  • 在 SSO 场景中,您将使用缓存的智能卡证书和 PIN 自动登录 StoreFront™。当您在 StoreFront 中启动 Linux 虚拟桌面会话时,PIN 将传递给 Linux VDA 进行智能卡身份验证。
  • 在非 SSO 场景中,系统会提示您选择证书并输入 PIN 以登录 StoreFront。

    输入个人识别码以登录 StoreFront

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

此行为与 Windows VDA 的行为相同。

登录身份验证

使用智能卡重新连接会话

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

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

插入智能卡

局限性

智能卡移除设置

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

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

值名称 类型 默认值 Description
SCardRemoveOption REG_DWORD 0x00000000 此设置确定在会话期间从智能卡读卡器中移除已登录用户的智能卡时会发生什么。选项如下。
0 无操作
1 强制注销:智能卡移除后,用户将自动注销。
2 断开会话:智能卡移除后,会话将断开连接,但用户不会注销。用户可以稍后重新插入智能卡以重新连接会话。
3 锁定工作站:虚拟桌面被锁定。用户随后可以重新插入智能卡并输入 PIN 码以解锁屏幕。
SCardRemoveActionDelaySeconds 注册表双字 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. 在客户端禁用快速智能卡登录。