Azure Front Door 中的双向 TLS 身份验证(预览版)

适用于: ✔️ Front Door Premium

Important

Azure Front Door 中的 Mutual TLS 目前处于预览阶段。 有关适用于 beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 Azure 预览补充使用条款

互助TLS(mTLS)认证,或称客户端认证,确保客户端与服务器之间的流量在双向范围内安全且受信任。 通过使用mutual TLS,你可以配置Azure Front Door通过出示有效的客户端证书来验证客户端身份。 互惠TLS认证适用于需要安全识别和管理客户以针对资源的场景,如企业对企业(B2B)应用、物联网(IoT)应用、银行应用、VPN、企业网络等。

你可以将相互 TLS 与 Azure Front Door 支持的其他授权和身份验证方法结合使用。

注释

Azure Front Door Premium 支持双向 TLS 身份验证。

双向 TLS 验证模式

  • 禁用 mTLS:不需要客户端证书和验证。 此选项为默认值。

  • 启用mTLS:

    • 客户证书要求并验证: 客户证书是必须的。 Azure Front Door 负责全面验证,包括检查客户端证书存在、有效性,以及是否被撤销、Root CA 链和 SAN/CN 列表。 Azure Front Door 会将带有 header X-Azure-ClientCertificate 的请求转发到源端。 当启用mTLS时,这个选项是默认的。

    • 需要客户端证书但未验证: 客户证书是必须的。 Azure Front Door 不执行其他验证。 Azure Front Door 会丢弃不包含证书的请求。 源站必须执行所有验证。 默认情况下,Azure Front Door 通过头部将证书传递给后端。

      • 客户端证书验证(如有): 客户端证书不是必须的。 Azure Front Door 在存在客户端证书时会执行完整验证,并通过 X-Azure-ClientCertificate 标头将客户端证书转发到源端。 如果客户端没有提供客户端证书,Azure Front Door 会将请求转发给源端进行进一步验证。
    • mTLS直通至起点: 客户证书不是必须的。 Azure Front Door 不执行任何验证。 源站必须执行所有验证。

客户端认证验证

当你配置 Azure Front Door 验证客户端证书时,它会检查以下信息:

  • 当前日期低于证书 Not After 日期。

  • 当前日期大于或等于证书 Not Before 日期。

  • 证书扩展密钥用法未包含,或者如果包含,则含有客户端身份验证 OID。

  • 证书的有效性和完整性,证明证书格式未被更改。

  • 检查证书链,如果客户端证书是由指定域名的可信发行方颁发的,证书的 CN(证书名称)形成一条不中断的链。

您还可以配置可选的验证功能,例如:

  • 根据上传到 Azure Front Door 的允许 SAN 列表,验证客户端证书的 SAN/CN 扩展。 Azure Front Door 自定义域名主机名必须明确包含在本列表中,才能被视为相互 TLS 验证的有效对象。 SAN先被验证,如果没有匹配或SAN为空,则验证CN。 如果SAN或CN中的一个与Azure Front Door上配置的允许SAN列表匹配,验证就会成功。

  • 通过使用OCSP(在线证书状态协议)检查客户端证书的吊销状态。

注释

Azure Front Door 的允许域名列表不支持通配符域名。 如果客户端证书的 SAN/CN 中包含通配符域名,且 Azure Front Door 允许列表中的一级子域名匹配,则验证通过。

证书吊销检查

Azure Front Door 支持对证书撤销状态进行验证。 默认情况下,它已启用。 在验证过程中,Azure Front Door 通过其 Authority Information Access(AIA)扩展中定义的 OCSP 响应器查询客户端提供的证书。 如果客户端证书被撤销,Azure Front Door 会向客户端回复 HTTP 403 状态码及其原因。 如果证书有效,Azure Front Door 会继续处理该请求。

mTLS支持公共和私有证书吗?

Azure Front Door 目前支持由知名公共证书颁发机构和私人设立的证书颁发机构颁发的证书。

  • 知名证书机构颁发的CA证书:可信证书存储通常包括中间证书和根证书,使得可信连接几乎无需设备额外配置。

  • 由组织已建立的证书机构颁发的CA证书: 你的组织通常私下发放这些证书,其他机构不信任它们。 您必须将中间和根证书导入可信的证书存储,以便客户端建立链信任。

