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

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

在 “个人” 中 WorkSpaces 使用智能卡进行身份验证

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

Amazon WorkSpaces 支持使用智能卡进行会话前身份验证和会话身份验证。会话前身份验证是指在用户登录时执行的智能卡身份验证。 WorkSpaces会话中身份验证是指登录后执行的身份验证。

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

要求

  • 会话前身份验证需要 Active Directory Connector (AD Connector) 目录。AD Connector 使用基于证书的相互传输层安全(双向TLS)身份验证,使用基于硬件或软件的智能卡证书对 Active Directory 的用户进行身份验证。有关如何配置 AD Connector 和本地目录的更多信息,请参阅目录配置

  • 要在 Windows 或 Linux 上使用智能卡 WorkSpace,用户必须使用亚马逊 WorkSpaces Windows 客户端版本 3.1.1 或更高版本或 mac WorkSpaces OS 客户端 3.1.5 或更高版本。有关在 Windows 和 macOS 客户端上使用智能卡的更多信息,请参阅亚马逊 WorkSpaces 用户指南中的智能卡支持

  • 根 CA 和智能卡证书必须满足某些要求。有关更多信息,请参阅《Amazon Directory Service 管理指南》中的 “在 AD Connector 中启用 m TLS 身份验证以用于智能卡” 和 Microsoft 文档中的证书要求

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

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

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

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

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

限制

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

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

  • Ubuntu 目前 WorkSpaces 不支持智能卡身份验证。

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

  • 会话中身份验证适用于所有支持DCV的地区。以下区域提供会话前身份验证:

    • 亚太地区(悉尼)区域

    • Asia Pacific(Tokyo)Region

    • 欧洲地区(爱尔兰)区域

    • Amazon GovCloud (美国东部)区域

    • Amazon GovCloud (美国西部)区域

    • 美国东部(弗吉尼亚州北部)区域

    • 美国西部(俄勒冈州)区域

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

  • 对于会话前身份验证,目前不支持在同一目录上同时启用智能卡身份验证和登录身份验证。

  • 目前仅支持CAC和PIV卡。其他类型的基于硬件或软件的智能卡也可以使用,但它们尚未经过全面测试。DCV

目录配置

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

AD Connector 目录配置

在开始之前,请确保您的 AD Connector 目录已按照《Amazon Directory Service 管理指南》AD Connector 先决条件中所述进行设置。特别是,请确保您已在防火墙中打开必要的端口。

要完成 AD Connector 目录的配置,请按照《Amazon Directory Service 管理指南》中的 “在 AD Connector 中启用 m TLS 身份验证以用于智能卡” 中的说明进行操作。

注意

智能卡身份验证需要 Kerberos 约束委托 (KCD) 才能正常运行。 KCD要求 AD Connector 服务帐户的用户名部分与同一用户的sAMAccount名称相匹配。sAMAccount名称不能超过 20 个字符。

本地目录配置

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

启用适用于 Windows 的智能卡 WorkSpaces

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

检测 Windows 锁屏并断开会话连接

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

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

启用会话内或会话前身份验证

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

要使用会话前身份验证,除了更新组策略设置外,您还必须通过 AD Connector 目录设置启用会话前身份验证。有关更多信息,请按照《Amazon Directory Service 管理指南》中的 “在 AD Connector 中启用 m TLS 身份验证以便在智能卡中使用” 中的说明进行操作。

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

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

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

例如,你可以安装适用于 Windows 的 64 位版本的 OpenSC 以PKCS支持 #11,然后使用以下组策略设置,NAME_OF_DEVICE其中是你要用来PKCS标识 #11 的任何值,例如,OpenSC以及 #11 模块的路径PATH_TO_LIBRARY_FOR_DEVICE在哪里。 PKCS此路径应指向带有. DLL扩展,例如C:\Program Files\OpenSC Project\OpenSC\pkcs11\onepin-opensc-pkcs11.dll

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

如果您使用的是 OpenSC,也可以通过运行 pkcs11-register.exe 程序,将 OpenSC pkcs11 模块加载到 Firefox 中。要运行此程序,请双击 C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe 中的文件,或者打开命令提示符窗口并运行以下命令:

"C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe"

要验证 OpenSC pkcs11 模块是否已加载到 Firefox 中,请执行以下操作:

  1. 如果 Firefox 已经在运行,请将其关闭。

  2. 打开 Firefox。选择右上角的菜单按钮 Firefox menu button ,然后选择选项

  3. 关于: 首选项页面上,在左侧导航窗格中选择隐私与安全

  4. 证书下,选择安全设备

  5. 设备管理器对话框中,您应该在左侧导航栏中看到 OpenSC 智能卡框架 (0.21),当您选择它时,它应该具有以下值:

    模块OpenSC smartcard framework (0.21)

    路径C:\Program Files\OpenSC Project\OpenSC\pkcs11\onepin-opensc-pkcs11.dll

故障排除

有关排查智能卡问题的信息,请参阅 Microsoft 文档中的证书和配置问题

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

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

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

    • 证书的根 CA。

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

    • 证书主题UPN中的。

  • 多个证书的密钥用法中存在 <EKU>msScLogin

通常,最好只有一个用于智能卡身份验证的证书,该证书映射到智能卡的第一个槽。

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

启用适用于 Linux 的智能卡 WorkSpaces

注意

DCV当前 WorkSpaces 开启的 Linux 有以下限制:

  • 不支持剪贴板、音频输入、视频输入和时区重定向。

  • 不支持多个显示器。

  • 你必须使用 WorkSpaces Windows 客户端应用程序才能在 WorkSpaces 上连接到 Linux DCV。

要在 Linux 上启用智能卡 WorkSpaces,您需要在 WorkSpace 镜像中加入PEM格式为 root CA 证书文件。

获取根 CA 证书

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

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

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

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

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

    2. 在 Windows 的开始菜单中,打开命令提示符窗口(开始 > Windows 系统 > 命令提示符)。

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

      certutil -ca.cert rootca.cer

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

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

      openssl x509 -inform der -in rootca.cer -out /tmp/rootca.pem
将您的根 CA 证书添加到您的 Linux WorkSpaces

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

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

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

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

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

  1. 创建一个启用该DCV协议 WorkSpace 的新 Linux。在亚马逊 WorkSpaces 控制台 WorkSpace 中启动时,请务必在 “选择捆绑包” 页面上选择DCV协议,然后选择一个 Amazon Linux 2 公共捆绑包。

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

    /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。取消 pam_succeed_if.so 对应的 auth 行的注释,并根据需要编辑服务列表。

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

  4. 对执行任何其他自定义。 WorkSpace例如,您可能希望添加一个系统范围的策略,以允许用户在 Firefox 中使用智能卡。(Chrome 用户必须自己在客户端上启用智能卡。 有关更多信息,请参阅 Amazon WorkSpaces 用户指南中的智能卡支持。)

  5. 从@@ 中创建自定义 WorkSpace 映像和捆绑包 WorkSpace。

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

允许用户在 Firefox 中使用智能卡

您可以在 Linux WorkSpace 映像中添加 SecurityDevices 策略,让您的用户能够在 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" } } }
故障排除

为了排查问题,建议添加 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 操作,并将 pam_pksc11.sonodebug 参数更改为 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_finder在表单stdout中智能卡证书上的用户名上输出NETBIOS\username。此用户名应与 WorkSpace 用户名匹配。

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

例如,对于域 corp.example.com 中的用户 mmajor,来自 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 主体名称。例如,对于域 corp.example.com 中的用户 mmajor,使用以下命令:

KRB5_TRACE=/dev/stdout kinit -V mmajor

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

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