我正在嘗試爲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:下面的代碼包含您的根證書。 –