在 Azure 容器应用中使用 mTLS

相互传输层安全性(mTLS)是标准 TLS 协议的扩展,可提供客户端和服务器之间的相互身份验证。 Azure 容器应用支持运行启用了 mTLS 的应用程序,以提高应用程序中的安全性。

在 Azure 容器应用中,所有传入请求在路由到目标容器应用之前通过 Envoy 传递。 使用 mTLS 时,客户端会与 Envoy 交换证书。 其中每个证书都放置在 X-Forwarded-Client-Cert 标头中,然后发送到应用程序。

若要在 Azure 容器应用中生成 mTLS 应用程序,需要:

  1. 将 Azure 容器应用配置为要求来自对等方的客户端证书。
  2. 从请求中提取 X.509 证书。

本文介绍如何通过从客户端提取 X.509 证书来处理对等 mTLS 握手证书。

需要客户端证书

使用以下步骤将容器应用配置为要求客户端证书:

  1. 在 Azure 门户中打开容器应用。
  2. “网络”下,选择 “入口”。
  3. 选择“启用”选项。
  4. 对于 入口类型,请选择 “HTTP”。
  5. “客户端证书”模式下,选择“ 需要”。
  6. 选择保存以应用更改。

有关在 Azure 容器应用中配置客户端证书身份验证的详细信息,请参阅 在 Azure 容器应用中配置客户端证书身份验证

提取 X.509 证书

若要从X.509标头中提取X-Forwarded-Client-Cert证书,请分析应用程序代码中的标头值。 启用 mTLS 时,此标头包含客户端证书信息。 证书以分号分隔的列表格式提供,其中包括哈希、证书和链。

您需要在应用程序中提取和解析证书的步骤如下:

  1. 从传入的请求中检索X-Forwarded-Client-Cert标头。
  2. 分析标头值以提取证书详细信息。
  3. 将分析的证书放入标准证书属性,以便进一步验证或使用。

分析后,可以验证证书并根据应用程序的需求使用这些证书。

Example

在 Java 应用程序中,可以使用 反应式 X.509 身份验证筛选器 将用户信息从证书映射到安全上下文。 有关 Azure 容器应用中具有 mTLS 的 Java 应用程序的完整示例,请参阅 Azure 容器应用中的 mTLS 服务器应用程序