智能卡
登录 Linux Virtual Desktop 会话时,可以使用连接到客户端设备的智能卡进行身份验证。 此功能是通过 ICA 智能卡虚拟通道进行的智能卡重定向实现的。 还可以在会话中使用智能卡。 用例包括:
- 向文档添加数字签名
- 加密或解密电子邮件
- 对 Web 站点进行身份验证
对于此功能,Linux VDA 使用与 Windows VDA 相同的配置。 有关详细信息,请参阅本文中的配置智能卡环境部分。
注意:
不支持在 Linux VDA 会话中使用映射的智能卡登录 Citrix Gateway。
必备条件
智能卡直通身份验证的可用性取决于以下条件:
-
您的 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-->
配置
准备根证书
根证书用于验证智能卡上的证书。 完成以下步骤以下载并安装根证书。
-
获取 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 <安装了根证书的路径>
。
配置智能卡环境
可以使用 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 是个人计算机/智能卡 (PC/SC) 规范在 Linux 中的实现。 它提供与智能卡和读卡器进行通信的 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 模块
运行以下命令安装 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 模块包含允许客户端使用私钥和证书从 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信息后,该配置文件将如下所示。
配置 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 码的次数。 要将 SSO 与 Linux VDA 集合使用,请配置 Citrix Workspace 应用程序。 配置与 Windows VDA 相同。 有关详细信息,请参阅知识中心文章 CTX133982。
在 Citrix 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 参数。
运行 XDPing
完成上述步骤后,可以使用 Linux XDPing 工具检查 Linux VDA 环境中可能存在的常见配置问题。
使用情况
使用智能卡登录 Linux VDA
可以在 SSO 和非 SSO 场景中使用智能卡登录 Linux VDA。
- 在 SSO 场景中,您将使用缓存的智能卡证书和 PIN 码自动登录 StoreFront。 在 StoreFront 中启动 Linux Virtual Desktop 会话时,PIN 码将传递到 Linux VDA 以进行智能卡身份验证。
-
在非 SSO 场景中,系统将提示您选择证书并键入 PIN 码以登录 StoreFront。
在 StoreFront 中启动 Linux Virtual Desktop 会话时,将显示 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 是 是 是 否 RHEL 9.4/9.2 是 是 否 是 RHEL 8.10/8.8 是 是 是 是 Rocky Linux 9.4/9.2 是 是 否 否 Rocky Linux 8.10/8.8 是 是 否 否 Ubuntu 24.04/22.04/20.04 是 是 是 是
智能卡移除设置
要指定在会话期间从智能卡读卡器中移除已登录用户的智能卡时的行为,请在 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
-
在客户端上禁用快速智能卡登录。