如何配置 Microsoft Entra 基于证书的身份验证

使用 Microsoft Entra 基于证书的身份验证 (CBA),组织可将其 Microsoft Entra 租户配置为允许或要求用户使用其企业公钥基础结构 (PKI) 创建的 X.509 证书进行身份验证,以便在应用和浏览器中登录。 借助此功能,组织可以通过 x.509 证书来采用防网络钓鱼新式无密码身份验证。

在登录期间,用户还会看到使用证书(而不是输入密码)进行身份验证的选项。 如果设备上存在多个匹配的证书,则用户可以从中选择使用某个证书。 将根据用户帐户验证证书,如果验证成功,则用户可以登录。

请按照以下说明为 Office 365 企业版和美国政府计划中的租户配置和使用 Microsoft Entra CBA。 你应当已经配置公钥基础结构 (PKI)

先决条件

请确保满足下列先决条件:

  • 在 Microsoft Entra ID 中配置至少一个证书颁发机构 (CA) 和任何中间 CA。
  • 用户必须能够访问(由租户上配置的可信公钥基础结构颁发的)用户证书,该证书用于针对 Microsoft Entra ID 进行客户端身份验证。
  • 每个 CA 都应具有可以从面向 internet 的 URL 引用的证书吊销列表 (CRL)。 如果未为受信任 CA 配置 CRL,则 Microsoft Entra ID 不会执行任何 CRL 检查,无法吊销用户证书,并且不会阻止身份验证。

重要

确保 PKI 是安全的,并且无法轻松遭到入侵。 如果 PKI 遭到入侵,攻击者可以创建并签署客户端证书,以及侵害租户中的任何用户(包括从本地同步的用户和仅云端用户)。 但是,强大的密钥保护策略以及其他物理和逻辑控制(例如用于安全存储项目的 HSM 激活卡或令牌)可以提供深层防御,以防止外部攻击者或内部威胁破坏 PKI 的完整性。 有关详细信息,请参阅保护 PKI

重要

请访问 Microsoft 建议,获取 Microsoft 加密的最佳做法,包括算法选择、密钥长度和数据保护。 请确保使用某个建议的算法、密钥长度和 NIST 批准的曲线。

重要

作为持续安全改进的一部分,Azure/M365 终结点正在添加对 TLS1.3 的支持,此过程预计需要几个月才能覆盖 Azure/M365 中的数千个服务终结点。 这包括 Microsoft Entra 基于证书的身份验证 (CBA) *.certauth.login.microsoftonline.com*.certauth.login.microsoftonline.us 使用的Microsoft Entra 终结点。 TLS 1.3 是 Internet 部署最多的安全协议的最新版本,它对数据进行加密,在两个终结点之间提供安全通信通道。 TLS 1.3 使得不必使用过时的加密算法,增强了旧版本的安全性,并旨在对尽可能多的握手进行加密。 强烈建议开发人员开始在其应用程序和服务中测试 TLS 1.3。

注意

在评估 PKI 时,审查证书颁发策略和实施非常重要。 如前所述,将证书颁发机构 (CA) 添加到 Microsoft Entra 配置将允许这些 CA 颁发的证书对 Microsoft Entra ID 中的任何用户进行身份验证。 因此,必须考虑允许 CA 如何与何时颁发证书,以及它们如何实现可重用标识符。 在管理员需要确保只有特定证书可用于对用户进行身份验证的情况下,管理员应该专门使用高相关性绑定来实现较高级别的保证,即只有特定的证书能够对用户进行身份验证。 有关详细信息,请参阅高相关性绑定

配置和测试 Microsoft Entra CBA 的步骤

在启用 Microsoft Entra CBA 之前需要完成的一些配置步骤。 首先,管理员必须配置颁发用户证书的可信 CA。 如下图所示,我们使用基于角色的访问控制来确保只需由最低特权管理员做出更改。

需要全局管理员来管理此功能。

(可选)还可以配置身份验证绑定以将证书映射到单重或多重身份验证,并配置用户名绑定以将证书字段映射到用户对象的属性。 身份验证策略管理员可以配置与用户相关的设置。 完成所有配置后,在租户中启用 Microsoft Entra CBA。

启用 Microsoft Entra 基于证书的身份验证所要执行的步骤的图示。

