我想知道是否有人使用php为他们的API成功生成了EC2 v2签名。我可以在网上找到的所有示例/库都是签名的v1,并且由于不安全因素而被弃用。实现签名生成的现有库也将受到赞赏。
答案 0 :(得分:1)
答案 1 :(得分:0)
Here's支持V2的PHP库。我没试过。
答案 2 :(得分:0)
以下是我编写并使用过的一些代码:
define("AWSKEY", "Your AWS Key");
define("AWSSECRET", "Your AWS Secret");
public function get($parameters, $host) {
// Build out the variables
$domain = "https://$host/";
$parameters['AWSAccessKeyId'] = AWSKEY;
$parameters['Timestamp'] = date('c');
$parameters['Version'] = '2007-11-07';
$parameters['SignatureMethod'] = 'HmacSHA256';
$parameters['SignatureVersion'] = 2;
// Write the signature
$signature = "GET\n";
$signature .= "$host\n";
$signature .= "/\n";
$sigparams = $parameters;
ksort($sigparams);
$first = true;
foreach($sigparams as $key=>$param) {
$signature .= (!$first ? '&' : '') . rawurlencode($key) . '=' . rawurlencode($param);
$first = false;
}
$signature = hash_hmac('sha256', $signature, $AWSKEY, true);
$signature = base64_encode($signature);
$parameters['Signature'] = $signature;
$url = $domain . '?';
$first = true;
foreach($parameters as $key=>$param) {
$url .= (!$first ? '&' : '') . rawurlencode($key) . '=' . rawurlencode($param);
$first = false;
}
$ch = curl_init(trim($url));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
return $output;
}
以下是您使用它的方式:
$params = array(
'Action' => 'ListDomains'
);
$db->get($params, 'sdb.amazonaws.com');
这将在SimpleDB上执行ListDomains
查询。该函数本身将返回Amazon的输出。对于更复杂的命令(即:PUT,POST等),不需要进行任何重大修改。
答案 3 :(得分:0)
使用常量AWSSECRET来散列签名,NOT $ AWSKEY(一个未引用的变量)。