CDS-IS: URL Signing の使用方法

ドキュメント

2012/01/25 - 04:57
1月 25th, 2012
User Badges:
  • Cisco Employee,

URL Signing とは

URLパラメータとしてシグネチャを付与しておき、Service Engine において、この値が正しいかどうか検証を行い、正しいシグネチャである場合のみ、アクセスが許可されるようにする仕組みです。


URL Signing が使用可能なプロトコル


以下のプロトコルでサポートされています。


  • WebEngine (HTTP)
  • WMT (RTSP)
  • FMS (RTMP)
  • Movie-Streamer (RTSP)


設定方法

WebEngine での設定例について説明します。


Key の登録

シグネチャの作成と検証には、共通鍵を使用する方法と、公開鍵/秘密鍵を使用する方法の2パターンがあります。ここでは設定が用意な共通鍵を使用します。鍵は各デバイスの設定画面で登録します(以下の画面)。


URLsigning_key設定_CDSM.png


この例では、以下のパラメータ値を使用します。


Key Id Owner1
Key Id Number2
Keytestkey


CLI で設定する場合は以下のコマンドを使用します。


 se0(config)#url-signature key-id-owner 1 key-id-number 2 key testkey


確認方法は以下の通りです。


 se0#show url-signature
key-id-owner  key-id-number  key  public-key  private-key  symmetric-key
-------------------------------------------------------------------
      1             2         ****



シグネチャを含む URL の生成

シグネチャの生成には、configuration guide にて公開されている Python Script を使用します。

実行には Python が必要です。


  • Example of a Python URL Signing Script

       http://www.cisco.com/en/US/docs/video/cds/cda/is/2_6/configuration_guide/URLsigning.html#wp1100056


configuration guide に記載されているスクリプトをテキストエディタにコピーし、ファイル名「cds-ims-urlsign.py」で保存しておきます。


このスクリプトをパラメータ無しで実行すると、必要なパラメータが確認できます。


 $ python cds-ims-urlsign.py
Usage:
python cds-ims-urlsign.py        
Example:
python cds-ims-urlsign.py rtsp://abc.com/content/Apocalypto.mov 171.71.50.123 120 1 2 BubbaGump 1 ""or1or2


各パラメータの説明は以下の通りです。


urlシグネチャ計算対象の URL
client-ip

アクセスを許可するクライアントのIPアドレス。アクセスを許可するクライアントを限定しない場合は、適当な IPアドレスを入れておく

expiry-delay-seconds

現在の時刻から Expire するまでの秒数

key id owner

鍵の設定で入力した値

key id number

鍵の設定で入力した値

key

鍵の設定で入力した値


exclude-domain

1 又は 0 を指定。1  の場合、シグネチャ計算にドメイン情報を入れない(この場合、シグネチャ検証の設定でもドメイン情報を除外する必要がある)


version

ハッシュ計算方法の指定。0又は指定無しの場合、MD5 を適用する。1 の場合 SHA-1 を適用する。2 の場合、プロトコル情報を除去してから SHA-1 を適用する



以下に生成例を示します。一番下の「US=xxxx」が含まれる行が、シグネチャ付きのURLになります。


 $ python cds-ims-urlsign.py "http://web.cdn.japan-tac.local/sign/test.html" 192.168.20.201 3600 1 2 testkey 0 1

http://web.cdn.japan-tac.local/sign/test.html?SIGV=1&IS=0&ET=1323667407&CIP=192.168.20.201&KO=1&KN=2&US=
SHA1 is used
http://web.cdn.japan-tac.local/sign/test.html?SIGV=1&IS=0&ET=1323667407&CIP=192.168.20.201&KO=1&KN=2&US=7f81a05c5247a640315f9c8f135bfdffd985aca2


Servuce Rule の設定

