Amazon Web Services
一般参考 (Version 1.0)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Signature Version 4测试套件

为了帮助您支持Signature Version 4的 AWS 客户开发,您可以在测试套件中使用文件确保您的代码是否正确地执行了签名过程的各个步骤。

要获取测试套件,请下载 aws-sig-v4-test-suite.zip

每个测试组都包含五个文件,可用来验证Signature Version 4 签名流程中所述的每个任务。以下列表描述了每个文件的内容。

  • file-name.req — 待签名的 Web 请求。

  • file-name.creq — 生成的规范请求。

  • file-name.sts — 生成的待签名字符串。

  • file-name.authzAuthorization 标头。

  • file-name.sreq — 已签名请求。

注意

这些测试套件示例使用 us-east-1 区域。

凭证范围和私有密钥

测试套件中的示例都使用以下凭证范围:

Copy
AKIDEXAMPLE/20150830/us-east-1/service/aws4_request

用于签名的示例私有密钥为:

Copy
wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY

示例 - 带参数的简单 GET 请求

以下示例展示了 get-vanilla-query-order-key-case.req 文件中的待签 Web 请求。这是原始请求。

Copy
GET /?Param2=value2&Param1=value1 HTTP/1.1 Host:example.amazonaws.com X-Amz-Date:20150830T123600Z

任务 1:创建规范请求

任务 1:针对签名版本 4 创建规范请求中概述的步骤中,更改 get-vanilla-query-order-key-case.req 文件中的请求。

Copy
GET /?Param2=value2&Param1=value1 HTTP/1.1 Host:example.amazonaws.com X-Amz-Date:20150830T123600Z

这将在 get-vanilla-query-order-key-case.creq 文件中创建规范请求。

Copy
GET / Param1=value1&Param2=value2 host:example.amazonaws.com x-amz-date:20150830T123600Z host;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

备注

  • 参数按字母顺序(依据字符代码)进行排序。

  • 标头名称小写。

  • x-amz-date 标头与已签名标头之间有一个换行符。

  • 负载的哈希是空字符串的哈希。

任务 2:创建待签字符串

规范请求的哈希值返回以下值:

Copy
816cd5b414d056048ba4f7c5386d6e0533120fb1fcfa93762cf0fc39e2cf19e0

任务 2:创建签名版本 4 的待签字符串 内概述的步骤中,请添加算法、请求日期、凭证范围和规范请求哈希以创建待签字符串。

结果是 get-vanilla-query-order-key-case.sts 文件。

Copy
AWS4-HMAC-SHA256 20150830T123600Z 20150830/us-east-1/service/aws4_request 816cd5b414d056048ba4f7c5386d6e0533120fb1fcfa93762cf0fc39e2cf19e0

备注

  • 第二行的日期与 x-amz-date 标头以及凭证范围的第一个元素匹配。

  • 最后一行为规范请求的十六进制编码哈希值。

任务 3:计算签名

采用 任务 3:为 AWS Signature 版本 4 计算签名 中概述的步骤,从 get-vanilla-query-order-key-case.sts file 中用您的签名密钥和待签名字符串创建签名。

结果将创建 get-vanilla-query-order-key-case.authz 文件的内容。

Copy
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=b97d918cfa904a5beff61c982a1b6f458b799221646efd99d3219ec94cdf2500

任务 4:将签名信息添加到请求

任务 4:将签名信息添加到请求 内概述的步骤中,请将任务 3 生成的签名信息添加到原始请求。例如,获取 get-vanilla-query-order-key-case.authz 的内容,并添加至 Authorization 标头,然后将结果添加至 get-vanilla-query-order-key-case.req

这将在 get-vanilla-query-order-key-case.sreq 文件中创建已签名请求。

Copy
GET /?Param2=value2&Param1=value1 HTTP/1.1 Host:example.amazonaws.com X-Amz-Date:20150830T123600Z Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=b97d918cfa904a5beff61c982a1b6f458b799221646efd99d3219ec94cdf2500