我从Eucalyptus开始,有一些S3和EC2背景。 我有一个应用程序,我使用个人图书馆与S3接口,并从那里存储/检索文件。 现在我想让我的应用程序与Walrus兼容。
这是我的设置:
Ubuntu 10.04服务器UEC:
10.211.55.18:8773/services/Walrus
运行 10.211.55.18:8443
Web门户并更改了pipe理员密码 我能够通过Cyberduck和Cloudberry与Walrus交互,没有任何问题,我创build了一个桶'mybucket'和一个对象'myobject',但是不能用一个编程HTTP库做一个简单的请求,既不使用curl生成的授权。
如果我去浏览器并插入: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
我得到一个漂亮的XML消息与授权错误(如预期)。
但是当试图获得这个对象时,我已经完成了下面的签名过程(伪代码):
digest = new_openssl_sha1_digest date = "Sat, 03 Mar 2012 18:13:54 GMT" (now UTC datetime) description = "GET\n\n\nSat, 03 Mar 2012 18:13:54 GMT\n/mybucket/myfile" signature = new_base_64_HMAC(digest, secret_key, description) headers = { Date: date, Authorization: "AWS <access_key_id>:<signature>" }
那么我最终得到这些请求的URL和标题:
path: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
标题: {"date"=>"Sat, 03 Mar 2012 18:13:54 GMT", "Authorization"=>"AWS WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2XXXXXX:U/fpoVUCbN64h8iRICp9JZzKWgE="}
但是当我像上面发出一个GET请求时,我只得到一个小小的回应:
<headers> Status: 400 Unauthorized Content-Type: text/plain; charset=UTF-8 <body> Failure: 400 Bad Request
我找不到我做错了什么,我正在跟踪S3签名过程。 我需要理解这一点,因为我需要为我的应用程序实现一个插件海象,所以我不能使用第三方工具。
希望有人能帮忙,谢谢。
那么我发现发生了什么……实际上,海象包括签名上的/ services / Walruspath,我只是在/ mybucket / myfile上签名。 所以可以通过签署string'/ services / Walrus / bucket / file'来解决这个问题,就是这样!