URL SIgning は Service Rule 機能の中の1つです。そのため、URL Signing を使用するには、Service Rule を有効にする必要があります。Service Rule の設定は XML 形式の設定ファイルを作成し、CDSM からアップロードします。


<CDSRules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema\CDSRules.xsd">
     <Revision>1.0</Revision>

     <CustomerName>cisco</CustomerName>

     <Rule_Patterns>

          <PatternListGrp id = "grp1">

               <UrlRegex>sign</UrlRegex>

               <Domain>web.cdn.japan-tac.local</Domain>

          </PatternListGrp>

     </Rule_Patterns>

     <Rule_Actions>

          <Rule_Validate  matchGroup = "grp1" error-redirect-url = "http://www.cdn.japan-tac.local/error.html" exclude-validation = "client-ip" protocol = "http" />

     </Rule_Actions>

</CDSRules>



上記 XML ファイルでは、以下のような動作を定義しています。


  • URL Signing が適用される条件      
    • URL のドメインが web.cdn.japan-tac.local
    • URL の中に "sign" という文字列が含まれる
    • クライアント IP はシグネチャ検証時の計算に含めない


実行例

python script の出力例で示したシグネチャ付きURLに対して、シグネチャ生成後120秒以内に、クライアント 192.168.20.201 からアクセスした場合、アクセスに成功します。


# curl -v "http://web.cdn.japan-tac.local/sign/test.html?SIGV=1&IS=0&ET=1327498431&CIP=192.168.20.201&KO=1&KN=2&US=d9bc8069539783b4e7cf226c3a31c057dfdcef63"
* About to connect() to web.cdn.japan-tac.local port 80
*   Trying 192.168.20.7... connected
* Connected to web.cdn.japan-tac.local (192.168.20.7) port 80
> GET /sign/test.html?SIGV=1&IS=0&ET=1327498431&CIP=192.168.20.201&KO=1&KN=2&US=d9bc806953
9783b4e7cf226c3a31c057dfdcef63 HTTP/1.1
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3
libidn/0.6.5
> Host: web.cdn.japan-tac.local
> Accept: */*
> < HTTP/1.1 200 OK
< Connection: Keep-Alive
< Keep-Alive: timeout=15
< Accept-Ranges: bytes
< ETag: "826776-1d-cc34cf80"
< Last-Modified: Mon, 12 Dec 2011 04:45:02 GMT
< Content-Type: text/html; charset=UTF-8
< Content-Length: 29
< Date: Wed, 25 Jan 2012 12:46:10 GMT
< Server:  Cisco-CDS
Mon Dec 12 13:45:02 JST 2011
* Connection #0 to host web.cdn.japan-tac.local left intact
* Closing connection #0



シグネチャを適当に書き換えてアクセスした場合、設定したエラーページにリダイレクトされます。


# curl -v "http://web.cdn.japan-tac.local/sign/test.html?SIGV=1&IS=0&ET=1327498431&CIP=192.168.20.201&KO=1&KN=2&US=12345"
* About to connect() to web.cdn.japan-tac.local port 80
*   Trying 192.168.20.7... connected
* Connected to web.cdn.japan-tac.local (192.168.20.7) port 80
> GET /sign/test.html?SIGV=1&IS=0&ET=1327498431&CIP=192.168.20.201&KO=1&KN=2&US=d9bc806953
9783b4e7cf226c3a31c057dfdcef6 HTTP/1.1
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3
libidn/0.6.5
> Host: web.cdn.japan-tac.local
> Accept: */*
> < HTTP/1.1 302 Found
< Connection: Keep-Alive
< Keep-Alive: timeout=15
< Accept-Ranges: bytes
< Location: http://www.cdn.japan-tac.local/error.html
< Content-Length: 0
< Date: Wed, 25 Jan 2012 12:44:48 GMT
< Server:  Cisco-CDS
* Connection #0 to host web.cdn.japan-tac.local left intact
* Closing connection #0
Loading.

アクション

このドキュメントについて