すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:署名エラーのトラブルシューティング

最終更新日:Mar 20, 2026

OSS は、リクエストに含まれる署名とサーバーが計算した署名が一致しない場合、SignatureDoesNotMatch エラーを返します。エラー応答ボディには、不一致が発生した箇所を特定する診断用フィールドが含まれています。

エラー応答の例:

StringToSign = VERB + "\n"
             + Content-MD5 + "\n"              /* リクエストボディの MD5 ハッシュ。ボディがない場合は空白のままにします */
             + Content-Type + "\n"             /* MIME タイプ。設定されていない場合は空白のままにします */
             + Date + "\n"                     /* HTTP Date ヘッダーの値 */
             + CanonicalizedOSSHeaders         /* 並べ替えられた x-oss-* ヘッダー */
             + CanonicalizedResource           /* バケット + パス + サブリソース */

Signature = base64(hmac-sha1(AccessKeySecret, StringToSign))
フィールド説明
SignatureProvidedクライアントが送信した署名文字列
StringToSignサーバーが期待される署名を計算するために使用した文字列
StringToSignBytesStringToSign の 16 進数バイト値 — エンコーディング関連の問題を診断する際に有用
RequestIdAlibaba Cloud サポートへお問い合わせの際にお伝えいただく一意のリクエスト識別子

トラブルシューティング

以下の手順を順に実行してください。エラーが解消された時点で、以降の手順は実施する必要はありません。

ステップ 1:AccessKey ID および AccessKey Secret の検証

アプリケーションで使用している AccessKey ID と AccessKey Secret を使用して ossbrowser にログインします。 ログインに失敗した場合、認証情報が無効になっているか、取り消されています。認証情報を回転させ、アプリケーションを更新してください。

ステップ 2:署名アルゴリズムの検証

OSS では、2 種類の署名アルゴリズムがサポートされています。ご使用の方法に対応した正しいアルゴリズムがコードに実装されていることを確認してください。

方法 1:Authorization ヘッダーに署名を含める

詳細については、「Authorization ヘッダーに署名を含める」をご参照ください。

StringToSign = VERB + "\n"
             + Content-MD5 + "\n"              /* リクエストボディの MD5 ハッシュ;ボディがない場合は空欄 */
             + Content-Type + "\n"             /* MIME タイプ;未設定の場合は空欄 */
             + Date + "\n"                     /* HTTP Date ヘッダーの値 */
             + CanonicalizedOSSHeaders         /* ソート済みの x-oss-* ヘッダー */
             + CanonicalizedResource           /* バケット名 + パス + サブリソース */

Signature = base64(hmac-sha1(AccessKeySecret, StringToSign))

方法 2:URL に署名を追加する

詳細については、「URL に署名を追加する」をご参照ください。

StringToSign = VERB + "\n"
             + CONTENT-MD5 + "\n"              /* 事前署名付き URL の場合、通常は空欄 */
             + CONTENT-TYPE + "\n"             /* 事前署名付き URL の場合、通常は空欄 */
             + EXPIRES + "\n"                  /* URL の有効期限を示す UNIX タイムスタンプ */
             + CanonicalizedOSSHeaders         /* ソート済みの x-oss-* ヘッダー */
             + CanonicalizedResource           /* バケット名 + パス + サブリソース */

Signature = urlencode(base64(hmac-sha1(AccessKeySecret, StringToSign)))
注意: 署名アルゴリズムを手動で実装するのを避けるために、OSS SDK を使用してください。SDK は署名の計算を自動的に処理します。

ステップ 3:StringToSign 値の比較

サーバーは、エラー応答に自身が計算した StringToSign を含めます。これをクライアント側で生成した StringToSign と比較してください。

リクエストの例:

PUT /bucket/abc?acl
Date: Wed, 24 May 2023 02:12:30 GMT
Authorization: OSS qn6q**************:77Dv****************
x-oss-abc: mymeta

生成される StringToSign:

PUT\n                              /* HTTP メソッド */
\n                                 /* Content-MD5(空欄 — ボディなし) */
\n                                 /* Content-Type(空欄 — 未設定) */
Wed, 24 May 2023 02:12:30 GMT\n   /* Date */
x-oss-abc:mymeta\n                /* CanonicalizedOSSHeaders */
/bucket/abc?acl                   /* CanonicalizedResource */

各フィールドを順に確認してください:

フィールド確認事項
HTTP メソッドリクエストの HTTP 動詞(PUTGET など)と一致すること
Content-MD5リクエストで Content-MD5 ヘッダーが設定されていない限り、空欄であること
Content-Typeリクエストで Content-Type ヘッダーが設定されていない限り、空欄であること
DateDate ヘッダーの値と完全に一致すること(空白文字を含む)
CanonicalizedOSSHeadersすべての x-oss-* ヘッダーが小文字化・トリミングされ、アルファベット順にソートされて含まれていること
CanonicalizedResourceバケット名、オブジェクトパス、サブリソースがすべて存在し、正しいフォーマットで記述されていること

エラー応答に含まれる StringToSign とクライアント側で生成した値が異なる場合、その差異から修正すべきフィールドを特定できます。

ヒント:StringToSignBytes を使用すると、非表示文字やエンコーディングの問題を検出できます。16 進数シーケンスをデコーダーに貼り付け、クライアントの出力とバイト単位で比較してください。