簡體   English   中英

使用服務器端加密和來自iPhone應用程序的ASIHTTPRequest時,無效的S3簽名錯誤

[英]Invalid S3 signature error when using server-side encryption and ASIHTTPRequest from an iPhone app

我有一個使用了一段時間的iPhone應用程序,該應用程序使用ASIHTTPRequest將視頻上傳到Amazon S3上的存儲桶。 它運行良好,沒有任何問題。 最近,我們決定使用Amazon已實施的新“服務器端加密”。 這使您可以通過包括其他HTTP請求標頭,告訴Amazon服務器自動加密已發布到存儲桶的文件。

我向應用程序中添加了一行代碼來實現此目的,但是現在我的Amazon上傳失敗。 出現的特定錯誤消息是:

“我們計算出的請求簽名與您提供的簽名不匹配。請檢查您的密鑰和簽名方法。”

我使用的存儲桶名稱符合Amazon的命名標准,因此我相信這不是問題。 我也相信我使用的秘密和公鑰是正確的。

我認為添加此標頭似乎在某種程度上破壞了簽名計算,因為它被包含在傳輸的一側但不包含在另一側。

我做錯了嗎? 還是這是ASIHTTPRequest的錯誤?

這是我的代碼供參考:

[ASIS3Request setSharedSecretAccessKey:@"mysecretkey"];
[ASIS3Request setSharedAccessKey:@"myaccesskey"];

NSString *bucketPath = [NSString stringWithFormat:@"mypath/filename"];

ASIS3ObjectRequest *request = [ASIS3ObjectRequest PUTRequestForFile:filepath withBucket:@"my-bucket" key:bucketPath];

// If the following line is commented, the upload completes successfully
[request addRequestHeader:@"x-amz-server-side-encryption" value:@"AES256"];
////

request.requestScheme = ASIS3RequestSchemeHTTPS;
[request setShouldContinueWhenAppEntersBackground:YES];
[request startSynchronous];

if ([request error])
{
  // The error messag is being displayed here
  NSLog(@"xmit error: [%@]",[[request error] localizedDescription]);
}

您所做的一切正確,問題在於構造Authorization標頭(即“請求簽名”)涉及對包含所有x-amz-標頭的字符串進行簽名 您已經添加了一個這樣的標頭( x-amz-server-side-encryption ),但是尚未使它成為簽名的一部分。

我剛剛創建了一個支持SSE的ASIHTTPRequest分支 如果使用該分支,則應該只能說[request setUseServerSideEncryption:YES]; 另外,如果您對這項技術更感興趣,那么這里有使其實用的詳細信息

我遇到了同樣的問題,但是我沒有使用加密。 但是到目前為止,我發現大寫字母的簽名錯誤。

在我的情況下,我要使用ASIS3StorageClassReducedRedundancy設置存儲類,其存儲值為@"REDUCED_REDUNDANCY" ,使用大寫形式。 如果我未設置此選項,則請求成功。

因此,也許您的問題出在具有大寫字母的AES256值上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM