You need to enable JavaScript to run this app.
导航
签名机制
最近更新时间:2024.06.24 20:30:02首次发布时间:2023.08.11 19:16:08

本文档主要介绍OpenAPI请求的签名是如何计算的。

  • 本文档的伪代码中的 HMAC 方法使用的是 HMAC-SHA256 算法。
  • 本文档的伪代码中的 HexEncode 方法将字符串转换为十六进制编码格式的字符串。

签名参数 Signature 是基于 kSigningStringToSign 参数计算而来的。Signature 的伪代码如下:

Signature = HexEncode(HMAC(kSigning, StringToSign))

kSigning

kSigning 表示用来计算签名的密钥。要计算 kSigning,您必须先获取您账号的 Access Key Secret,然后使用以下伪代码生成 kSigning

kSecret = <Your Access Key Secret>
kDate = HMAC(kSecret, ShortDate)
kRegion = HMAC(kDate, Region)
kService = HMAC(kRegion, Service)
kSigning = HMAC(kService, "request")

关于 kSigning 伪代码中参数的说明,参见伪代码中参数的说明

StringToSign

StringToSign 表示用来计算签名的签名字符串。StringToSign 的伪代码如下:

// Hash 函数使用 SHA256 算法
StringToSign = Algorithm + '\n' + RequestDate + '\n' + CredentialScope + '\n' + HexEncode(Hash(CanonicalRequest))

关于 StringToSign 伪代码中 AlgorithmRequestDate 参数的说明,参见伪代码中参数的说明。StringToSign 伪代码中其他参数的说明如下。

CredentialScope

CredentialScope 表示凭证范围。CredentialScope 的伪代码如下:

{ShortDate}/{Region}/{Service}/{Request}

关于 CredentialScope 伪代码中参数的说明,参见伪代码中参数的说明

CanonicalRequest

CanonicalRequest 表示规范的请求。CanonicalRequest 的伪代码如下:

HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HexEncode(Hash(RequestPayload))

CanonicalRequest 伪代码中参数的说明如下:

  • HTTPRequestMethod:表示请求方法。对于证书中心,该参数的取值是 GETPOST
  • CanonicalURI:表示请求的 URI。
  • CanonicalQueryString:表示规范的查询字符串。CanonicalQueryString 的值是通过以下规则生成的:
    • 按参数名称对查询参数进行升序排序。
  • CanonicalHeaders:表示规范的请求头。CanonicalHeaders 是通过以下步骤生成的:
    1. 将参与签名计算的请求头参数的名称转化成小写字母。
    2. 在字符级别对这些名称进行升序排序。
    3. 以 key-value 的格式拼接这些请求头参数。key 是请求头参数的名称,value 是请求头参数的值。
    4. 在每个请求头参数后添加换行符(\n)。
  • SignedHeaders:参见伪代码中参数的说明
  • HexEncode(Hash(RequestPayload)):表示一个计算值。该值是通过对请求正文中 payload 的值应用 SHA256 哈希算法计算得到的。

伪代码中参数的说明

以下表格包含了本文中多个伪代码中参数的说明。

参数类型描述示例值
AccessKeyString表示您账号的 Access Key ID。参见获取 Access KeyAKLTMjI2ODVlYzI3ZGY1NGU4ZjhjYWRjMTlmNTM5OTZkYzE
RequestDateString该参数与签名参数X-Date 的定义相同。20210913T081805Z
ShortDateString该参数与 RequestDate 的定义相同,只不过时间精度是日。20210913
RegionString表示证书中心服务所在的地域。该参数的取值是 cn-north-1cn-north-1
ServiceString表示证书中心的服务名称。该参数的取值是 pcapca

SignedHeaders

String

表示参与签名计算的请求头参数。多个请求头参数使用分号(;)分隔。这些请求头参数是根据参数名称升序排序的。

一般来说,SignedHeaders 的值是 host;x-content-sha256;x-date。您也可以指定任意请求头参数作为 SignedHeaders 的值。

host;x-content-sha256;x-date

AlgorithmString表示签名计算所使用的算法。该参数的取值为 HMAC-SHA256HMAC-SHA256
RequestString该参数是一个常量,值是 requestrequest