首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预签名的S3签名不匹配

预签名的S3签名不匹配
EN

Stack Overflow用户
提问于 2016-07-07 12:21:29
回答 1查看 739关注 0票数 1

我正试图为亚马逊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“

https://s3.amazonaws.com/buck1bar/foo.txt?AWSAccessKeyId=AKIAJG5VR56AB5USIG5Q&Expires=1467893299&Signature=emdimX%2FWKYrcdhtPtE7eQ9ErWv30HNlAHaa9vlDODCY%3D

那我做错什么了?

代码语言:javascript
复制
#!/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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-07 19:28:16

经过进一步的黑客攻击,原来我使用的模块已经开始使用了。

代码语言:javascript
复制
my $client = Net::Amazon::S3::Client->new( s3 => $s3 );

my $bucket = $client->bucket( name => $bucket_name );

my $o = $bucket->object( key => 'key1', expires => '2016-07-08' );
my $uri = $o->query_string_authentication_uri();

print "$uri\n";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38245351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档