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。
連結手順
署名文字列を生成します。
// sstring="Privatekey+timestamp+Path" sstring=aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3md5hash値を計算します。// md5hash = md5sum(sstring) md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0署名付き URL を生成します。
// Signed URL=http://DomainName/{<timestamp>/<md5hash>}/FileName http://domain.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
クライアントが署名付き URL を使用してリソースをリクエストする場合、POP は計算された md5hash 値とリクエストの md5hash 値を比較します。9044548ef1527deadafa49a890a377f0 など、値が同じで、署名付き URL が有効期間内であれば、リクエストは認証に合格します。そうでない場合、認証は失敗します。