跳到主要内容

2.3. Signature Parameters (签名参数)

2.3. Signature Parameters (签名参数)

HTTP 消息签名具有提供签名生成与验证相关信息的元数据属性, 由被覆盖组成部分的有序集合与参数有序集合构成, 其中参数包括签名创建时间戳, 验证密钥材料标识符及其他工具. 此元数据在签名基中表示为签名的特殊消息组成部分, 该特殊消息组成部分与其他消息组成部分的处理略有不同. 具体地, 签名参数消息组成部分必须作为签名基的最后一行 (第 2.5 节), 组成部分标识符不得列在任何签名的被覆盖组成部分集合内, 包括其自身.

签名参数的组成部分名称为 @signature-params.

签名参数的组成部分值为该签名的签名参数序列化, 含被覆盖组成部分有序集合及所有关联参数. 这些参数可包括下列任意项:

created: : 创建时间, Integer 类型的 UNIX 时间戳值. 不支持亚秒精度. 建议包含此参数.

expires: : 过期时间, Integer 类型的 UNIX 时间戳值. 不支持亚秒精度.

nonce: : 为此签名生成的随机唯一值, String 类型.

alg: : 来自 "HTTP Signature Algorithms" 注册表的 HTTP 消息签名算法, String 类型.

keyid: : 密钥材料的标识符, String 类型.

tag: : 签名的应用专用标签, String 类型. 应用使用此值帮助识别与特定应用或协议相关的签名.

附加参数可在 "HTTP Signature Metadata Parameters" 注册表 (第 6.3 节) 中定义. 注意参数并无通用顺序, 但一旦为给定参数集合选定顺序, 若不改变签名参数值则不能更改.

签名参数的组成部分值按 [STRUCTURED-FIELDS] 第 4 节提供的规则序列化为参数化 Inner List, 如下:

  1. 令输出为空字符串.

  2. 确定被覆盖组成部分的组成部分标识符顺序, 不包括 @signature-params 组成部分标识符本身. 一旦选定此顺序则不能更改. 此顺序必须与创建签名基 (第 2.5 节) 时使用的顺序相同.

  3. 将被覆盖组成部分的组成部分标识符 (含所有参数) 按 [STRUCTURED-FIELDS] 第 4.1.1.1 节作为 String 值的有序 Inner List 序列化, 然后追加到输出. 注意组成部分标识符可包含自身参数, 这些参数为有序集合. 一旦为某组成部分的参数选定顺序则不能更改.

  4. 确定任意签名参数的顺序. 一旦选定则不能更改.

  5. 按 [STRUCTURED-FIELDS] 第 4.1.1.2 节将参数按顺序追加到 Inner List, 跳过对此消息签名不可用或未使用的参数.

  6. 输出包含签名参数的组成部分值.

注意使用 [STRUCTURED-FIELDS] 第 4.1.1.1 节的 Inner List 序列化作为被覆盖组成部分值, 而非第 4.1.1 节的 List 序列化, 以便与此值纳入 Signature-Input 字段并行, 如第 4.1 节讨论.

下列示例展示某示例消息签名参数的序列化组成部分值:

注意: 按 RFC 8792 使用 \ 换行

("@target-uri" "@authority" "date" "cache-control")\
;keyid="test-key-rsa-pss";alg="rsa-pss-sha512";\
created=1618884475;expires=1618884775

注意 HTTP 消息可包含多个签名 (第 4.3 节), 但给定签名参数条目仅包含用于单个签名的签名参数.