Skip to main content

8. User Agent Processing Model (用户代理处理模型)

本节描述UAs的HTTP严格传输安全处理模型. 该模型有几个方面, 由以下子节列举.

本处理模型假设UA实现IDNA2008 [RFC5890], 或可能是IDNA2003 [RFC3490], 如第13节 ("Internationalized Domain Names for Applications (IDNA): Dependency and Migration") 中所述. 它还假设在本规范上下文中操作的所有域名在本节中指定的处理之前已经按照第10节 ("Domain Name IDNA-Canonicalization") 中概述的那样进行了IDNA规范化.

注意 (NOTE): 引用 [RFC3490] 是由于其在可预见的未来对实际部署的持续相关性.

上述假设意味着本处理模型还专门假设在本节中指定的处理之前, 已经在域名的IDNA规范化过程中对域名进行了适当的IDNA和Unicode验证以及字符列表测试. 有关基本原理和进一步详细信息, 请参见第14.10节 ("Internationalized Domain Names") 中特定于IDNA的安全注意事项.

8.1 Strict-Transport-Security Response Header Field Processing (Strict-Transport-Security响应头字段处理)

如果通过安全传输接收的HTTP响应包含符合第6.1节 ("Strict-Transport-Security HTTP Response Header Field") 中指定的语法的STS头字段, 并且没有底层安全传输错误或警告 (参见第8.4节), UA必须 (MUST):

  • 如果尚未标注, 则将主机标注为已知HSTS主机 (参见第8.1.1节 ("Noting an HSTS Host - Storage Model")),

  • 如果max-age和includeSubDomains头字段值令牌中的一个或两个传达的信息与UA已维护的信息不同, 则更新UA对已知HSTS主机的缓存信息.

    max-age值本质上是相对于接收STS头字段的时间的"生存时间 (time to live)"值.

    如果max-age头字段值令牌的值为零, 如果HSTS主机已知, UA必须 (MUST) 删除其缓存的HSTS策略信息 (包括includeSubDomains指令, 如果断言), 或者如果尚未已知, UA禁止 (MUST NOT) 标注此HSTS主机.

    如果UA在通过安全传输的HTTP响应消息中接收到多个STS头字段, 则UA必须 (MUST) 仅处理第一个这样的头字段.

否则:

  • 如果通过不安全传输接收到HTTP响应, UA必须 (MUST) 忽略任何存在的STS头字段.

  • UA必须 (MUST) 忽略任何不符合第6.1节 ("Strict-Transport-Security HTTP Response Header Field") 中指定的语法的STS头字段.

8.1.1 Noting an HSTS Host - Storage Model (标注HSTS主机 - 存储模型)

如果与Request-URI (主机响应的消息) 中的host产生式匹配的子字符串在语法上与 [RFC3986] 第3.2.2节中的IP-literal或IPv4address产生式匹配, 则UA禁止 (MUST NOT) 将此主机标注为已知HSTS主机.

否则, 如果子字符串不按照第8.2节 ("Known HSTS Host Domain Name Matching") 中指定的匹配过程与已知HSTS主机的域名一致地匹配, 则UA必须 (MUST) 将此主机标注为已知HSTS主机, 缓存HSTS主机的域名, 并与之一起标注此信息的到期时间, 如按给定max-age值有效规定的, 以及includeSubDomains指令是否被断言. 另请参见第11.2节 ("HSTS Policy Expiration Time Considerations").

UA禁止 (MUST NOT) 修改任何父域匹配的已知HSTS主机的到期时间或includeSubDomains指令.

如果已知HSTS主机的缓存条目具有过去的到期日期, 则该已知HSTS主机"过期 (expired)". 如果在任何时候缓存中存在过期的已知HSTS主机, UA必须 (MUST) 从其缓存中驱逐所有过期的已知HSTS主机.

8.2 Known HSTS Host Domain Name Matching (已知HSTS主机域名匹配)

给定域名可以以两种方式中的一种或两种与已知HSTS主机的域名匹配: 一致匹配 (congruent match) 或父域匹配 (superdomain match). 或者, 可能没有匹配.

以下步骤确定是否有任何匹配, 如果有, 是哪种方式:

