7.4.4. Multiple Message Component Contexts (多个消息组成部分上下文)
7.4.4. Multiple Message Component Contexts (多个消息组成部分上下文)
单个消息内存在的每个签名的推导消息组成部分值上下文可能不同. 在代理变更消息并除任何现有签名外对变更值添加签名时尤其如此. 例如, 反向代理可能将请求中的公共主机名替换为转发目标的服务主机主机名. 若客户端与反向代理都添加覆盖 @authority 的签名, 服务主机将在请求上看到两个签名, 各自对 @authority 消息组成部分签名不同值, 反映消息从客户端到服务主机路径上对该组成部分的变更.
此情况下, 内部服务通常仅验证其中一个签名或使用外部配置信息, 见第 7.4.3 节. 然而, 处理两个签名的验证者需要对每个签名使用不同消息组成部分上下文, 因为每个签名的 @authority 组成部分值不同. 此类验证者需要知晓传入消息的反向代理上下文与来自反向代理的服务目标消息上下文. 验证者需要特别小心将正确上下文应用于正确签名, 否则攻击者可能利用对此复杂设置的认知混淆验证者输入.
此类验证者还需要确保签名之间消息组成部分上下文的任何差异为预期且允许. 例如, 上述场景中反向代理可在 Forwarded 头字段中包含原始主机名, 并可签名 @authority, forwarded 与 Signature 字段中的客户端条目. 验证者可使用 Forwarded 头字段中的主机名确认主机名按预期转换.