Linux Virtual Delivery Agent

智能卡

登录 Linux Virtual Desktop 会话时,可以使用连接到客户端设备的智能卡进行身份验证。此功能是通过 ICA 智能卡虚拟通道进行的智能卡重定向实现的。还可以在会话中使用智能卡。用例包括向文档中添加数字签名、加密或解密电子邮件以及向 Web 站点进行身份验证。

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

注意:

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

必备条件

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

  • 您的 Linux VDA 安装在下面其中一个发行版中:

    • RHEL 8
    • RHEL 7/CentOS 7
    • Rocky Linux 8
    • Ubuntu 22.04
    • Ubuntu 20.04
    • Ubuntu 18.04
    • Debian 11.3
    • Debian 10.9

    完成安装 VDA 后,请验证您的 VDA 是否能够在 Delivery Controller 中注册,以及是否能够使用 Windows 凭据打开已发布的 Linux 桌面会话。

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

  • 使用 Citrix Workspace for Windows 的应用程序。

确保 OpenSC 支持智能卡

OpenSC 是 RHEL 7.4+ 上广泛使用的智能卡驱动程序。作为 CoolKey 的完全兼容替代品,OpenSC 支持多种类型的智能卡(请参阅 Red Hat Enterprise Linux 中的智能卡)。

在本文中,YubiKey 4 智能卡用作阐明配置的示例。YubiKey 4 是一个通用 USB CCID PIV 设备,可以很容易地从 Amazon 或其他零售供应商处购买。OpenSC 驱动程序支持 YubiKey 4。

Yubikey4

如果贵组织需要某些其他更高级的智能卡,请准备一台安装了 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>

在 RHEL 8 和 Rocky Linux 8 上构建 pam_krb5 模块

智能卡身份验证依赖于 pam_krb5 模块,该模块在 RHEL 8 和 Rocky Linux 8 上已弃用。要在 RHEL 8 和 Rocky Linux 8 上使用智能卡身份验证,请按如下所示构建 pam_krb5 模块:

  1. https://centos.pkgs.org/7/centos-x86_64/pam_krb5-2.4.8-6.el7.x86_64.rpm.html 下载 pam_krb5-2.4.8-6 源代码。

  2. 在 RHEL 8 和 Rocky Linux 8 上构建并安装 pam_krb5 模块。

    yum install -y opensc pcsc-lite pcsc-lite-libs pcsc-lite-ccid nss-tools
    yum install gcc krb5-devel pam-devel autoconf libtool
    rpm2cpio pam_krb5-2.4.8-6.el7.src.rpm | cpio –div
    tar xvzf pam_krb5-2.4.8.tar.gz
    cd pam_krb5-2.4.8
    ./configure --prefix=/usr
    make
    make install
    <!--NeedCopy-->
    
  3. 验证 pam_krb5.so 是否存在于 /usr/lib64/security/ 下。

    ls -l /usr/lib64/security | grep pam_krb5
    <!--NeedCopy-->
    

配置智能卡环境

可以使用 ctxsmartlogon.sh 脚本配置智能卡环境或手动完成配置。

(选项 1)使用 ctxsmartlogon.sh 脚本配置智能卡环境

注意:

ctxsmartlogon.sh 脚本将 PKINIT 信息添加到默认领域。可以通过 /etc/krb5.conf 配置文件更改此设置。

首次使用智能卡之前,请运行 ctxsmartlogon.sh 脚本以配置智能卡环境。

提示:

如果已使用 SSSD 加入域,请在运行 ctxsmartlogon.sh 后重新启动该 SSSD 服务。

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

结果类似于以下内容:

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

此外,您还可以通过运行 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 4 智能卡的配置信息,请参阅知识中心文章 CTX206156

继续执行下个步骤之前,请确保您已正确配置所有组件并将私钥和用户证书下载到智能卡,并且您能够使用智能卡成功登录 Windows VDA。

安装 PC/SC Lite 软件包

PCSC Lite 是个人计算机/智能卡 (PC/SC) 规范在 Linux 中的实现。它提供与智能卡和读卡器进行通信的 Windows 智能卡接口。Linux VDA 中的智能卡重定向是在 PC/SC 级别实现的。

运行以下命令可安装 PC/SC Lite 软件包:

RHEL 8、Rocky Linux 8、RHEL 7/CentOS 7:

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

Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04、Debian 11.3、Debian 10.9:

apt-get install -y libpcsclite1 libccid
<!--NeedCopy-->
安装智能卡读卡器

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

RHEL 8、Rocky Linux 8、RHEL 7/CentOS 7:

yum install opensc
<!--NeedCopy-->

Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04、Debian 11.3、Debian 10.9:

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

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

RHEL 7/CentOS 7:

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

RHEL 8、Rocky Linux 8:

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

Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04:

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

Debian 11.3、Debian 10.9:

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

pam_krb5 模块是可插入身份验证模块,可识别 PAM 的应用程序可以使用它来检查密码以及从密钥发行中心 (KDC) 获取票据授予票据。krb5-pkinit 模块包含允许客户端使用私钥和证书从 KDC 获取初始凭据的 PKINIT 插件。

配置 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 应用程序中使用快速智能卡:

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

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

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

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

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

要在客户端上禁用快速智能卡登录,请从关联的 StoreFront 站点的 default.ica 文件中删除 SmartCardCryptographicRedirection 参数。

使用情况

使用智能卡登录 Linux VDA

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

  • 在 SSO 场景中,您将使用缓存的智能卡证书和 PIN 码自动登录 StoreFront。在 StoreFront 中启动 Linux Virtual Desktop 会话时,PIN 码将传递到 Linux VDA 以进行智能卡身份验证。
  • 在非 SSO 场景中,系统将提示您选择证书并键入 PIN 码以登录 StoreFront。

    键入 PIN 码以登录 StoreFront

在 StoreFront 中启动 Linux Virtual Desktop 会话时,将显示 Linux VDA 登录对话框,如下所示。用户名是从智能卡中的证书中提取的,必须重新键入 PIN 码以进行登录身份验证。

此行为与 Windows VDA 相同。

登录身份验证

使用智能卡重新连接到会话

请务必将智能卡连接到客户端设备,才能重新连接到会话。否则,Linux VDA 端将显示一个灰色缓存窗口,并快速退出,因为重新身份验证在未连接智能卡的情况下失败。在这种情况下,系统不提供任何其他提示以提醒您连接智能卡。

但是,在 StoreFront 端,如果尝试重新连接到会话时未连接智能卡,StoreFront Web 可能会按如下所示提供警报。

插入智能卡示意图

限制

智能卡移除策略

现在,Linux VDA 对智能卡移除仅使用默认行为。成功登录 Linux VDA 后移除智能卡时,会话保持连接,并且会话屏幕不锁定。

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

虽然我们的支持列表中仅列出了 OpenSC 智能卡,但是您可以尝试使用其他智能卡和 PKCS#11 库,因为 Citrix 提供通用智能卡重定向解决方案。要切换到特定的智能卡或 PKCS#11 库,请执行以下操作:

  1. 使用 PKCS#11 库替换所有 opensc-pkcs11.so 实例。

  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. 在客户端上禁用快速智能卡登录。

智能卡