使用ASCII不区分大小写比较, 从最右边的标签开始, 并从右到左继续, 逐标签 (仅比较标签) 将给定域名与UA的每个未过期的已知HSTS主机的域名进行比较. 另请参见 [RFC5890] 第2.3.2.4节.

  • 父域匹配 (Superdomain Match)

    如果在整个已知HSTS主机的域名与给定域名的右侧部分之间找到逐标签匹配, 则此已知HSTS主机的域名是给定域名的父域匹配. 给定域名可能有多个父域匹配.

    例如:

    给定域名 (DN):   qaz.bar.foo.example.com

    父域匹配的
    已知HSTS主机DN: bar.foo.example.com

    父域匹配的
    已知HSTS主机DN: foo.example.com
  • 一致匹配 (Congruent Match)

    如果在已知HSTS主机的域名与给定域名之间找到逐标签匹配 -- 即, 没有更多标签需要比较 -- 则给定域名与此已知HSTS主机一致地匹配.

    例如:

    给定域名:                foo.example.com

    一致匹配的
    已知HSTS主机DN: foo.example.com
  • 否则, 如果没有找到匹配, 则给定域名不代表已知HSTS主机.

8.3 URI Loading and Port Mapping (URI加载和端口映射)

每当UA准备"加载 (load)" (也称为"解引用 (dereference)") 任何"http" URI [RFC3986] (包括跟随HTTP重定向 [RFC2616] 时), UA必须 (MUST) 首先确定URI中是否给出了域名以及它是否与已知HSTS主机匹配, 使用以下步骤:

  1. 从URI中提取由URI的authority组件的host组件描述的任何子字符串.

  2. 如果子字符串为空, 则与任何已知HSTS主机都没有匹配.

  3. 否则, 如果子字符串非空且在语法上与 [RFC3986] 第3.2.2节中的IP-literal或IPv4address产生式匹配, 则与任何已知HSTS主机都没有匹配.

  4. 否则, 子字符串是给定域名, 必须 (MUST) 使用第8.2节 ("Known HSTS Host Domain Name Matching") 中的过程与UA的已知HSTS主机进行匹配.

  5. 如果在执行域名匹配时找到任何断言了includeSubDomains指令的父域匹配, 或者如果没有找到断言了includeSubDomains指令的父域匹配且找到一致匹配 (有或没有断言的includeSubDomains指令), 则在继续加载之前:

    UA必须 (MUST) 将URI方案替换为"https" [RFC2818], 并且

    如果URI包含显式端口组件"80", 则UA必须 (MUST) 将端口组件转换为"443", 或

    如果URI包含不等于"80"的显式端口组件, 则端口组件值必须 (MUST) 保留; 否则,

    如果URI不包含显式端口组件, UA禁止 (MUST NOT) 添加一个.

    注意 (NOTE): 这些步骤确保HSTS策略适用于HSTS主机的任何TCP端口上的HTTP.

注意 (NOTE): 在提供显式端口的情况下 (并且在较小程度上对于子域), 很可能在指定端口上实际运行着HTTP (即, 非安全) 服务器, 因此HTTPS请求将失败 (参见附录A ("Design Decision Notes") 中的项目6).

8.4 Errors in Secure Transport Establishment (安全传输建立中的错误)

当连接到已知HSTS主机时, 如果底层安全传输存在任何错误, 无论是"警告 (warning)"还是"致命 (fatal)"还是任何其他错误级别, UA必须 (MUST) 终止连接 (另请参见第12节 ("User Agent Implementation Advice")). 例如, 这包括UAs采用的证书有效性检查中发现的任何错误, 例如通过证书撤销列表 (Certificate Revocation Lists, CRLs) [RFC5280], 或通过在线证书状态协议 (Online Certificate Status Protocol, OCSP) [RFC2560], 以及通过TLS服务器身份检查 [RFC6125].

8.5 HTTP-Equiv <Meta> Element Attribute (HTTP-Equiv <Meta>元素属性)

UAs禁止 (MUST NOT) 注意接收内容中<meta>元素 [W3C.REC-html401-19991224] 上的http-equiv="Strict-Transport-Security"属性设置.

8.6 Missing Strict-Transport-Security Response Header Field (缺少Strict-Transport-Security响应头字段)

如果UA通过安全通道从已知HSTS主机接收HTTP响应, 但响应缺少STS头字段, UA必须 (MUST) 继续将主机视为已知HSTS主机, 直到达到该已知HSTS主机知识的max-age值. 请注意, 对于给定的已知HSTS主机, max-age值可能实际上是无限的. 例如, 如果已知HSTS主机是预配置列表的一部分, 并且该列表的实现使得列表条目永远不会"老化失效", 则会出现这种情况.