Как я могу сгенерировать подпись v2 для Amazon EC2, используя PHP? - PullRequest
0 голосов
/ 08 апреля 2009

Мне интересно, если кто-нибудь успешно сгенерировал подпись EC2 v2 для своего API, используя php. Все примеры / библиотеки, которые я могу найти в сети, предназначены для v1 подписи, и это устарело из-за отсутствия безопасности. Также будет полезна существующая библиотека, которая реализует генерацию подписи.

Ответы [ 4 ]

1 голос
/ 25 ноября 2009

http://mierendo.com/software/aws_signed_query/

Я верю, что это V2

0 голосов
/ 13 мая 2012

Используйте константу AWSSECRET для хэширования подписи, а не $ AWSKEY (переменная без ссылки).

0 голосов
/ 25 ноября 2009

Вот код, который я написал и использовал:

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');

Это выполнит запрос ListDomains для SimpleDB. Сама функция вернет вывод Amazon. Для более сложных команд (т. Е. PUT, POST и т. Д.) Нет каких-либо серьезных изменений, которые необходимо выполнить.

0 голосов
/ 08 апреля 2009

Вот библиотека PHP, которая поддерживает V2. Я еще не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...