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

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

使用智能卡进行身份验证

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

Amazon WorkSpaces 支持将智能卡用于会话前身份验证会话中身份验证. 会话前身份验证是指在用户登录其 WorkSpaces 时执行的智能卡身份验证。会话内身份验证是指登录后执行的身份验证。

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

Requirements

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

  • 要在 Windows 或 Linux WorkSpace 中使用智能卡,用户必须使用 Amazon WorkSpaces Windows 客户端版本 3.1.1 或更高版本或工作空间 macOS 客户端 3.1.5 或更高版本。有关在 Windows 和 macOS 客户端中使用智能卡的详细信息,请参阅智能卡 Support中的Amazon WorkSpaces 用户指南.

  • 根 CA 和智能卡证书必须满足某些要求。有关更多信息,请参阅 。在 AD Connector 中启用 MTL 身份验证以便与智能卡一起使用中的Amazon Directory Service管理指南证书要求在 Microsoft 文档中。

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

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

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

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

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

Limitations

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

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

  • 智能卡身份验证当前仅支持 AD Connector 目录。

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

    • Asia Pacific (Sydney) Region

    • Asia Pacific (Tokyo) Region

    • Europe (Ireland) Region

    • AmazonGovCloud(美国西部)地区

    • US East (N. Virginia) Region

    • US West (Oregon) Region

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

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

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

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

目录配置

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

AD Connector 目录配置

在开始之前,请确保您的 AD Connector 目录已按照AD Connector中的Amazon Directory Service管理指南. 特别是,请确保已在防火墙中打开必要的端口。

要完成配置 AD Connector 目录,请按照在 AD Connector 中启用 MTL 身份验证以便与智能卡一起使用中的Amazon Directory Service管理指南.

本地目录配置

除了配置 AD Connector 目录之外,还必须确保颁发给您的内部部署目录的域控制器的证书具有 "KDC 身份验证" 扩展密钥用法 (EKU) 设置。若要执行此操作,请使用 Active Directory 域服务 (AD DS) 默认 Kerberos 身份验证书模板。请勿使用域控制器证书模板或域控制器身份验证证书模板,因为这些模板不包含智能卡身份验证的必要设置。

为 Windows WorkSpaces 启用智能卡

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

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

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

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

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

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

要使用会话前身份验证,除了更新组策略设置外,还必须通过 AD Connector 目录设置启用会话前身份验证。有关更多信息,请按照在 AD Connector 中启用 MTL 身份验证以便在智能卡中使用中的Amazon Directory Service管理指南.

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

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

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

例如,您可以安装 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,您也可以加载 OpenSSLpkcs11模块添加到 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. 在存储库的关于:首选项页面上,在左侧导航窗格中选择隐私与安全.

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

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

    模块OpenSC smartcard framework (0.21)

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

Troubleshooting

有关解决智能卡问题的信息,请参阅证书和配置问题在 Microsoft 文档中。

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

  • 插槽到证书的映射不正确。

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

    • 证书的根 CA。

    • 这些区域有:<KU><EKU>字段。

    • 证书主题中的 UPN。

  • 具有多个具有<EKU>msScLogin在他们的密钥用法中。

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

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

为 Linux WorkSpaces 启用智能卡

注意

WorkSpaces 上的 Linux WorkSpaces 流协议 (WSP) 捆绑包仅在AmazonGovCloud(美国西部)地区。

WSP 上的 Linux WorkSpaces 目前具有以下限制:

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

  • 不支持多个监视器。

  • 您必须使用工作空间 Windows 客户端应用程序连接到 WSP 上的 Linux 工作空间。

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

获取根 CA 证书

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

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

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

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

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

    2. 从 Windows 中启动菜单上,打开命令提示符窗口 (启动 >Windows 系统 >命令提示符)。

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

      certutil -ca.cert rootca.cer

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

    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脚本添加到我们的亚马逊 Linux WSP 捆绑包中。此脚本将执行以下操作:

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

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

  • 执行默认配置,其中包括启用pkinit在 WorkSpace 设置过程中。

以下步骤介绍如何使用enable_smartcard脚本将根 CA 证书添加到 Linux WorkSpaces,并为 Linux 工作空间启用智能卡。

  1. 创建一个启用 WSP 协议的新 Linux WorkSpace。在亚马逊工作空间控制台中启动 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. 取消的注释auth为的行pam_succeed_if.so并根据需要编辑服务列表。

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

  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 用户必须在自己的客户端上启用智能卡。 有关更多信息,请参阅 。智能卡 Support中的Amazon WorkSpaces 用户指南。)

  6. 创建自定义 WorkSpace 映像和捆绑,从 WorkSpace。

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

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

您可以通过将安全设备策略添加到您的 Linux WorkSpace 映像中,使用户能够在 Firefox 中使用智能卡。有关向 Firefox 添加系统范围内的更多信息,请参阅Mozilla 策略模板(位于 GitHub 上)。

  1. 在用于创建 WorkSpace 映像的 WorkSpace 上,创建名为policies.json/usr/lib64/firefox/distribution/.

  2. 在 JSON 文件中,添加以下安全设备策略,其中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操作,然后更改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 主体名称的映射中。检查[appdefaults]/pam/mappings部分中的/etc/krb5.conf文件。

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