步骤 1:使用基于 PKI 的信任存储配置证书颁发机构(预览)

Entra 具有一个新的基于公钥基础结构 (PKI) 的证书颁发机构 (CA) 信任存储。 对于,基于 PKI 的 CA 信任存储将每个不同的 PKI 的 CA 保留在一个容器对象中。 管理员可在基于 PKI 的容器中管理 CA,这比 CA 简单列表更加简单。

基于 PKI 的信任存储对 CA 数量和每个 CA 文件的大小有更高的限制。 对于每个 CA 对象,基于 PKI 的信任存储最多支持 250 个 CA 和 8 KB 大小。 强烈建议使用新的基于 PKI 的信任存储来存储 CA,该存储是可缩放的,并支持证书颁发者提示等新功能。

注意

如果使用旧版信任存储来配置 CA,建议配置基于 PKI 的信任存储。

管理员必须配置颁发用户证书的可信 CA。 只需要最低特权的管理员就可进行更改。 基于 PKI 的信任存储具有 RBAC 角色:特权身份验证管理员身份验证管理员

基于 PKI 的信任存储的上传 PKI 功能仅适用于 Microsoft Entra ID P1 或 P2 许可证。 但是,如果使用免费许可证,管理员可单独上传所有 CA(而不是 PKI 文件),并配置基于 PKI 的信任存储。

重要

由于新存储存在已知问题,建议不要删除旧存储中的所有 CA,并且至少有一个 CA 位于旧存储中。 我们正在努力解决此问题,以消除限制。

使用 Microsoft Entra 管理中心配置证书颁发机构

创建 PKI 容器对象

  1. 创建 PKI 容器对象。

  2. 身份验证策略管理员的身份登录到 Microsoft Entra 管理中心。

  3. 浏览到“保护”“显示更多”>“安全中心”(或“标识安全分数”)“公钥基础结构(预览版)”。>>

  4. 单击“+ 创建 PKI”。

  5. 输入“显示名称”

  6. 单击 “创建”

    创建 PKI 所需的步骤示意图。

  7. 选择“”可添加或删除列。

  8. 选择“刷新”来刷新 PKI 列表。

删除 PKI 容器对象

  1. 若要删除 PKI,请选择 PKI,然后选择“删除”。 如果 PKI 自带 CA,请输入 PKI 的名称以确认删除其中的所有 CA,然后选择“删除”。

    删除 PKI 所需的步骤示意图。

将单个 CA 上传到 PKI 容器对象

  1. 若要将 CA 上传到 PKI 容器,请执行以下操作:
    1. 单击“+ 添加证书颁发机构”。

    2. 选择 CA 文件。

    3. 如果 CA 是根证书,请选择“是”,否则请选择“否”。

    4. 对于“证书吊销列表 URL”,请为包含所有已吊销证书的 CA 基 CRL 设置面向 Internet 的 URL。 如果未设置 URL,则使用已吊销的证书进行身份验证不会失败。

    5. 对于“增量证书吊销列表 URL”,请为自上次发布基 CRL 以来,包含所有已吊销证书的 CRL 设置面向 Internet 的 URL。

    6. 默认情况下,“证书颁发者提示”处于启用状态。 如果 CA 不应包含在证书颁发者提示中,请关闭“证书颁发者提示”。

    7. 选择“保存”。

    8. 若要删除 CA 证书,请选择该证书,然后选择“删除”。

      显示如何删除 CA 证书的示意图。

    9. 选择“”可添加或删除列。

    10. 选择“刷新”来刷新 CA 列表。

使用上传 PKI 将所有 CA 上传到 PKI 容器对象

  1. 若要一次性将所有 CA 上传到 PKI 容器,请执行以下操作:

    1. 创建或打开 PKI 容器对象。
    2. 选择“上传 PKI”。
    3. 输入提供了 .p7b 文件的面向 URL 的 http internet。
    4. 输入文件的 SHA256 校验和。
    5. 选择“上传”。
    6. 上传 PKI 是一个异步过程。 每个 CA 上传后,可在 PKI 中使用。 完成 PKI 上传最多可能需要 30 分钟。
    7. 选择“刷新”来刷新 CA。

    若要生成 PKI .p7b 文件的 SHA256 校验和,请运行以下命令:

    Get-FileHash .\CBARootPKI.p7b -Algorithm SHA256
    

