Product Documentation

使用智能卡进行直通身份验证

Feb 26, 2018

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

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

使用智能卡进行直通身份验证的可用性取决于以下因素:

  • Linux VDA 安装在 RHEL 7.3 上。 
  • SSSD 用于 AD 集成。
  • 使用 CoolKey 支持的智能卡。
  • 使用 Citrix Receiver for Windows。

注意

对 NetScaler Gateway 进行智能卡身份验证不受官方支持。 

确保 CoolKey 支持智能卡

CoolKey 是 RHEL 上广泛使用的智能卡驱动程序。CoolKey 支持四种类型的智能卡,即 CoolKey 卡、CAC、PIV 和 PKCS#15,但正式支持并通过验证的卡的数量仍受到限制【请参阅 Smart Card Support in Red Hat Enterprise Linux(Red Hat Enterprise Linux 中的智能卡支持)】。 

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

localized image

如果贵组织需要某些其他更高级的智能卡,请准备一台安装了 RHEL 7.3 和 CoolKey 软件包的物理机(有关 CoolKey 安装的信息,请参阅安装智能卡驱动程序),插入智能卡,然后运行以下命令以验证智能卡是否受 CoolKey 支持:

命令 复制

pkcs11-tool --module libcoolkeypk11.so --list-slots

如果 CoolKey 支持智能卡,命令输出将与下面包含插槽信息的内容类似。

localized image

配置

配置智能卡环境

Linux VDA 使用与 Windows VDA 相同的智能卡环境。在该环境中,必须配置多个组件,包括域控制器、Microsoft 证书颁发机构 (CA)、Internet Information Services、Citrix StoreFront 和 Citrix Receiver。有关与基于 Yubikey 4 智能卡的配置有关的信息,请参阅 Citrix 文章 CTX206156。 

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

安装 PC/SC Lite 软件包

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

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

命令 复制

yum install pcsc-lite pcsc-lite-ccid pcsc-lite-libs

安装智能卡读卡器

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

命令 复制

yum install coolkey

安装用于智能卡重定向的 PAM 模块

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

命令 复制

yum install pam_pkcs11 pam_krb5 krb5-pkinit

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

在 RHEL 7.3 上安装 Linux VDA 软件

使用 RPM 软件包管理器或轻松安装功能安装 Linux VDA 软件,请参阅安装概述部分。确保选择 SSSD 作为 Active Directory (AD) 集成方法。 

VDA 安装完成后,请验证 VDA 是否能够在 Delivery Controller 中注册,以及已发布的 Linux 桌面会话是否能够使用密码身份验证成功启动。

准备根证书

根证书用于验证智能卡中的证书。请执行以下操作以下载并安装根证书。

1. 获取 PEM 格式的根证书,通常从 CA 服务器中获取。

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

命令 复制

openssl x509 -inform der -in certnew.cer -out certnew.pem

2. 在 openssl 目录中安装根证书。certnew.pem 文件用作示例。

命令 复制

cp certnew.pem /etc/pki/CA/certs/

配置 NSS 数据库

pam_pkcs11 模块依赖 NSS 数据库来访问智能卡和证书。请执行以下操作以配置 NSS 数据库。

1. 将上文提及的根证书添加到 NSS 数据库中。

命令 复制

certutil -A -n "My Corp Root" -t "CT,C,C" -a -d /etc/pki/nssdb -i  /etc/pki/CA/certs/certnew.pem

2. 运行以下命令以验证根证书是否已成功添加到 NSS 数据库中。

命令 复制

certutil -L -d /etc/pki/nssdb

如果已成功添加根证书,命令输出将如下所示。

localized image

3. 检查 CoolKey 是否已安装在 NSS PKCS#11 库中。

命令 复制

modutil -list -dbdir /etc/pki/nssdb

如果已安装 CoolKey 模块,命令输出将如下所示。 

localized image

如果未安装 CoolKey 模块,请运行以下命令以手动安装,然后重新检查安装。

命令 复制

modutil -add "CoolKey PKCS #11 Module" -libfile libcoolkeypk11.so -dbdir /etc/pki/nssdb

配置 pam_pkcs11 模块

pam_pkcs11 模块依赖(VDA 的)本地配置来验证用户证书。pam_pkcs11 使用的默认根证书位于 /etc/pam_pkcs11/cacerts/。此路径中的每个根证书都有一个哈希链接。请运行以下命令以安装准备好的根证书并配置 pam_pkcs11。

命令 复制

mkdir /etc/pam_pkcs11/cacerts/

cp certnew.pem /etc/pam_pkcs11/cacerts/

cacertdir_rehash /etc/pam_pkcs11/cacerts

配置 pam_krb5 模块

pam_krb5 模块与 KDC 交互以使用智能卡中的证书获取 Kerberos 票证。 

/etc/krb5.conf 配置文件中,根据实际的领域添加 pkinit 信息。

     EXAMPLE.COM = {

       kdc = KDC. EXAMPLE.COM

       pkinit_anchors = FILE:/etc/pki/CA/certs/certnew.pem

       pkinit_kdc_hostname = KDC.EXAMPLE.COM

       pkinit_cert_match = ||msScLogin,digitalSignature

       pkinit_eku_checking = kpServerAuth

 }     

添加 pkinit 信息后,该配置文件将如下所示。

localized image

配置 PAM 身份验证

PAM 配置文件指示用于 PAM 身份验证的模块。对于智能卡身份验证,请向 /etc/pam.d/smartcard-auth 文件中添加以下行以添加 pam_pkcs11 和 pam_krb5 模块。

     auth        [success=ok ignore=2 default=die] pam_pkcs11.so nodebug wait_for_card     

     auth        optional      pam_krb5.so use_first_pass no_subsequent_prompt preauth_options=X509_user_identity=PKCS11:/usr/lib64/pkcs11/libcoolkeypk11.so

     auth        sufficient    pam_permit.so

     account     [default=bad success=ok auth_err=ignore user_unknown=ignore ignore=ignore] pam_krb5.so

     session     optional      pam_krb5.so   

修改后,该配置文件将如下所示。

localized image

(可选)配置通过智能卡进行的单点登录

单点登录 (SSO) 是一项 Citrix 功能,用于实现对虚拟桌面和应用程序启动的直通身份验证。此功能降低了用户输入其 PIN 码的次数。要在 Linux VDA 中使用 SSO,请配置 Citrix Receiver。配置与 Windows VDA 相同。有关详细信息,请参阅 Citrix 文章 CTX133982

在 Citrix Receiver 中配置组策略时,请按如下所示启用智能卡身份验证。

localized image

使用情况

使用智能卡登录 Linux VDA

Linux VDA 在 SSO 和非 SSO 场景中同时支持使用智能卡登录。 

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

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

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

localized image

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

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

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

localized image

限制

智能卡移除策略

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