我想使用Amazon AWS SES API,但他们需要一个我正在创建的签名值,如下面的PHP所示。
$algo ="SHA256";
$data = "hello";
$key = "my-access-key";
$signature = hash_hmac( $algo , $data , $key );
我收到了错误消息 当我发送https发帖请求时。
<Message> Request must contain a signature that conforms to AWS standards </Message>
我错了
答案 0 :(得分:2)
所有AWS API都要求对每个请求进行签名。但是,签名需要符合所谓的AWS签名版本4(与散列不同)
http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html
我的建议是,您不应该尝试复制该流程,而是使用AWS SDK
http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html
答案 1 :(得分:1)
<强>更新强>
在撰写此答案后的某个时刻,已从AWS文档中删除了有关签名版本3的大部分信息。下面提到的链接中的文档仍然存在,但该页面不再描述如何使用签名版本3实际签署请求。它仍然提到SES支持Signature V3和V4,但它也声明建议使用Signature V4。
对于历史上的好奇,仍然可以在archived version of the page找到使用签名版本3签署SES请求的说明,但使用(或切换到)签名版本4将是未来的行动方案,如如果SES在未来推出任何新区域,则不太可能支持Signature V3(自2014年以来在任何地区都没有支持Signature V2,但SES在这些区域中没有端点)。
与Signature V4相比,Signature V3具有显着的局限性,因此它可能在某个时候(或可能已经)被弃用,最终可能会停止使用。tl; dr:始终使用签名版本4。
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/query-interface-authentication.html解释了如何使用签名版本3与SES签署您将通过HTTPS提交的请求。
这是一种与大多数其他AWS服务不同的算法,但实现起来非常简单。 SES也支持标准的Signature V4。