编辑 PKI

  1. 若要编辑 PKI,请选择 PKI 行上的“...”,然后选择“编辑”。
  2. 输入新的 PKI 名称,然后选择“保存”。

编辑 CA

  1. 若要编辑 CA,请选择 CA 行上的“...”,然后选择“编辑”。
  2. 根据需要输入证书颁发机构类型(根/中间)、CRL URL、增量 CRL URL、“已启用证书颁发者提示”标志的新值,然后选择“保存”。

还原 PKI

  1. 选择“已删除的 PKI”选项卡。
  2. 选择 PKI 并选择“还原 PKI”。

还原 CA

  1. 选择“已删除的 CA”选项卡。
  2. 选择 CA 文件,然后选择“还原证书颁发机构”。

了解 CA 上的 isIssuerHintEnabled 属性

证书颁发者提示在传输层安全性 (TLS) 握手过程中发送回受信任的 CA 指示。 受信任的 CA 列表设置为由 Entra 信任存储中租户上传的 CA 的使用者。 有关证书颁发者提示的详细信息,请参阅了解证书颁发者提示

默认情况下,Microsoft Entra 信任存储中所有 CA 的主题名称将作为提示发送。 若要发送回仅具有特定 CA 的提示,请将证书颁发者提示属性 isIssuerHintEnabled 设置为 true

服务器可发送回 TLS 客户端的证书颁发者提示(CA 的主题名称)的字符限制为 16 KB。 最佳做法是,仅针对颁发用户证书的 CA 将 isIssuerHintEnabled 属性设置为 true。

如果同一根证书中的多个中间 CA 颁发最终用户证书,则默认情况下所有证书都显示在证书选取器中。 但是,如果将特定 CA 的 isIssuerHintEnabled 设置为 ,则证书选取器中仅显示正确的用户证书。true 若要启用 isIssuerHintEnabled,请编辑 CA,并将值更新为 true

使用 Microsoft Graph API 配置证书颁发机构

Microsoft Graph API 可用于配置 CA。 以下示例演示如何使用 Microsoft Graph 为 PKI 或 CA 运行创建、读取、更新或删除 (CRUD) 操作。

创建 PKI 容器对象

PATCH https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/
Content-Type: application/json
{
   "displayName": "ContosoPKI"
}

获取所有 PKI 对象

GET https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations
ConsistencyLevel: eventual

按 PKI-id 获取 PKI 对象

GET https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{PKI-id}/
ConsistencyLevel: eventual

使用 .p7b 文件上传 CA

PATCH https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{PKI-id}/certificateAuthorities/{CA-id}
Content-Type: application/json
{
    	"uploadUrl":"https://CBA/demo/CBARootPKI.p7b,
    	"sha256FileHash": "AAAAAAD7F909EC2688567DE4B4B0C404443140D128FE14C577C5E0873F68C0FE861E6F"
}

获取 PKI 中的所有 CA

GET https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{PKI-id}/certificateAuthorities
ConsistencyLevel: eventual

按 CA-id 获取 PKI 中的特定 CA

GET https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{PKI-id}/certificateAuthorities/{CA-id}
ConsistencyLevel: eventual

更新特定的 CA 证书颁发者提示标志

PATCH https://graph.microsoft.com/beta/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{PKI-id}/certificateAuthorities/{CA-id}
Content-Type: application/json
{
   "isIssuerHintEnabled": true
}

使用 PowerShell 配置证书颁发机构 (CA)。对于此配置,可使用 [Microsoft Graph PowerShell] (/powershell/microsoftgraph/installation)。

  1. 使用管理员特权启动 PowerShell。

  2. 安装和导入 Microsoft Graph PowerShell SDK。

    Install-Module Microsoft.Graph -Scope AllUsers
    Import-Module Microsoft.Graph.Authentication
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
  3. 连接到租户并全部接受。

       Connect-MGGraph -Scopes "Directory.ReadWrite.All", "User.ReadWrite.All" -TenantId <tenantId>
    

审核日志

信任存储中 PKI 或 CA 上的任何 CRUD 操作都记录到 Microsoft Entra 审核日志中。

