0

我正在执行 EC2 API 查询并面临错误“我们计算的请求签名与您提供的签名不匹配”。

事实是我已经处理了 EC2 文档(SignatureVersion 2)中的所有内容,但我仍然面临这个错误并且无法找出问题所在。

以下是详细信息:

1)登录字符串:

s="""GET\n
ec2.amazonaws.com\n
/\n   
AWSAccessKeyId=access_id&Action=DescribeSecurityGroups&SignatureMethod=HmacSHA256   
&SignatureVersion=2&Timestamp=2013-10-06T14%3A15%3A30&Version=2013-08-15"""

2)生成签名的Python代码:

#!/bin/env python2.7

import hmac
import hashlib
import base64

s="""GET\n
ec2.amazonaws.com\n
/\n
AWSAccessKeyId=acces_id&Action=DescribeSecurityGroups&
SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-10-  
06T14%3A15%3A30&Version=2013-08-15"""

signature=base64.b64encode(hmac.new("secret_key_id", msg=s,  
digestmod=hashlib.sha256).digest())
print(signature)

3)浏览器请求:

https://ec2.amazonaws.com/?AWSAccessKeyId=access_id&Action=DescribeSecurityGroups&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-10-06T14%3A15%3A30&Version=2013-08-15&Signature=cccccccccccccccccc

谢谢

4

1 回答 1

1

您需要对 base-64 字符串进行 URL 编码:

>>> import urllib
>>> urllib.quote('4kvPV1bHGaayNg4u6OfiQh6U5IcI8wiJY+YBZddkI0c=')
'4kvPV1bHGaayNg4u6OfiQh6U5IcI8wiJY%2BYBZddkI0c%3D'
于 2013-10-06T20:29:37.503 回答