2.4. 处理规则
2.4. 处理规则
本节概述适用于 TTRP 的处理规则: 该 TTRP 已协商相互认证的 TLS 连接, 并将该连接中的客户端证书传递给后端源服务器. 该技术作为配置或部署选项使用, 本文所述处理规则适用于启用了该选项的服务器.
TTRP 与客户端协商使用相互认证的 TLS 连接, 如 [TLS] 或 [TLS1.2] 中所述, 并根据其策略和受信任证书颁发机构验证客户端证书. 底层 TLS 连接上的每个 HTTP 请求都会经过以下修改后分派给源服务器:
-
如第 2.2 节所述, 客户端证书被放入所分派请求的 Client-Cert 头字段.
-
如果这样配置, 如第 2.3 节所述, 客户端证书的验证链被放入请求的 Client-Cert-Chain 头字段.
-
在转发请求之前, 原始传入请求中出现的任何 Client-Cert 或 Client-Cert-Chain 头字段都必须 (MUST) 被移除或覆盖. 带有 Client-Cert 或 Client-Cert-Chain 头字段的传入请求可以 (MAY) 以 HTTP 400 响应拒绝.
如果通过未协商使用客户端证书认证的 TLS 连接向 TTRP 发出请求, 则在将该请求分派给后端服务器之前, 必须 (MUST) 通过移除所有出现的 Client-Cert 和 Client-Cert-Chain 头字段来对请求进行清理.
随后, 后端源服务器可以使用请求中的 Client-Cert 头字段来确定客户端到 TTRP 的连接是否经过相互认证; 如果是, 还可确定客户端由此出示的证书. 基于客户端证书 (或缺少证书) 的访问控制决策可以通过选择适当的响应内容来传达; 如果证书被认为不适合给定上下文, 也可以通过 HTTP 403 响应传达. 注意, 依赖 TLS 层错误指示来获知证书不可接受的 TLS 客户端将不会收到这些信号.
当 Client-Cert 请求头字段的值用于选择响应时 (例如响应内容受访问控制), 响应必须 (MUST) 要么不可缓存 (例如发送 Cache-Control: no-store), 要么通过发送 Vary: Client-Cert 响应头, 指定该响应只可被后续具有相同 Client-Cert 头字段值的请求选择性重用. 如果 TTRP 遇到 Vary 头字段中包含 Client-Cert 或 Client-Cert-Chain 的响应 ([HTTP] 第 12.5.5 节), 则应 (SHOULD) 通过将 Vary 响应头字段的值转换为 *, 防止用户代理缓存该响应.
转发代理和其他中间方不得 (MUST NOT) 向请求添加 Client-Cert 或 Client-Cert-Chain 头字段, 也不得修改现有的 Client-Cert 或 Client-Cert-Chain 头字段. 同样, 客户端不得 (MUST NOT) 在请求中使用 Client-Cert 或 Client-Cert-Chain 头字段.