审核日志示意图。

常见问题

问题:上传 PKI 为什么会失败?

回答:检查 PKI 文件是否有效,且是否可访问而不出现任何问题。 PKI 文件的最大大小应为

问题:PKI 上传的服务级别协议 (SLA) 是什么?

回答:PKI 上传是一项异步操作,可能需要长达 30 分钟才能完成。

问题:如何为 PKI 文件生成 SHA256 校验和?

回答:若要生成 PKI .p7b 文件的 SHA256 校验和,请运行以下命令:

Get-FileHash .\CBARootPKI.p7b -Algorithm SHA256

步骤 2:在租户上启用 CBA

重要

如果用户在身份验证方法策略中处于基于证书的身份验证范围内,则该用户被视为能够进行 MFA。 此策略要求意味着用户无法在身份验证时使用证明来注册其他可用方法。 如果用户无权访问证书,他们将被锁定,并且无法注册其他 MFA 方法。 身份验证策略管理员只需为具有有效证书的用户启用 CBA。 对于 CBA,不包含“所有用户”。 仅使用具有有效证书的用户组。 有关详细信息,请参阅 Microsoft Entra 多重身份验证

若要在 Microsoft Entra 管理中心启用 CBA,请完成以下步骤:

  1. 至少以身份验证策略管理员的身份登录到 Microsoft Entra 管理中心

  2. 浏览到“组”“所有组”> 选择“新建组”,然后为 CBA 用户创建一个组。>

  3. 浏览至“保护”>“身份验证方法”>“基于证书的身份验证”。

  4. 在“启用和目标”下,选择“启用”。

  5. 选择“添加组”来选择特定组,例如已创建的组。 使用特定的组,而不是“所有用户”。

    如何启用 CBA 的屏幕截图。

一旦在租户上启用基于证书的身份验证,租户中的所有用户都会看到使用证书登录的选项。 只有启用了 CBA 的用户才能使用 X.509 证书进行身份验证。

注意

login.microsoftonline.com 以外,网络管理员应允许访问客户所在云环境的 certauth 终结点。 在 certauth 终结点上禁用 TLS 检查,以确保客户端证书请求在 TLS 握手中成功完成。

步骤 3:配置身份验证绑定策略

身份验证绑定策略可帮助确定单因素或多因素身份验证的强度。 租户上证书的默认保护级别是单因素身份验证

身份验证策略管理员可以将默认值从单因素更改为多因素并配置自定义策略规则。 身份验证绑定规则将证书属性(例如证书颁发者、策略对象 ID [OID] 或证书颁发者和策略 OID)映射到值,并为该规则选择默认保护级别。 可以创建多个规则。

若要修改 Microsoft Entra 管理中心中的租户默认设置,请完成以下步骤:

  1. 至少以身份验证策略管理员的身份登录到 Microsoft Entra 管理中心

  2. 浏览至 “保护”“身份验证方法”>“策略”。

  3. 在“管理”下,选择“身份验证方法”“基于证书的身份验证”。

    身份验证策略的屏幕截图。

  4. 选择“配置”,以设置身份验证绑定和用户名绑定。

  5. 保护级别属性的默认值为“单因素身份验证”。 选择“多重身份验证”,将默认值更改为 MFA。

    注意

    如果未添加任何自定义规则,则默认保护级别值将生效。 如果添加了自定义规则,则改为遵循在规则级别定义的保护级别。

    如何将默认策略更改为 MFA 的屏幕截图。

  6. 还可以设置自定义身份验证绑定规则,以帮助确定客户端证书的保护级别。 可以使用证书中的颁发者主题或策略 OID 字段进行配置。

    身份验证绑定规则将证书属性(颁发者或策略 OID)映射到值,并选择该规则的默认保护级别。 可创建多个规则。

    若要添加自定义规则,请选择“添加规则”。

    如何添加规则的屏幕截图。

    若要按证书颁发者创建规则,请选择“证书颁发者”。

    1. 从列表框中选择“证书颁发者标识符”。

    2. 选择“多重身份验证”,对于绑定相关性,选择“低”,然后单击“添加”。 当系统提示时,单击“我确认”以完成添加规则

      多重身份验证策略的屏幕截图。

    若要按策略 OID 创建规则,请选择“策略 OID”。

    1. 输入“策略 OID”的值。

    2. 选择“多重身份验证”,对于绑定相关性,选择“低”,然后单击“添加”。 当系统提示时,单击“我确认”以完成添加规则

      映射到策略 OID 的屏幕截图。

    若要按颁发者和策略 OID 创建规则,请执行以下操作:

    1. 选择“证书颁发者”和“策略 OID”。

    2. 选择颁发者并输入策略 OID。

    3. 对于“身份验证强度”,请选择“单因素身份验证”或“多重身份验证”。

    4. 对于“相关性绑定”,请选择“”。

      有关如何选择低相关性绑定的屏幕截图。

    5. 选择 添加

      有关如何添加低相关性绑定的屏幕截图。

    6. 使用策略 OID 为 3.4.5.6 且由 CN=CBATestRootProd 颁发的证书进行身份验证。 身份验证应该通过并获取多重声明。

