使用智能卡进行身份验证 - Amazon WorkSpaces
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用智能卡进行身份验证

捆绑包上的 Windows 和 Linux WorkSpaces 允许使用WorkSpaces Streaming Protocol (WSP)通用访问卡 (CAC)个人身份验证 (PIV) 智能卡进行身份验证。

默认情况下,Amazon WorkSpaces 配置为支持使用智能卡进行会话前身份验证会话中身份验证。会话前身份验证是指在用户登录其 WorkSpaces 时执行的智能卡身份验证。 会话中身份验证是指登录后执行的身份验证。

例如,用户可以在使用 Web 浏览器和应用程序时使用智能卡进行会话中身份验证。他们还可以将智能卡用于需要管理权限的操作。例如,如果用户对其 Linux WorkSpace 具有管理权限,则当运行 sudosudo -i 命令时,他们可以使用智能卡自行进行身份验证。

Requirements

  • 需要 Active Directory Connector (AD Connector) 目录。有关如何配置 AD Connector 和本地目录的更多信息,请参阅目录配置

  • 要将智能卡与 Windows 或 Linux WorkSpace 结合使用,用户必须使用 Amazon WorkSpaces Windows 客户端版本 3.1.1 或更高版本。有关将智能卡与 Windows 客户端结合使用的更多信息,请参阅 https://docs.amazonaws.cn/workspaces/latest/userguide/smart_card_support.html 中的智能卡支持Amazon WorkSpaces 用户指南。

  • 根 CA 和智能卡证书必须满足特定要求。有关更多信息,请参阅 WorkSpaces 中的为 Amazon 启用智能卡身份验证AWS Directory Service Administration Guide和 Microsoft 文档中的 证书要求

    除了这些要求之外,用于对 Amazon WorkSpaces 进行智能卡身份验证的用户证书还必须包含以下属性:

    • 证书的 userPrincipalName (SAN) 字段中 AD 用户的 subjectAltName (UPN)。我们建议为用户的默认 UPN 颁发智能卡证书。

    • 客户端身份验证 (1.3.6.1.5.5.7.3.2) 扩展密钥用法 (EKU) 属性。

    • 智能卡登录 (1.3.6.1.4.1.311.20.2.2) EKU 属性。

  • 对于会话前身份验证,证书吊销检查需要在线证书状态协议 (OCSP)。对于会话中身份验证,建议使用 OCSP,但这不是必需的。

Limitations

  • 目前只支持使用 WorkSpaces Windows 客户端应用程序版本 3.1.1 或更高版本进行智能卡身份验证。

  • 仅当客户端在 64 位版本的 Windows 上运行时,WorkSpaces Windows 客户端应用程序 3.1.1 或更高版本才支持智能卡。

  • 目前只支持使用 AD Connector 目录进行智能卡身份验证。

  • 目前,预会话身份验证仅在 AWS GovCloud(美国西部) 区域 中可用。会话中身份验证在支持 WSP 的所有区域中都可用。

  • 对于 Linux 或 Windows WorkSpaces 上的会话中身份验证和会话前身份验证,当前一次只允许使用一张智能卡。

  • 对于会话前身份验证,目前不支持在同一目录上启用智能卡身份验证以及用户名和密码身份验证。

  • 目前仅支持 CAC 和 PIV 卡。其他类型的智能卡也可使用,但尚未经过全面测试可与 WSP 一起使用。

  • 当前不支持在 Windows 或 Linux WorkSpace 会话期间使用智能卡解锁屏幕。要解决 Windows WorkSpaces 的此问题,请参阅检测 Windows 锁定屏幕并断开会话连接。要解决 Linux WorkSpaces 的此问题,请参阅在 Linux WorkSpaces 上禁用锁定屏幕

目录配置

要启用智能卡身份验证,您必须采用以下方式配置 AD Connector 目录和本地目录。

AD Connector 目录配置

在开始之前,请确保您的 AD Connector 目录已按照 https://docs.amazonaws.cn/directoryservice/latest/admin-guide/prereq_connector.html 中的 AD Connector 先决条件AWS Directory Service Administration Guide中所述进行设置。具体而言,请确保您已在防火墙中打开了必要的端口。

要完成 AD Connector 目录的配置,请按照 WorkSpaces 中的为 Amazon 启用智能卡身份验证AWS Directory Service Administration Guide中的说明进行操作。

注意

用于配置会话前智能卡身份验证的 AWS Directory Service API 操作和 Directory Service AWS 命令行界面 (AWS CLI) 命令当前仅在 AWS GovCloud(美国西部) 区域 中可用。

