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

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

使用智能卡进行身份验证

WorkSpaces 基于 WorkSpaces 流媒体协议 (WSP) 的 Windows 和 Linux 套装允许使用通用访问卡 (CAC)个人身份验证 (PIV) 智能卡进行身份验证。

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

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

要求

  • 会话前身份验证需要 Active Directory 连接器 (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 文档中的证书要求

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

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

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

    • 智能卡登录 (1.3.6.1.4.1.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 的区域均提供会话内身份验证。以下区域提供会话前身份验证:

    • 亚太地区(悉尼)区域

    • 亚太地区(东京)区域

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

    • Amazon GovCloud (美国东部)区域

    • Amazon GovCloud (美国西部)区域

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

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

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

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

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

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

目录配置

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

AD Connector 目录配置

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

要完成 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 身份验证以便在智能卡中使用 mTLS 身份验证” 中的说明进行操作。

使用户能够在浏览器中使用智能卡

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

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

例如,你可以安装适用于 Windows 的 64 位版本的 OpenSC 来支持 PKCS #11,然后使用以下组策略设置,NAME_OF_DEVICE其中是你要用来标识 PKCS #11 的任何值,OpenSC例如,PKCS #11 模块的路径PATH_TO_LIBRARY_FOR_DEVICE在哪里。此路径应指向扩展名为.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,也可以通过运行该程序将 OpenSC pkcs11 模块加载到 Firefox 中。pkcs11-register.exe要运行此程序,请双击中的文件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. about: preferences 页面的左侧导航窗格中,选择 “隐私和安全”。

  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 文档中的 certut il。

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

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

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

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

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

  • 执行默认配置,包括在 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。取消注释该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 用户必须自己在客户端上启用智能卡。 有关更多信息,请参阅《亚马逊 WorkSpaces 用户指南》中的 Smart Card Supp ort。)

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

  7. 使用新的自定义捆绑包 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操作并将的nodebug参数更改pam_pksc11.sodebug

  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) 中,NetBIOS 域名是 Windows 2000 之前的域名。通常(但并非总是如此),NetBIOS 域名是域名系统 (DNS) 域名的子域。例如,如果 DNS 域名是example.com,则 NetBIOS 域名通常是。EXAMPLE如果 DNS 域名是corp.example.com,则 NetBIOS 域名通常是。CORP

例如,对于域mmajor中的用户corp.example.com,来自的输出pklogin_finderCORP\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 主体名称的映射中。检查/etc/krb5.conf文件中的[appdefaults]/pam/mappings部分。

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