我用来签名的字符串如下
GET
sqs.us-east-1.amazonaws.com
/XXXXXXXXXXX/Localhost
AWSAccessKeyId=XXXXXNGOTNJCTGAXXXXX&Action=ReceiveMessage&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-12-26T07%3A56%3A37Z&Version=2012-11-05
在前三行之后有'\ n'个字符,但是在最后一行之后没有,我也在最后尝试了'\ n',但结果是相同的
我是他们在计算
HMAC_SHA256(AWSKey,string)
我已经单独验证了HMAC_SHA256的正确性, 最后,我使用HMAC Base 64编码调用URL
https://sqs.us-east-1.amazonaws.com/XXXXXXXXXXX/Localhost?AWSAccessKeyId=XXXXXNGOTNJCTGAXXXXX&Action=ReceiveMessage&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-12-26T07%3A56%3A38Z&Version=2012-11-05&Signature=06nzru1EroDLJTJDjExLbyUyQzEcct3wAp%2Bm7TOBTjb0aPWSJTIXXXXX
我已经添加了XX..XX。
在完成文档后,几次,我没有找到相同的错误,但我收到的签名没有匹配错误。
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
</Message>
答案 0 :(得分:0)
问题可能是URL中查询字符串开头的队列名称和问号之间的斜杠吗?我不认为应该在那里。
...Localhost/?AWSAccessKeyId...
^ remove this
您说您验证了HMAC_SHA256的正确性,但是您确定这是参数的正确顺序吗?一些实现使用此约定:
HMAC_SHA256($data,$key)
你正在做相反的事情。