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

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

使用智能卡进行身份验证

WorkSpaces 基于 WorkSpaces 流媒体协议 (WSP) 的 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 中启用 mTLS 身份验证以用于智能卡以及 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,但不是必需的。

限制

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

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

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

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

  • 会话中身份验证在所有支持 WSP 的区域均可用。以下区域提供会话前身份验证:

    • 亚太地区(悉尼)区域

    • Asia Pacific(Tokyo)Region

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

    • Amazon GovCloud (美国东部)区域

    • Amazon GovCloud (美国西部)区域

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

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

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

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

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

目录配置

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

AD Connector 目录配置

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

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

注意

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

本地目录配置

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

启用适用于 Windows 的智能卡 WorkSpaces

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

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

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

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

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

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

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

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

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

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

例如,您可以安装适用于 Windows 的 64 位版本的 OpenSC 来支持 PKCS #11,然后使用以下组策略设置,其中 NAME_OF_DEVICE 是您要用来标识 PKCS #11 的任何值,例如 OpenSC,其中 PATH_TO_LIBRARY_FOR_DEVICE 是 PKCS #11 模块的路径。此路径应指向扩展名为 .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

注意

WSP WorkSpaces 上的 Linux 目前存在以下限制:

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

  • 不支持多个显示器。

  • 你必须使用 WorkSpaces Windows 客户端应用程序连接到 WSP WorkSpaces 上的 Linux。

要在 Linux 上启用智能卡 WorkSpaces,您需要在 WorkSpace 镜像中包含 PEM 格式的根 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. 使用以下 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 模块。

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

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

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

  2. 在新版本中 WorkSpace,以 root 身份运行以下命令,其中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。取消 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_finderstdout 上以 NETBIOS\username 的形式输出智能卡证书的用户名。此用户名应与 WorkSpace 用户名匹配。

在 Active Directory 域服务 (AD DS) 中,NetBIOS 域名是 Windows 2000 之前的域名。通常(但并非总是如此),NetBIOS 域名是域名系统 (DNS) 域名的子域。例如,如果 DNS 域名为 example.com,则 NetBIOS 域名通常为 EXAMPLE。如果 DNS 域名为 corp.example.com,则 NetBIOS 域名通常为 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 进行更改。