重要

存在一个已知问题:Microsoft Entra 身份验证策略管理员同时使用证书颁发者和策略 OID 配置 CBA 身份验证策略规则。 此问题会影响某些设备注册方案,包括:

  • Windows Hello 企业版注册
  • FIDO2 安全密钥注册
  • Windows 无密码手机登录

使用 Workplace Join 进行设备注册、Microsoft Entra ID 和混合 Microsoft Entra 设备加入方案不受影响。 使用证书颁发者或策略 OID 的 CBA 身份验证策略规则不受影响。 要缓解该问题,管理员应该:

  • 编辑使用证书颁发者和策略 OID 选项的基于证书的身份验证策略规则。 删除证书颁发者或策略 OID 要求,并选择“保存”。 -或-
  • 删除同时使用证书颁发者和策略 OID 的身份验证策略规则。 创建仅使用证书颁发者或策略 OID 的规则。

我们正在努力修复此问题。

若要按颁发者和序列号创建规则,请执行以下操作:

  1. 添加身份验证绑定策略。 该策略要求在 policyOID 1.2.3.4.6 情况下由 CN=CBATestRootProd 颁发的任何证书都只需要高相关性绑定。 会使用证书颁发者和序列号。

    Microsoft Entra 管理中心“颁发者和序列号已添加”的屏幕截图。

  2. 选择证书字段。 在此示例中,让我们选择“证书颁发者和序列号”。

    有关如何选择颁发者和序列号的屏幕截图。

  3. 唯一支持的用户属性是 CertificateUserIds。 选择 添加

    有关如何添加颁发者和序列号的屏幕截图。

  4. 选择“保存”。

    登录日志会显示使用了哪个绑定进行登录以及证书中的详细信息。

    登录日志的屏幕截图。

  5. 选择“确定”以保存任何自定义规则。

重要

通过使用对象标识符格式来输入 PolicyOID。 例如,如果证书策略显示“所有颁发策略”,则在添加规则时输入 OID 2.5.29.32.0。 字符串“所有颁发策略”对于规则编辑器无效。

步骤 4:配置用户名绑定策略

用户名绑定策略有助于验证用户的证书。 默认情况下,我们将证书中的主体名称映射到用户对象中的 UserPrincipalName 以确定用户。

身份验证策略管理员可以替代默认值并创建自定义映射。 若要确定如何配置用户名绑定,请参阅用户名绑定的工作原理

有关使用 certificateUserIds 属性的其他方案,请参阅证书用户 ID

重要

如果用户名绑定策略使用已同步的属性,例如用户对象的 certificateUserIds、onPremisesUserPrincipalName 和 userPrincipalName 属性,请注意,在 Active Directory 中具有管理权限的帐户(例如在用户对象上具有委托权限的帐户或在 Microsoft Entra Connect Server 上具有管理权限的用户)可以进行更改,从而影响 Microsoft Entra ID 中的这些属性。

  1. 选择要与某个用户属性绑定的一个 X.509 证书字段,以创建用户名绑定。 用户名绑定顺序表示绑定的优先级。 第一个为最高优先级,以此类推。

    用户名绑定策略的屏幕截图。

    如果可以在证书上找到指定的 X.509 证书字段,但 Microsoft Entra ID 找不到使用该值的用户对象,则身份验证将失败。 Microsoft Entra ID 会尝试列表中的下一个绑定。

  2. 选择“保存”,保存更改。