然而,Azure Front Door 会对客户端证书进行扩展密钥使用(EKU)检查,以确保其为客户端认证设计。 由于行业变化,公共证书颁发机构(CA)很快停止发行带有所需EKU的客户端认证证书。

在 Azure Front Door 上的 mTLS 场景中,请改为使用私有 CA,这些私有 CA 可继续签发具有正确 EKU 的证书。 这一转换确保了客户端身份验证的不中断和安全。

在前门域实现mTLS前的重要设计考虑

  • 在新域和新端点启用mTLS,以避免不必要的停机。

  • 启用 mTLS 后,你将无法在路由上启用缓存,也无法启用带缓存的规则引擎路由覆盖。 这一限制防止将缓存内容返回给未认证的客户端。

  • mTLS 在域名上可以正常工作。 不过,为了确保安全,防止恶意用户绕过 mTLS 访问你的源端,Azure Front Door 端点上有一个 mTLS 控制。 在自定义域启用 mTLS 之前,先在该自定义域将关联的 Azure Front Door 端点启用 mTLS。 所有启用 mTLS 的域名只能与此类端点下的路由相关联。 你不能将拥有混合互认证状态的域名关联到同一个端点。

  • 当 Front Door 端点启用了 mTLS,你无法将Azure Front Door端点域与路由关联。 反过来,你需要在启用端点上的mTLS之前,先将端点域与该端所有路由断开关联。

  • 如果你在现有的 Azure Front Door 域上开启 mTLS,会有停机时间,因为你需要做以下更改。 为新的自定义域名启用mTLS。

  1. 创建一个启用 mTLS 的新端点,或者使用任何启用 mTLS 的现有 Azure Front Door 端点。

  2. 将自定义域与未启用mTLS的现有路由和终端断开关联。

  3. 然后将自定义域重新关联到端点。

  • 一旦在域上启用了互认证,禁用它也会导致停机。

    1. 将自定义域与现有支持mTLS的终端下的所有路由断开关联。

    2. 禁用域上的mTLS。

    3. 将域重新关联到未启用mTLS的另一个端点。

  • 在你的起始地址添加访问控制,以验证请求是否来自有效的前门。 有关详细信息,请参阅保护发送到 Azure Front Door 源的流量

  • CA 证书管理:通过 Azure 密钥保管库 上传根证书和最多三个中间证书(PEM,<25 KB)。 不支持自动轮换,但双 CA 支持可实现平滑轮换。

  • Azure Front Door 对客户端证书进行扩展密钥使用(EKU)检查,以确保证书是为客户端认证而设,这是一项重要的安全措施。 然而,由于行业变革,公共证书授权机构(CA)很快将停止发行带有所需EKU的客户端认证证书。 转向使用私有CA,这些CA可以继续在Azure Front Door上为mTLS场景颁发正确的EKU证书,确保客户端认证不中断且安全。

  • 客户正在逐渐远离OCSP。 在 Front Door 证书撤销检查期间,Azure Front Door 目前只检查 OCSP。

  • 如果客户端发送的请求带有以下头部,Azure Front Door 会丢弃这些头部并将请求转发到起点。

    • X-Azure-ClientCertEndDate
    • X-Azure-ClientCertFingerprint
    • X-Azure-ClientCertIssuer
    • X-Azure-ClientCertSerial
    • X-Azure-ClientCertStartDate
    • X-Azure-ClientCertSubject
    • X-Azure-ClientCertVerify
    • X-Azure-ClientCertificate

该解决方案提供哪些指标和日志字段?

该解揭示了以下指标:

  • mTLS请求数量。

  • mTLS请求失败。

  • mTLS错误请求,按错误类型、SNI主机名和TLS协议细分。

配置配额上限

  • 客户端CA证书链可以包含根证书和最多三个中间条。

  • CA证书必须采用PEM编码,且容量不超过25 KB。

  • 不支持自动旋转。

  • 你可以添加两个 CA 证书,以便在证书到期或被吊销时进行无缝轮换。 Azure Front Door 在运行时使用有效的 CA 证书进行验证。

