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

CDN:タイプ B 署名

最終更新日:Mar 07, 2025

Alibaba Cloud Content Delivery Network (CDN) は、オリジンサーバーを不正なダウンロードやアクセスから保護するための URL 署名機能を提供します。CDN は 4 つの URL 署名タイプをサポートしています。このトピックでは、タイプ B 署名のしくみについて説明します。

しくみ

  • タイプ B 署名に基づいて URL が署名される方法

    http://DomainName/{<timestamp>/<md5hash>}/FileName
    説明

    中括弧 ({}) で囲まれたコンテンツは、標準 URL に追加される暗号化された情報を示します。

    署名付き URL のフィールド

    フィールド

    説明

    DomainName

    高速化ドメイン名。

    timestamp

    署名付き URL が生成された時刻。タイムスタンプと [TTL] 値によって、署名付き URL の有効期限が決まります。時刻は UTC + 08:00 で、yyyyMMddHHmm 形式に従います。

    説明

    ほとんどの場合、署名付き URL の有効期間は [TTL] パラメーターの値と同じです。場合によっては、署名サーバーが署名付き URL に TTL 値を割り当てることもあります。タイムスタンプ = UNIX タイムスタンプ + TTL。署名付き URL の有効期間 = CDN で設定されたタイムスタンプ + TTL。

    md5hash

    MD5 アルゴリズムを使用して計算された文字列。文字列の長さは 32 文字で、数字と小文字を含めることができます。

    md5hash 値は、次の方法で計算されます。

    sstring = "Privatekey+timestamp+Path" (パスは、リクエストされたリソースを指すアドレスを指定します。パスには、/Filename などのパラメーターは含まれません。)
    md5hash = md5sum(sstring)

    Filename

    オリジンサーバー上のリクエストされたリソースを指す実際のパス。Filename フィールドの値は、スラッシュ (/) で始まる必要があります。

  • 認証ロジック

    Point of Presence (POP) がリクエストを受信すると、POP はリクエストの timestamp 値と TTL 値を加算して計算された時刻が現在の時刻より前であるかどうかを判断します。

    • リクエストの timestamp 値と TTL 値を加算して計算された時刻が現在の時刻より前である場合、POP はリクエストの URL が期限切れと判断し、403 エラーを返します。

    • リクエストの timestamp 値と TTL 値を加算して計算された時刻が現在の時刻より後の場合、string が生成されます。次に、MD5 アルゴリズムに基づいて md5hash 値が生成されます。生成された md5hash 値は、リクエストの md5hash 値と比較されます。

      • 値が同じであれば、リクエストは認証に合格します。POP はリクエストされたリソースを返します。

        説明

        リクエストが認証に合格した場合、キャッシュヒット率を高め、オリジンへのトラフィックを削減するために、URL 署名パラメーターが URL から削除されます。

        • キャッシュキーの生成に使用される URL の形式は、http://DomainName/FileName です。

        • オリジンリクエストの URL の形式は、http://DomainName/FileName です。

      • 2 つの値が異なる場合、リクエストは認証に失敗します。POP は HTTP 403 状態コードを返します。

次の例は、タイプ B 署名の実装方法を示しています。

  • サンプル条件

    • オリジンサーバーからオブジェクトを取得します。

      http://domain.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
      説明

      リクエストされたオブジェクトの URL に中国語の文字が含まれている場合は、署名付き URL を連結する前に URL をエンコードする必要があります。

      • 元の URL: https://example.com/image/阿里云.jpg

      • エンコードされた URL: https://example.com/image/%E9%98%BF%E9%87%8C%E4%BA%91.jpg

    • CDN によって高速化された Web サイト (DomainName): domain.example.com

    • 時間 (timestamp): 201508150800

    • 秘密鍵 (Privatekey): aliyuncdnexp1234

    • ユーザーがリクエストした相対アドレス (Path): /4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

    • オリジンサーバー上のリクエストされたリソースを指す実際のパス: (Filename): /4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

  • 連結手順

    1. 署名文字列を生成します。

      // sstring="Privatekey+timestamp+Path"
      sstring=aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
    2. md5hash 値を計算します。

      // md5hash = md5sum(sstring)
      md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0
    3. 署名付き URL を生成します。

      // Signed URL=http://DomainName/{<timestamp>/<md5hash>}/FileName
      http://domain.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

クライアントが署名付き URL を使用してリソースをリクエストする場合、POP は計算された md5hash 値とリクエストの md5hash 値を比較します。9044548ef1527deadafa49a890a377f0 など、値が同じで、署名付き URL が有効期間内であれば、リクエストは認証に合格します。そうでない場合、認証は失敗します。