メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

PHP を使用して URL 署名を作成する

PHP を実行するすべてのウェブサーバーは、PHP デモコードを使用して、CloudFront のプライベート RTMP ディストリビューション用のポリシーステートメントと署名を作成できます。例は、CloudFront ストリーミングを使用してビデオストリームを再生する署名付き URL リンクが含まれた、機能するウェブページを作成します。例を取得するには、PHP におけるビデオストリーミング用の署名コードをダウンロードしてください。

AWS SDK for PHP の UrlSigner クラスを使用しても、署名済み URL を作成できます。詳細については、『AWS SDK for PHP API Reference』の「UrlSigner クラス」を参照してください。

Note

URL 署名の作成は、署名付き URL を使用してプライベートコンテンツを供給するためのプロセスの 1 パートにすぎません。プロセス全体の詳細については、「署名付き URL の使用」を参照してください。

以下のコードセグメントでは、関数 rsa_sha1_sign でポリシーステートメントのハッシュ化および署名を行います。必要な引数は、署名を含めるための出力パラメーターであるポリシーステートメントと、使用している AWS アカウントまたは指定した信頼済み AWS アカウントのプライベートキーです。次に、url_safe_base64_encode 関数で、URL で使用可能なバージョンの署名を作成します。

Example PHP における RSA SHA1 ハッシュ化

 function rsa_sha1_sign($policy, $private_key_filename) {
    $signature = "";

    // load the private key
    $fp = fopen($private_key_filename, "r");
    $priv_key = fread($fp, 8192);
    fclose($fp);
    $pkeyid = openssl_get_privatekey($priv_key);

    // compute signature
    openssl_sign($policy, $signature, $pkeyid);

    // free the key from memory
    openssl_free_key($pkeyid);

    return $signature;
 }

function url_safe_base64_encode($value) {
    $encoded = base64_encode($value);
    // replace unsafe characters +, = and / with 
    // the safe characters -, _ and ~
    return str_replace(
        array('+', '=', '/'),
        array('-', '_', '~'),
        $encoded);
 }

以下のコードでは、署名の作成に必要な既定ポリシーステートメントを構築します。既定ポリシーの詳細については、「既定ポリシーを使用して署名付き URL を作成する」を参照してください。

Example PHP における既定署名関数

function get_canned_policy_stream_name($video_path, $private_key_filename, $key_pair_id, $expires) {
    // this policy is well known by CloudFront, but you still need to sign it, 
    // since it contains your parameters
    $canned_policy = '{"Statement":[{"Resource":"' . $video_path . '","Condition":{"DateLessThan":{"AWS:EpochTime":'. $expires . '}}}]}';
    
    // sign the canned policy
    $signature = rsa_sha1_sign($canned_policy, $private_key_filename);
    // make the signature safe to be included in a url
    $encoded_signature = url_safe_base64_encode($signature);

    // combine the above into a stream name
    $stream_name = create_stream_name($video_path, null, $encoded_signature, $key_pair_id, $expires);
    // url-encode the query string characters to work around a flash player bug
    return encode_query_params($stream_name);
    }

以下のコードでは、署名の作成に必要なカスタムポリシーステートメントを構築します。カスタムポリシーの詳細については、「カスタムポリシーを使用して署名付き URL を作成する」を参照してください。

Note

$expires 変数は、文字列ではなく整数である必要がある日時スタンプです。

Example PHP におけるカスタム署名関数

function get_custom_policy_stream_name($video_path, $private_key_filename, $key_pair_id, $policy) {
    // sign the policy
    $signature = rsa_sha1_sign($policy, $private_key_filename);
    // make the signature safe to be included in a url
    $encoded_signature = url_safe_base64_encode($signature);

    // combine the above into a stream name
    $stream_name = create_stream_name($video_path, $encoded_policy, $encoded_signature, $key_pair_id, null);
    // url-encode the query string characters to work around a flash player bug
    return encode_query_params($stream_name);
    }

SHA-1 の OpenSSL 実装の詳細については、「SSL/TLS 用のオープンソースツールキット」を参照してください。

以下の資料も参照してください。