本地目录配置

除了配置您的 AD Connector 目录之外,您还必须确保颁发到您本地目录的域控制器的证书具有“KDC 身份验证”扩展密钥用法 (EKU) 集。为此,请使用 Active Directory 域服务 (AD DS) 默认 Kerberos 身份验证证书模板。请勿使用域控制器证书模板或域控制器身份验证证书模板,因为这些模板不包含进行智能卡身份验证所需的设置。

启用适用于 Windows 的智能卡WorkSpaces

有关如何在 Windows 上启用智能卡身份验证的一般指导,请参阅 Microsoft 文档中的通过第三方证书颁发机构启用智能卡登录的指南

检测 Windows 锁定屏幕并断开会话

要允许用户解锁在屏幕处于锁定状态时启用了智能卡预会话身份验证的 Windows WorkSpaces,您可以在用户的会话中启用 Windows 锁定屏幕检测。当检测到 Windows 锁定屏幕时,WorkSpace 会话将断开连接,用户可以使用其智能卡从 WorkSpaces 客户端进行重新连接。

您可以使用组策略设置启用在检测到 Windows 锁定屏幕时断开会话连接。有关更多信息,请参阅在 WSP 的屏幕锁定上启用或禁用断开连接会话

禁用会话中或会话前身份验证

默认情况下,Windows WorkSpaces 配置为支持使用智能卡进行预会话和会话中身份验证。如果需要,您可以使用组策略设置禁用 Windows WorkSpaces 的会话中身份验证。有关更多信息,请参阅为 WSP 启用或禁用智能卡重定向

您无法通过组策略禁用会话前身份验证,但您可以通过使用 DisableClientAuthentication API 操作或 disable-client-authentication CLI 命令的 AD Connector 目录设置执行此操作。有关更多信息,请参阅 中的WorkSpaces为 Amazon 启用智能卡身份验证。AWS Directory Service Administration Guide

允许用户在浏览器中使用智能卡

如果您的用户使用 Chrome 作为其浏览器,则无需特殊配置即可使用智能卡。

如果您的用户使用 Firefox 作为其浏览器,则可以允许用户通过组策略在 Firefox 中使用智能卡。您可以在 中使用这些 Firefox 组策略模板GitHub。

您必须安装适用于 Windows(64 位或 32 位)的 OpenSC 的适当版本以支持 PKCS #11,然后使用以下组策略设置,其中 NAME_OF_DEVICE 是要用于标识 PKCS #11 的任何值(如 OpenSC),其中 PATH_TO_LIBRARY_FOR_DEVICE 是 PKCS #11 的路径。此路径应指向具有 .DLL 扩展名的库,例如 C:\Windows\System32\pkcs11.dll

Software\Policies\Mozilla\Firefox\SecurityDevices\NAME_OF_DEVICE = PATH_TO_LIBRARY_FOR_DEVICE

Troubleshooting

有关对智能卡进行故障排除的信息,请参阅 Microsoft 文档中的证书和配置问题

可导致问题的一些常见问题:

  • 槽与证书的映射不正确。

  • 在智能卡上具有多个可与用户匹配的证书。使用以下标准匹配证书:

    • 证书的根 CA。

    • 证书的 <KU><EKU> 字段。

    • 证书主题中的 UPN。

  • 有多个证书的密钥用法中包含 <EKU>msScLogin

一般而言,最好只提供一个用于智能卡身份验证的证书,该证书映射到智能卡中的第一个插槽。

用于管理智能卡上的证书和密钥的工具 (例如,删除或重新映射证书和密钥) 可能是制造商特定的。有关更多信息,请参阅您的智能卡制造商提供的文档。

启用适用于 Linux 的智能卡WorkSpaces

要在 Linux WorkSpaces 上使用智能卡,您需要在 WorkSpace 映像中包括 PEM 格式的根 CA 证书文件。

获取根 CA 证书

