我正在尝试为Amazon S3创建预先签名的URL。S3签名不匹配对于预先设置的URL
以下代码与S3文档中的示例中的签名生成相同的签名。 (https://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html)
然而,当我插上我自己的凭据等等,我得到一个错误的AWS: “我们出的要求签名不匹配您提供的签名检查密钥和签名方法。”
鉴于下面的代码似乎工作,我认为我的签名方法是好的。此外,使用的凭证是 用于上载文件,因此它们也很好。它们是根证书,而不是IAM用户。
我试过了:
1)有和没有句点的文件名。 2)美国标准文件以及爱尔兰文件。 3)HTTP和HTTPS 4)SHA256(尽管这打破了文档中的例子) 5)不同的Web客户端:wget,curl和Firefox。
我似乎在做完全一样,这里给出的PHP: Creating a signed S3 URL with Javascript
这是美国标准生成的URL。斗是 “buck1bar”,文件是 “foo.txt的”
那么,我究竟做错了什么?
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use MIME::Base64;
use Digest::HMAC;
use Digest::SHA;
use URI::Escape;
my $hmac3 = Digest::HMAC->new('OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV', 'Digest::SHA');
$hmac3->add("GET\n\n\n1141889120\n/quotes/nelson");
my $signature = uri_escape(encode_base64 $hmac3->digest, '');
print "vjbyPxybdZaNmGa%2ByT272YEAiv4%3D\n$signature\n";
# vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
# vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
现在,立即登录AWS并使您在此问题中发布的凭证无效。不要在公共场所发布您的证书。如果某人欺诈性地使用您的凭证,您可能会承担重大责任。 –
问题的第二行:“下面的代码与S3文档中的示例中的签名生成相同的签名。” – ftumsh
哈哈哈我不好。现在,这是我的头爆炸的地方:*“鉴于下面的代码似乎工作,我认为我的签名方法是可以的。另外,使用的凭证是用于上载文件的凭证,所以它们也很好。是根证书,而不是IAM用户。“* Sweet:下面的代码包含您的根证书。 –