其它验证模式
必需模式是 CloudFront 双向 TLS 的默认模式:CloudFront 会验证每个客户端证书并拒绝失败的连接。但是,为了支持其它使用案例(例如,提供经过 MTLS 身份验证和未经身份验证的客户端组合的应用程序,或者原始服务器执行其自己的 mTLS 验证的环境),CloudFront 支持另外两种模式。
可选模式专为具有混合客户端群体的应用程序而设计。例如,一个门户,它向未经身份验证的浏览器提供公共内容,同时将 API 端点限制为提供有效证书的客户端。或者是迁移场景,即您正在逐步将客户端加入到 mTLS,并且需要在过渡期间同时支持经过身份验证和未经身份验证的连接。
直通模式专为其原始服务器已经执行 mTLS 验证的客户而设计。例如,从本地反向代理、其它 CDN 或已经处理证书验证的应用程序负载均衡器迁移的服务。直通模式支持这些客户将 CloudFront 置于其应用程序的前面,而无需在边缘重新实施验证逻辑。
可选模式
客户端证书验证可选模式
CloudFront 提供了一种备用的可选客户端证书验证模式,该模式可验证所提供的客户端证书,但会向未提供证书的客户端授予访问权限。
可选模式行为
-
授权与拥有有效证书的客户端建立连接(无效证书将遭拒绝)。
-
支持与无证书的客户端建立连接。
-
允许通过单个分配实施的混合客户端身份验证场景。
可选模式非常适合向 mTLS 身份验证逐步迁移,既能支持拥有证书的客户端与无证书的客户端,又能保持与传统客户端的向后兼容性。
注意
在可选模式下,即使客户端未提供证书,连接函数也将被调用。这可让您实施自定义逻辑,例如记录客户端 IP 地址或根据是否提供了证书来应用不同的策略。
配置可选模式(控制台)
-
在分配设置中,导航至常规选项卡,选择编辑。
-
滚动到连接性容器中的查看器双向身份验证(mTLS) 部分。
-
对于客户端证书验证模式,选择可选。
-
保存更改。
配置可选模式(Amazon CLI)
以下示例演示如何配置可选模式:
"ViewerMtlsConfig": { "Mode": "optional", ...other settings }
自定义证书标头
在查看器请求 CloudFront Functions 中使用 mTLS 助手函数,来在证书标头到达源之前对其进行重命名、重新格式化或组合。从使用不同标头名称或证书编码格式的其它服务迁移时,这很有用。
直通模式
直通模式支持在其源处具有现有 mTLS 实施的客户使用 CloudFront。CloudFront 会终止 TLS 连接,并将客户端证书作为 HTTP 标头转发到源。源执行所有证书验证,包括链验证、吊销检查和自定义策略执行。
直通模式的工作原理
-
客户端连接到 CloudFront,并在 TLS 握手期间提供客户端证书。
-
CloudFront 在不根据信任存储验证证书的情况下完成 TLS 握手。
-
CloudFront 将客户端证书和证书链作为 HTTP 标头添加到请求中。
-
请求转发到源。不缓存任何内容。
-
源验证证书并处理请求。
客户端也可以在不提供证书的情况下进行连接。源或连接函数处理空证书场景。
注意
在直通模式下,即使客户端未提供证书,也调用连接函数。这可让您实施自定义逻辑,例如记录客户端 IP 地址或根据是否提供了证书来应用不同的策略。
配置要求
-
无信任存储:分配必须具有零信任存储关联。
-
缓存已禁用:所有缓存行为都必须使用托管式
CachingDisabled缓存策略。 -
禁止 Origin Shield:无法启用 Origin Shield。
-
禁止 Lambda@Edge:不支持 Lambda@Edge 函数关联。
-
需要源请求策略:您必须在源请求策略中将
Client-Cert和Client-Cert-Chain标头列入许可名单,这样源才能接收它们。 -
证书链深度:CloudFront 允许将客户端证书链转发到源的最大深度为 4。
启用直通模式
控制台
-
更新所有缓存行为以使用托管式
CachingDisabled缓存策略。 -
打开 CloudFront 控制台并选择您的分配。
-
选择常规选项卡,然后在“设置”下选择编辑。
-
在查看器双向身份验证(mTLS)下,选择直通。
-
选择保存更改。
Amazon CLI
确保所有缓存行为都引用托管式 CachingDisabled 策略,然后更新分配配置:
{ "ViewerMtlsConfig": { "Mode": "passthrough" } }
标头转发到源
CloudFront 将以下标头添加到发送到源的请求中:
-
Client-Cert:客户端提供的终端实体(叶)证书,采用 base64 编码。 -
Client-Cert-Chain:证书链(不包括叶),作为结构化字段列表。密码必须采用 base64 编码。Client-Cert-Chain是列表类型的标头。它可能在请求中多次出现。串联所有值可保留原始链顺序。当客户端仅提供单个证书时,将省略Client-Cert-Chain。
在添加实际证书数据之前,CloudFront 会丢弃来自客户端请求的任何传入 Client-Cert 或 Client-Cert-Chain 标头。这样可以防止标头欺骗。
自定义证书标头
在查看器请求 CloudFront Functions 中使用 mTLS 助手函数,来在证书标头到达源之前对其进行重命名、重新格式化或组合。从使用不同标头名称或证书编码格式的其它服务迁移时,这很有用。