View a markdown version of this page

其它验证模式 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

其它验证模式

必需模式是 CloudFront 双向 TLS 的默认模式:CloudFront 会验证每个客户端证书并拒绝失败的连接。但是,为了支持其它使用案例(例如,提供经过 MTLS 身份验证和未经身份验证的客户端组合的应用程序,或者原始服务器执行其自己的 mTLS 验证的环境),CloudFront 支持另外两种模式。

可选模式专为具有混合客户端群体的应用程序而设计。例如,一个门户,它向未经身份验证的浏览器提供公共内容,同时将 API 端点限制为提供有效证书的客户端。或者是迁移场景,即您正在逐步将客户端加入到 mTLS,并且需要在过渡期间同时支持经过身份验证和未经身份验证的连接。

直通模式专为其原始服务器已经执行 mTLS 验证的客户而设计。例如,从本地反向代理、其它 CDN 或已经处理证书验证的应用程序负载均衡器迁移的服务。直通模式支持这些客户将 CloudFront 置于其应用程序的前面,而无需在边缘重新实施验证逻辑。

可选模式

客户端证书验证可选模式

CloudFront 提供了一种备用的可选客户端证书验证模式,该模式可验证所提供的客户端证书,但会向未提供证书的客户端授予访问权限。

可选模式行为

  • 授权与拥有有效证书的客户端建立连接(无效证书将遭拒绝)。

  • 支持与无证书的客户端建立连接。

  • 允许通过单个分配实施的混合客户端身份验证场景。

可选模式非常适合向 mTLS 身份验证逐步迁移,既能支持拥有证书的客户端与无证书的客户端,又能保持与传统客户端的向后兼容性。

注意

在可选模式下,即使客户端未提供证书,连接函数也将被调用。这可让您实施自定义逻辑,例如记录客户端 IP 地址或根据是否提供了证书来应用不同的策略。

配置可选模式(控制台)

  1. 在分配设置中,导航至常规选项卡,选择编辑

  2. 滚动到连接性容器中的查看器双向身份验证(mTLS) 部分。

  3. 对于客户端证书验证模式,选择可选

  4. 保存更改。

配置可选模式(Amazon CLI)

以下示例演示如何配置可选模式:

"ViewerMtlsConfig": { "Mode": "optional", ...other settings }

自定义证书标头

在查看器请求 CloudFront Functions 中使用 mTLS 助手函数,来在证书标头到达源之前对其进行重命名、重新格式化或组合。从使用不同标头名称或证书编码格式的其它服务迁移时,这很有用。

直通模式

直通模式支持在其源处具有现有 mTLS 实施的客户使用 CloudFront。CloudFront 会终止 TLS 连接,并将客户端证书作为 HTTP 标头转发到源。源执行所有证书验证,包括链验证、吊销检查和自定义策略执行。

直通模式的工作原理

  1. 客户端连接到 CloudFront,并在 TLS 握手期间提供客户端证书。

  2. CloudFront 在不根据信任存储验证证书的情况下完成 TLS 握手。

  3. CloudFront 将客户端证书和证书链作为 HTTP 标头添加到请求中。

  4. 请求转发到源。不缓存任何内容。

  5. 源验证证书并处理请求。

客户端也可以在不提供证书的情况下进行连接。源或连接函数处理空证书场景。

注意

在直通模式下,即使客户端未提供证书,也调用连接函数。这可让您实施自定义逻辑,例如记录客户端 IP 地址或根据是否提供了证书来应用不同的策略。

配置要求

  • 无信任存储:分配必须具有零信任存储关联。

  • 缓存已禁用:所有缓存行为都必须使用托管式 CachingDisabled 缓存策略。

  • 禁止 Origin Shield:无法启用 Origin Shield。

  • 禁止 Lambda@Edge:不支持 Lambda@Edge 函数关联。

  • 需要源请求策略:您必须在源请求策略中将 Client-CertClient-Cert-Chain 标头列入许可名单,这样源才能接收它们。

  • 证书链深度:CloudFront 允许将客户端证书链转发到源的最大深度为 4。

启用直通模式

控制台

  1. 更新所有缓存行为以使用托管式 CachingDisabled 缓存策略。

  2. 打开 CloudFront 控制台并选择您的分配。

  3. 选择常规选项卡,然后在“设置”下选择编辑

  4. 查看器双向身份验证(mTLS)下,选择直通

  5. 选择保存更改

Amazon CLI

确保所有缓存行为都引用托管式 CachingDisabled 策略,然后更新分配配置:

{ "ViewerMtlsConfig": { "Mode": "passthrough" } }

标头转发到源

CloudFront 将以下标头添加到发送到源的请求中:

  • Client-Cert:客户端提供的终端实体(叶)证书,采用 base64 编码。

  • Client-Cert-Chain:证书链(不包括叶),作为结构化字段列表。密码必须采用 base64 编码。Client-Cert-Chain 是列表类型的标头。它可能在请求中多次出现。串联所有值可保留原始链顺序。当客户端仅提供单个证书时,将省略 Client-Cert-Chain

在添加实际证书数据之前,CloudFront 会丢弃来自客户端请求的任何传入 Client-CertClient-Cert-Chain 标头。这样可以防止标头欺骗。

自定义证书标头

在查看器请求 CloudFront Functions 中使用 mTLS 助手函数,来在证书标头到达源之前对其进行重命名、重新格式化或组合。从使用不同标头名称或证书编码格式的其它服务迁移时,这很有用。