最终配置如下图所示:

最终配置的屏幕截图。

步骤 5:测试配置

本部分介绍如何测试证书和自定义身份验证绑定规则。

测试证书

作为第一个配置测试,应尝试使用设备浏览器登录到 MyApps 门户

  1. 输入用户主体名称 (UPN)。

    用户主体名称的屏幕截图。

  2. 选择下一步

    使用证书登录的屏幕截图。

    如果启用了其他身份验证方法(例如手机登录或 FIDO2),用户可能会看到不同的登录屏幕。

    备用登录方法的屏幕截图。

  3. 选择“使用证书登录”。

  4. 在客户端证书选取器用户界面中选择正确的用户证书,然后选择“确定”。

    证书选取器 UI 的屏幕截图。

  5. 用户应会登录到 MyApps 门户

如果登录成功,则可确定:

  • 用户证书已预配到测试设备。
  • 已使用受信任 CA 正确配置 Microsoft Entra ID。
  • 正确配置用户名绑定,并且已找到用户并对其进行身份验证。

测试自定义身份验证绑定规则

让我们学习一个验证强身份验证的方案。 我们会创建两个身份验证策略规则,一个规则使用颁发者主题来满足单重身份验证条件,另一个规则使用策略 OID 来满足多重身份验证条件。

  1. 创建颁发者主题规则,并将保护级别设置为单重身份验证,将值设置为“CA 主题”值。 例如:

    CN = WoodgroveCA

  2. 创建策略 OID 规则,并将保护级别设置为多重身份验证,将值设置为证书中的某个策略 OID。 例如,1.2.3.4。

    策略 OID 规则的屏幕截图。

  3. 按照条件访问 - 需要 MFA 中的步骤创建条件访问策略,以便用户请求进行多重身份验证。

  4. 导航到 MyApps 门户。 输入 UPN 并选择“下一步”。

    用户主体名称的屏幕截图。

  5. 选择“使用证书登录”。

    使用证书登录的屏幕截图。

    如果启用了其他身份验证方法(例如手机登录或安全密钥),用户可能会看到不同的登录屏幕。

    备用登录方法的屏幕截图。

  6. 选择客户端证书,然后选择“证书信息”。

    客户端选取器的屏幕截图。

  7. 证书将显示,你也可以验证颁发者和策略 OID 值。 颁发者的屏幕截图。

  8. 若要查看策略 OID 值,请选择“详细信息”。

    身份验证详细信息的屏幕截图。

  9. 选择客户端证书,然后选择“确定”。

  10. 证书中的策略 OID 与所配置的值 1.2.3.4 相匹配,因此其满足多重身份验证条件。 同样,证书中的颁发者与所配置的值 CN=WoodgroveCA 相匹配,因此其满足单因素身份验证条件。

  11. 由于策略 OID 规则优先于颁发者规则,因此该证书满足多重身份验证条件。

  12. 用户的条件访问策略需要 MFA,并且证书满足多重身份验证条件,因此用户可以登录到应用程序。

测试用户名绑定策略

用户名绑定策略有助于验证用户的证书。 用户名绑定策略支持三个绑定:

  • IssuerAndSerialNumber>CertificateUserIds
  • IssuerAndSubject>CertificateUserIds
  • Subject>CertificateUserIds

默认情况下,Microsoft Entra ID 将证书中的主体名称映射到用户对象中的 UserPrincipalName 以确定用户。 身份验证策略管理员可以替代默认值并创建自定义映射,如前所述。

身份验证策略管理员需要启用新绑定。 若要准备,必须确保在用户对象的 CertificateUserIds 属性中更新相应的用户名绑定的正确值:

重要

Issuer、Subject 和 SerialNumber 值的格式应采用证书中格式的相反顺序。 请勿在 Issuer 或 Subject 值中添加空格。

颁发者和序列号手动映射

下面是颁发者和序列号手动映射的示例。 要添加的 Issuer 值为:

C=US,O=U.SGovernment,OU=DoD,OU=PKI,OU=CONTRACTOR,CN=CRL.BALA.SelfSignedCertificate

颁发者值的屏幕截图。

