AWS Signature v4创建签名的参数

时间:2016-01-13 19:04:30

标签: amazon-web-services

我见过亚马逊的这个解决方案:http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html

但我不明白他们想要的参数是什么(除了kSecret): 参数列表: kSecret kDate kRegion kService kSigning

有人可以解释一下吗? 谢谢你们

1 个答案:

答案 0 :(得分:2)

您指向的文档是如何根据密钥派生签名密钥。看看他们用于计算签名的示例代码。也许这会帮助你理解。每个" k"他们创建的参数是先前计算的值的HMAC和密钥中的下一个值。

static byte[] HmacSHA256(String data, byte[] key) throws Exception  {
     String algorithm="HmacSHA256";
     Mac mac = Mac.getInstance(algorithm);
     mac.init(new SecretKeySpec(key, algorithm));
     return mac.doFinal(data.getBytes("UTF8"));
}

static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) throws Exception  {
     byte[] kSecret = ("AWS4" + key).getBytes("UTF8");
     byte[] kDate    = HmacSHA256(dateStamp, kSecret);
     byte[] kRegion  = HmacSHA256(regionName, kDate);
     byte[] kService = HmacSHA256(serviceName, kRegion);
     byte[] kSigning = HmacSHA256("aws4_request", kService);
     return kSigning;
}

首先,他们采用前缀为AWS4的密钥,并将其作为HMAC的关键,以格式YYYYMMDD(每个文档)格式化日期。

接下来,他们将生成的HMAC用作HMAC的关键字,例如区域名us-east-1

接下来,他们将生成的HMAC用作HMAC的关键字,例如服务名ec2

最后,他们采用生成的HMAC并将其作为HMAC aws4_request的关键。生成的密钥是派生的签名密钥。

获得签名密钥后,您可以按如下方式为请求生成签名:

signature = HexEncode(HMAC(derived-signing-key, string-to-sign))

有关将签名应用于请求的说明,请访问:

http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html