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

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

使用智能卡进行身份验证

Windows 和 Linux WorkSpaces 上 WorkSpaces 流协议 (WSP) 捆绑包允许使用通用访问卡 (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 版或更高版本或 WorkSpaces macOS 客户端 3.1.5 版或更高版本。有关在 Windows 和 macOS 客户端中使用智能卡的更多信息,请参阅智能卡Support亚马逊 WorkSpaces 用户指南.

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

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

    • AD 用户的 userPrincipalName (UPN) 在 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 或更高版本进行智能卡身份验证。

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

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

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

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

    • 亚太区域(悉尼)

    • 亚太区域(东京)

    • 欧洲(爱尔兰)区域

    • Amazon GovCloud (US-West)区域

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

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

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

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

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

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

目录配置

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

AD Connector t 目录配置

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

要完成 AD Connector 目录的配置,请遵循中的说明在 AD Connector 中启用 MTLS 身份验证以用于智能卡Amazon Directory Service管理指南.

本地目录配置

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

为 Windows 启用智能卡 WorkSpaces

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

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

允许用户解锁 Windows WorkSpaces 在屏幕锁定时启用智能卡会话前身份验证,则可以在用户会话中启用 Windows 锁屏检测。当检测到 Windows 锁屏时, WorkSpace 会话已断开连接,用户可以从 WorkSpaces 客户使用他们的智能卡。

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

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

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

要使用会话前身份验证,除了更新组策略设置外,还必须通过 AD Connector 目录设置启用会话前身份验证。有关更多信息,请遵循中的说明在 AD Connector 中启用 MTLS 身份验证以用于智能卡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运行以下命令将模块导入 Firefoxpkcs11-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. 下面Certificates,选择安全设备.

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

    模块OpenSC smartcard framework (0.21)

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

问题排查

有关对智能卡进行故障排除的信息,请参阅证书和配置问题在微软文档中。

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

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

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

    • 证书的根 CA。

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

    • 证书主题中的 UPN。

  • 拥有多个证书<EKU>msScLogin在他们的密钥使用中。

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

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

为 Linux 启用智能卡 WorkSpaces

注意

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

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

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

  • 不支持多台显示器。

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

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

获取根 CA 证书

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

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

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

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

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

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

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

      certutil -ca.cert rootca.cer

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

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

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

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

以下步骤介绍如何使用enable_smartcard脚本将您的根 CA 证书添加到 Linux WorkSpaces 并为您的 Linux 启用智能卡 WorkSpaces.

  1. 创建新的 Linux WorkSpace 启用了 WSP 协议。启动时 WorkSpace 在亚马逊 WorkSpaces 控制台,选择捆绑包页面,一定要选择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. 取消注释authline forpam_succeed_if.so并根据需要编辑服务列表。

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

  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. 例如,您可能希望将系统范围的Policy 添加到允许用户在 Firefox 中使用智能卡. (Chrome 用户必须自己在客户端上启用智能卡。 有关更多信息,请参阅智能卡Support亚马逊 WorkSpaces 用户指南。)

  6. 创建自定义 WorkSpace 镜像和捆绑包来自 的 WorkSpace.

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

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

您可以允许您的用户在 Firefox 中使用智能卡,方法是添加一个 SecurityDevices Linux 的策略 WorkSpace 镜像。有关向 Firefox 添加系统范围的更多信息,请参阅Mozilla Polic上 GitHub.

  1. 在 WorkSpace 你用来创建你的 WorkSpace image,创建名为的新文件policies.json/usr/lib64/firefox/distribution/.

  2. 在 JSON 文件中,添加以下内容 SecurityDevices Policy,其中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_finderOutputstdout智能卡证书上的用户名,格式为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 主要名称。Check[appdefaults]/pam/mappings部分中的部分/etc/krb5.conffile。

如果这个命令不成功,而是基于密码kinit命令成功了,请检查pkinit_中的相关配置/etc/krb5.conffile。例如,如果智能卡包含多个证书,您可能需要更改pkinit_cert_match.