若要获取正确的序列号值,请运行以下命令,并存储 CertificateUserIds 中显示的值。 命令语法为:

Certutil –dump –v [~certificate path~] >> [~dumpFile path~] 

例如:

certutil -dump -v firstusercert.cer >> firstCertDump.txt

下面是 certutil 命令的示例:

certutil -dump -v C:\save\CBA\certs\CBATestRootProd\mfausercer.cer 

X509 Certificate: 
Version: 3 
Serial Number: 48efa06ba8127299499b069f133441b2 

   b2 41 34 13 9f 06 9b 49 99 72 12 a8 6b a0 ef 48 

CertificateUserId 中要添加的 SerialNumber 值为:

b24134139f069b49997212a86ba0ef48

CertificateUserId:

X509:<I>C=US,O=U.SGovernment,OU=DoD,OU=PKI,OU=CONTRACTOR,CN=CRL.BALA.SelfSignedCertificate<SR> b24134139f069b49997212a86ba0ef48 

颁发者和使用者手动映射

下面是颁发者和使用者手动映射的示例。 Issuer 值为:

与多个绑定一起使用时的颁发者值的屏幕截图。

Subject 值为:

“主题”值的屏幕截图。

CertificateUserId:

X509:<I>C=US,O=U.SGovernment,OU=DoD,OU=PKI,OU=CONTRACTOR,CN=CRL.BALA.SelfSignedCertificate<S> DC=com,DC=contoso,DC=corp,OU=UserAccounts,CN=FirstUserATCSession

使用者手动映射

下面是使用者手动映射的示例。 Subject 值为:

另一个“主题”值的屏幕截图。

CertificateUserId:

X509:<S>DC=com,DC=contoso,DC=corp,OU=UserAccounts,CN=FirstUserATCSession

测试相关性绑定

  1. 至少以身份验证策略管理员的身份登录到 Microsoft Entra 管理中心

  2. 浏览至 “保护”“身份验证方法”>“策略”。

  3. 在“管理”下,选择“身份验证方法”“基于证书的身份验证”。

  4. 选择“配置” 。

  5. 在租户级别设置所需的相关性绑定

    重要

    请谨慎使用租户范围的相关性设置。 如果更改租户所需的相关性绑定,并且用户对象中没有适当的值,则可以锁定整个租户。 同样,如果创建一个应用于所有用户并且需要高相关性绑定的自定义规则,则可以锁定租户中的用户。

    有关如何设置所需的相关性绑定的屏幕截图。

  6. 若要进行测试,请为“所需的相关性绑定”选择“”。

  7. 添加类似于 SKI 的高相关性绑定。 在“用户名绑定”下选择“添加规则”。

  8. 选择“SKI”,然后选择“添加”。

    有关如何添加相关性绑定的屏幕截图。

    完成后,规则如以下屏幕截图所示:

    已完成的相关性绑定的屏幕截图。

  9. 更新所有用户对象的 CertificateUserIds 属性,以从用户证书获取正确的 SKI 值。 有关详细信息,请参阅 certificateUserID 支持的模式

  10. 为身份验证绑定创建自定义规则。

  11. 选择 添加

    自定义身份验证绑定的屏幕截图。

    完成后,规则如以下屏幕截图所示:

    自定义规则的屏幕截图。

  12. 使用策略 OID 9.8.7.5 从证书中更新具有正确 SKI 值的用户 CertificateUserId。

  13. 使用策略 OID 9.8.7.5 的证书进行测试,用户应使用 SKI 绑定进行身份验证,并仅使用证书获取 MFA。

使用 Microsoft Graph API 启用 CBA