配置步骤

  1. 想了解更多限制,请参阅 重要的设计考虑 部分。 建议在新端点和域上启用mTLS。

  2. 登录 Azure 门户,搜索您的 Front Door 个人资料。

  3. 安全性中,选择 Mutual TLS CA证书。 如果你之前上传过 mTLS 证书链,你会看到现有 mTLS 证书链的列表。

  4. 选择 + 添加。 你会看到你能访问的 密钥保管库 和 Secret 对象。 选择你想用作mTLS握手公钥部分的节点。

  5. 设置中选择 “前门管理器”。 你可以看到你的端点列表。

  6. 选择 + 添加端点,并选中 强制实施双向 TLS

    注释

    启用强制实施双向 TLS后,不能将 Azure Front Door 默认域名(例如,.z01.azurefd.net)添加为此终结点上的路由的域名。 在创建路由之前,请进入下一步,创建启用mTLS的自定义域名。

  7. 设置下面,选择。 你看到的是你现有的自定义域名列表。

  8. 选择 + 添加

  9. 添加域 页面中,配置你的域,然后向下滚动到 高级设置 ,选择 启用互助TLS 以配置该域的互助TLS。

  10. 选择 添加 以创建域名。

    1. 双向 TLS 模式:从以下四个选项中选择

      • 需要客户证书并验证
      • 需要客户端证书但未验证
      • 客户端证书验证(如有)
      • mTLS直通至起始点
    2. 填写后,选择要供 Azure Front Door 用于验证客户端证书的 CA 证书。

    3. 启用证书吊销检查。

    4. 添加用于核对的 SAN/CN 列表。 Azure Front Door 自定义域名主机名必须明确包含在本列表中,才能被视为相互 TLS 验证的有效对象。

  11. 成功创建域名后,进入之前创建的端点,在前门管理器中添加路由,将该域名关联到正确的源组。

  12. 确认mTLS是否按预期工作。 你可以通过将本地主机IP绑定到Azure Front Door的IP之一来检查这个条件。

  13. 验证成功后,将 DNS 中的自定义域 CNMAE 记录更新为指向 Azure Front Door 端点。

    限制后端/源端访问,只接受来自 Azure Front Door 的流量,这样可以防止直接访问源端绕过 mTLS。 有关详细信息,请参阅保护发送到 Azure Front Door 源的流量

要编辑域上的现有mTLS配置,请在 页面选择域名。 “ 编辑域名 ”页面会显示当前的 mTLS 配置。

注释

在自定义域上禁用mTLS可能会导致停机,因为你需要先将自定义域与路由和端点断开关联,然后在域上禁用mTLS。 减轻停机影响的一种方法是,在 Azure Front Door 上进行更改期间,将流量路由回源站。

Azure Front Door 针对 mTLS 请求返回意外的 403(禁止)

如需更多诊断信息,请在向 Azure Front Door 发送请求时附带标头 X-Azure-DebugInfo:1。 在响应中,Front Door 会返回调试标头 X-Azure-Externalerror,其值可提示错误原因。 下表列出了误差值及其含义。

Error Description
ClientCert已过期 提交给验证的客户端证书已过期。
ClientCertSelfSigned 客户端证书为自签名,发行方和叶子证书是同一证书。
未找到客户端证书颁发者 找不到客户端证书的发行方。
客户端证书链过长 客户端证书链包含超过五个证书,包括叶证书。
客户端证书用途不正确 证书在 EKU(增强型密钥用法)中不适用于客户端身份验证。
ClientCertRootCAUntrusted 证书的根证书授权机构不被信任。
ClientCertIssuerSubjectMismatch 证书被拒是因为主题名称与发行人名称不符。
ClientCertCNSANMismatch CN SAN 客户端证书列表与 mTLS 配置 Azure 门户时指定的允许 FQDN 不符。
缺少客户端证书 客户端证书不会显示给Azure Front Door。
客户端证书已被吊销 客户证书或发行人证书被吊销。
客户端标头过长 客户端发送的请求头过长。
客户端证书无效 通用客户端证书错误。