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

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

使用智能卡进行身份验证

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

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

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

要求

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

  • 要在 Windows 或 Linux WorkSpace 中使用智能卡,用户必须使用亚马逊 WorkSpaces Windows 客户端版本 3.1.1 或更高版本或 WorkSpaces macOS 客户端版本 3.1.5 或更高版本。有关将智能卡与 Windows 和 macOS 客户端配合使用的更多信息,请参阅智能卡 Support中的Amazon WorkSpaces 用户指南.

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

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

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

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

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

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

限制

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

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

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

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

    • 亚太(悉尼)区域

    • 亚太(东京)区域

    • 欧洲(爱尔兰)区域

    • Amazon GovCloud(美国西部)区域

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

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

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

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

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

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

Directory 配置

要启用智能卡身份验证,必须按以下方式配置 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 WorkSpaces,您可以在用户的会话中启用 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对于 Windows 来支持 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,也可以加载 OpenSCpkcs11模块通过运行pkcs11-register.exe程序。要运行此程序,请双击该文件C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe,或打开命令提示符窗口并运行以下命令:

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

验证 OpenSCpkcs11模块已加载到 Firefox 中,请执行以下操作:

  1. 如果 Firefox 已在运行中,请关闭它。

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

  3. 在存储库的关于:偏好页面上,在左侧导航窗格中选择Device & Security.

  4. 根据证书,选择安全设备.

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

    模块OpenSC smartcard framework (0.21)

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

故障排除

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

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

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

  • 智能卡上有多个可以匹配用户的证书。根据以下标准匹配证书:

    • 证书的根 CA。

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

    • 证书主题中的 UPN。

  • 拥有多个证书<EKU>msScLogin在他们的关键用法中。

一般来说,最好只有一个用于智能卡身份验证的证书映射到智能卡中的第一个插槽。

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

为 Linux WorkSpaces 启用智能卡

注意

WorkSpaces 流协议 (WSP) 捆绑包上的 Linux WorkSpaces 仅在Amazon目前 GovCloud (美国西部) 区域。

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

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

  • 不支持多个监视器。

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

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

获取根 CA 证书

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

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

  • 您可以使用 Web 注册站点导出自己的根 CA 证书,该站点是http://ip_address/certsrv要么http://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 的更多信息,请参阅cerutil在 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 WorkSpaces 启用智能卡的脚本。

  1. 在启用 WSP 协议的情况下创建一个新的 Linux WorkSpace。在 Amazon 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. 取消注释auth针对的行pam_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 用户必须自己在客户端上启用智能卡。 有关更多信息,请参阅 。智能卡 Support中的Amazon WorkSpaces 用户指南。)

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

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

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

您可以通过向 Linux WorkSpace 映像添加 SecurityDevices 策略,使用户能够在 Firefox 中使用智能卡。有关向 Firefox 添加系统范围策略的更多信息,请参阅Mozilla Policy templates(位于 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操作然后添加debug或者debug_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.