若要使用 Graph API 启用 CBA 并配置用户名绑定,请完成以下步骤。

  1. 转到 Microsoft Graph Explorer

  2. 选择“登录到 Graph Explorer”,并登录到租户。

  3. 按步骤同意 Policy.ReadWrite.AuthenticationMethod 委托的权限

  4. 获取所有身份验证方法:

    GET  https://graph.microsoft.com/v1.0/policies/authenticationmethodspolicy
    
  5. 获取 x509 证书身份验证方法的相关配置:

    GET https://graph.microsoft.com/v1.0/policies/authenticationmethodspolicy/authenticationMethodConfigurations/X509Certificate
    
  6. 默认情况下,x509 证书身份验证方法处于禁用状态。 要允许用户使用证书登录,必须启用身份验证方法,并通过更新操作配置身份验证和用户名绑定策略。 要更新策略,请运行 PATCH 请求。

    请求正文:

    PATCH https://graph.microsoft.com/v1.0/policies/authenticationMethodsPolicy/authenticationMethodConfigurations/x509Certificate
    Content-Type: application/json
    
    {
        "@odata.type": "#microsoft.graph.x509CertificateAuthenticationMethodConfiguration",
        "id": "X509Certificate",
        "state": "enabled",
        "certificateUserBindings": [
            {
                "x509CertificateField": "PrincipalName",
                "userProperty": "onPremisesUserPrincipalName",
                "priority": 1
            },
            {
                "x509CertificateField": "RFC822Name",
                "userProperty": "userPrincipalName",
                "priority": 2
            }, 
            {
                "x509CertificateField": "PrincipalName",
                "userProperty": "certificateUserIds",
                "priority": 3
            }
        ],
        "authenticationModeConfiguration": {
            "x509CertificateAuthenticationDefaultMode": "x509CertificateSingleFactor",
            "rules": [
                {
                    "x509CertificateRuleType": "issuerSubject",
                    "identifier": "CN=WoodgroveCA ",
                    "x509CertificateAuthenticationMode": "x509CertificateMultiFactor"
                },
                {
                    "x509CertificateRuleType": "policyOID",
                    "identifier": "1.2.3.4",
                    "x509CertificateAuthenticationMode": "x509CertificateMultiFactor"
                }
            ]
        },
        "includeTargets": [
            {
                "targetType": "group",
                "id": "all_users",
                "isRegistrationRequired": false
            }
        ]
    }
    
  7. 你将收到 204 No content 响应代码。 重新运行 GET 请求,确保正确更新策略。

  8. 通过使用满足策略的证书进行登录来测试配置。

使用 Microsoft PowerShell 启用 CBA

  1. 打开 PowerShell。
  2. 连接到 Microsoft Graph:
    Connect-MgGraph -Scopes "Policy.ReadWrite.AuthenticationMethod"
    
  3. 创建用于为 CBA 用户定义组的变量:
    $group = Get-MgGroup -Filter "displayName eq 'CBATestGroup'"
    
  4. 定义请求正文:
    $body = @{
    "@odata.type" = "#microsoft.graph.x509CertificateAuthenticationMethodConfiguration"
    "id" = "X509Certificate"
    "state" = "enabled"
    "certificateUserBindings" = @(
        @{
            "@odata.type" = "#microsoft.graph.x509CertificateUserBinding"
            "x509CertificateField" = "SubjectKeyIdentifier"
            "userProperty" = "certificateUserIds"
            "priority" = 1
        },
        @{
            "@odata.type" = "#microsoft.graph.x509CertificateUserBinding"
            "x509CertificateField" = "PrincipalName"
            "userProperty" = "UserPrincipalName"
            "priority" = 2
        },
        @{
            "@odata.type" = "#microsoft.graph.x509CertificateUserBinding"
            "x509CertificateField" = "RFC822Name"
            "userProperty" = "userPrincipalName"
            "priority" = 3
        }
    )
    "authenticationModeConfiguration" = @{
        "@odata.type" = "#microsoft.graph.x509CertificateAuthenticationModeConfiguration"
        "x509CertificateAuthenticationDefaultMode" = "x509CertificateMultiFactor"
        "rules" = @(
            @{
                "@odata.type" = "#microsoft.graph.x509CertificateRule"
                "x509CertificateRuleType" = "policyOID"
                "identifier" = "1.3.6.1.4.1.311.21.1"
                "x509CertificateAuthenticationMode" = "x509CertificateMultiFactor"
            }
        )
    }
    "includeTargets" = @(
        @{
            "targetType" = "group"
            "id" = $group.Id
            "isRegistrationRequired" = $false
        }
    ) } | ConvertTo-Json -Depth 5
    
  5. 执行 PATCH 请求:
    Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/policies/authenticationMethodsPolicy/authenticationMethodConfigurations/x509Certificate" -Body $body -ContentType "application/json"
    

后续步骤