您可以通过多种方式获取根 CA 证书:

  • 您可以使用由第三方证书颁发机构运营的根 CA 证书。

  • 您可以使用 Web 注册站点(http://ip_address/certsrvhttp://fqdn/certsrv)导出自己的根 CA 证书,其中 ip_addressfqdn 是根证书 CA 服务器的 IP 地址和完全限定域名 (FQDN)。有关使用 Web 注册网站的更多信息,请参阅 Microsoft 文档中的如何导出根证书颁发机构证书

  • 您可以使用以下过程从运行 Active Directory 证书服务 (AD CS) 的根 CA 证书服务器中导出根 CA 证书。有关安装 AD CS 的信息,请参阅 Microsoft 文档中的安装证书颁发机构

    1. 使用管理员账户登录根 CA 服务器。

    2. 从 Windows 开始菜单中,打开命令提示符窗口(开始 &gt; Windows 系统 &gt; 命令提示符)。

    3. 使用以下命令将根 CA 证书导出到新文件,其中 rootca.cer 是新文件的名称:

      certutil -ca.cert rootca.cer

      有关运行 certutil 的更多信息,请参阅 Microsoft 文档中的 certutil

    4. 使用以下 OpenSSL 命令将导出的根 CA 证书从 DER 格式转换为 PEM 格式,其中 rootca 是证书的名称。有关 OpenSSL 的更多信息,请参阅 www.openssl.org

      openssl x509 -inform der -in rootca.cer -out /tmp/rootca.pem

将根 CA 证书添加到 Linux WorkSpaces

为了帮助您启用智能卡,我们已将 enable_smartcard 脚本添加到我们的 Amazon Linux WSP 服务包。此脚本将执行以下操作:

  • 将您的根 CA 证书导入 网络安全服务 (NSS) 数据库。

  • 为可插拔身份验证模块 (PAM) 身份验证安装 pam_pkcs11 模块。

  • 执行默认配置,包括在 pkinit 预置期间启用 WorkSpace。

以下过程介绍如何使用 enable_smartcard 脚本将根 CA 证书添加到 Linux WorkSpaces并为 Linux WorkSpaces 启用智能卡。

  1. 在启用 WorkSpace 协议的情况下创建新的 Linux WSP。在 WorkSpace 控制台中启动 Amazon WorkSpaces 时,在 Select Bundles (选择服务包) 页面上,确保为协议选择 WSP,然后选择一个 Amazon Linux 2 公有服务包。

  2. 在新的 WorkSpace 上,以根用户身份运行以下命令,其中 pem-path 是 PEM 格式的根 CA 证书文件的路径。

    /usr/lib/skylight/enable_smartcard --ca-cert pem-path
    注意

    Linux WorkSpaces 假定智能卡上的证书是针对用户的默认用户委托人名称 (UPN) 颁发的,例如 sAMAccountName@domain,其中 domain 是完全限定域名 (FQDN)。

    要使用备用 UPN 后缀,请指定 run /usr/lib/skylight/enable_smartcard --help 以了解更多信息。备用 UPN 后缀的映射对每个用户是唯一的。因此,必须对每个用户的 WorkSpace 单独执行该映射。

  3. (可选)默认情况下,所有服务都支持在 Linux WorkSpaces 上使用智能卡身份验证。 要将智能卡身份验证限制为仅特定服务,您必须编辑 /etc/pam.d/system-auth。 取消注释 authpam_succeed_if.so 行并根据需要编辑服务列表。

    取消注释 auth 行后,要允许服务使用智能卡身份验证,您必须将其添加到列表中。要使服务仅使用密码身份验证,您必须将其从列表中删除。

  4. (可选)当前不支持使用智能卡解锁屏幕。要在 Linux WorkSpaces 上禁用锁定屏幕,请使用以下内容创建一个名为 /usr/share/glib-2.0/schemas/10_screensaver.gschema.override 的文件:

    [org.mate.screensaver] lock-enabled=false

    创建此文件后,运行以下命令:

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
  5. 对 WorkSpace 执行任何其他自定义操作。 例如,您可能希望添加系统范围的策略,以使用户能够在 Firefox 中使用智能卡。(Chrome 用户必须在其客户端上启用智能卡。 有关更多信息,请参阅 https://docs.amazonaws.cn/workspaces/latest/userguide/smart_card_support.html 中的 智能卡支持Amazon WorkSpaces 用户指南。

  6. 从 WorkSpace创建自定义 映像和服务包WorkSpace。

  7. 使用新的自定义捆绑包为您的用户启动 WorkSpaces。

使用户能够在 Firefox 中使用智能卡

您可以通过将 SecurityDevices 策略添加到 Linux WorkSpace 映像,允许用户在 Firefox 中使用智能卡。有关向 Firefox 添加系统级策略的更多信息,请参阅 上的 Mozilla 策略模板GitHub。

  1. 在用于创建 WorkSpace 映像的 WorkSpace 上,在 policies.json 中创建一个名为 /usr/lib64/firefox/distribution/ 的新文件。

  2. 在 JSON 文件中,添加以下 SecurityDevices 策略,其中 NAME_OF_DEVICE 是要用于标识 pkcs 模块的任何值。例如,您可能希望使用 "OpenSC" 等值:

    { "policies": { "SecurityDevices": { "NAME_OF_DEVICE": "/usr/lib64/opensc-pkcs11.so" } } }

Troubleshooting

对于故障排除,我们建议添加 pkcs11-tools 实用程序。此实用程序允许您执行以下操作:

  • 列出每个智能卡。

  • 列出每个智能卡上的槽。

  • 列出每个智能卡上的证书。

可导致问题的一些常见问题:

  • 槽与证书的映射不正确。

  • 在智能卡上具有多个可与用户匹配的证书。使用以下标准匹配证书:

    • 证书的根 CA。

    • 证书的 <KU><EKU> 字段。

    • 证书主题中的 UPN。

  • 有多个证书的密钥用法中包含 <EKU>msScLogin

一般而言,最好只提供一个用于智能卡身份验证的证书,该证书映射到智能卡中的第一个插槽。

用于管理智能卡上的证书和密钥的工具 (例如,删除或重新映射证书和密钥) 可能是制造商特定的。可以用于使用智能卡的其他工具包括:

  • opensc-explorer

  • opensc-tool

  • pkcs11_inspect

  • pkcs11_listcerts

  • pkcs15-tool

启用调试日志记录

要对 pam_pkcs11pam-krb5 配置进行故障排除,您可以启用调试日志记录。

  1. /etc/pam.d/system-auth-ac 文件中,编辑 auth 操作并将 nodebugpam_pksc11.so 参数更改为 debug

  2. /etc/pam_pkcs11/pam_pkcs11.conf 文件中,将 debug = false; 更改为 debug = true;。 选项分别适用于每个映射器模块,因此您可能需要直接在 debug 部分下和相应的映射器部分下进行更改(默认情况下,此位置为 pam_pkcs11)。mapper generic

  3. /etc/pam.d/system-auth-ac 文件中,编辑 auth 操作并将 debugdebug_sensitive 参数添加到 pam_krb5.so

在启用调试日志记录后,系统会直接在活动终端中输出 pam_pkcs11 调试消息。来自 pam_krb5 的消息记录在 /var/log/secure 中。

要检查智能卡证书映射到哪个用户名,请使用以下 pklogin_finder 命令:

sudo pklogin_finder debug config_file=/etc/pam_pkcs11/pam_pkcs11.conf

在系统提示时,输入智能卡 PIN。pklogin_finderstdout 上以 NETBIOS\username 格式输出智能卡证书上的用户名。 此用户名应与 WorkSpace 用户名匹配。

在 Active Directory 域服务 (AD DS) 中,NetBIOS 域名是 Windows 2000 之前的域名。通常情况下(但并非总是),NetBIOS 域名是域名系统 (DNS) 域名的子域。例如,如果 DNS 域名为 example.com,则 NetBIOS 域名通常为 EXAMPLE。 如果 DNS 域名为 corp.example.com,则 NetBIOS 域名通常为 CORP

例如,对于域 mmajor 中的用户 corp.example.com,来自 pklogin_finder 的输出为 CORP\mmajor

注意

如果您收到消息 "ERROR:pam_pkcs11.c:504: verify_certificate() failed",此消息表示 pam_pkcs11 已在智能卡上找到一个与用户名条件匹配但无法串联到机器识别的根 CA 证书的证书。出现这种情况时,pam_pkcs11 将输出上述消息,然后尝试下一个证书。它仅在找到与用户名匹配并一直串联到已识别根 CA 证书的证书的证书时,才允许身份验证。

要对 pam_krb5 配置进行故障排除,您可以使用以下命令在调试模式下手动调用 kinit

KRB5_TRACE=/dev/stdout kinit -V

此命令应成功获取 Kerberos 票证授予票证 (TGT)。如果失败,请尝试在命令中明确添加正确的 Kerberos 委托人名称。例如,对于域 mmajor 中的用户 corp.example.com,请使用以下命令:

KRB5_TRACE=/dev/stdout kinit -V mmajor

如果此命令成功,则在从 WorkSpace 用户名映射到 Kerberos 委托人名称时最可能会出现此问题。检查 [appdefaults]/pam/mappings 文件中的 /etc/krb5.conf 部分。

如果此命令不成功,但基于密码的 kinit 命令成功,请检查 pkinit_ 文件中与 /etc/krb5.conf 相关的配置。例如,如果智能卡包含多个证书,您可能需要对 pkinit_cert_match 进行更改。