AWS签名版本4 sha256哈希未正确签名?

时间:2015-01-29 18:09:04

标签: php amazon-web-services amazon-s3 signature sha256

我正在尝试使用AWS签名版本4向S3提交请求。

当我提交请求时,我收到了消息 The request signature we calculated does not match the signature you provided. Check your key and signing method.

我不知道从哪里开始。我尝试了几种不同的哈希算法(sha1,md5)但总是得到相同的响应。我已经验证了访问密钥和密钥。我刚刚在AWS上创建了一对新的,它仍然失败。

感谢任何帮助!



<?php
$date = date('Ymd');
$x_date = $date . "T000000Z";
$credential = AWS_ACCESS_KEY . '/' . $date . '/us-west-2/s3/aws4_request';
$redirect = 'https://roofscope.com/scope/thank-you';

$conditions = array(
	array('bucket' => 'tracescope'),
	array('starts-with', '$key', 'user/user1/'),
	array('acl' => 'public-read'),
	array('success_action_redirect' => $redirect),
	array("starts-with", "\$Content-Type", "image/"),
	array("x-amz-credential" => $credential),
	array("x-amz-algorithm"=> "AWS4-HMAC-SHA256"),
	array("x-amz-date" => $x_date),
);

$policy_b64 = $this->aws->getPolicy(3600 * 24, $conditions);
$signature = hash_hmac('sha256', $policy_b64, AWS_SECRET_KEY);
?>

<form action="http://tracescope.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
	<input type="input" name="key" value="test/${filename}"/><br/>
	<input type="hidden" name="acl" value="public-read"/>
	<input type="hidden" name="success_action_redirect" value="<?= $redirect; ?>"/>
	<input type="input" name="Content-Type" value="image/jpeg"/><br/>
	<input type="text" name="X-Amz-Credential" value="<?= $credential; ?>"/>
	<input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256"/>
	<input type="text" name="X-Amz-Date" value="<?= $x_date; ?>"/>
	<input type="hidden" name="Policy" value="<?= $policy_b64; ?>" />
	<input type="hidden" name="X-Amz-Signature" value="<?= $signature; ?>"/>

	<input type="file" name="file"/> <br/>

	<input type="submit" name="submit" value="Upload to Amazon S3"/>
</form>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

尝试使用我的s3策略签名验证程序。 请不要输入您的实际密钥。 使用示例键并测试您身边的示例键的计算。

http://ttwd80.github.io/s3postcalculatorverify/

有一个“显示/隐藏步骤”链接,可以逐步解释该过程。