メニュー
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 クラス」を参照してください。

注記

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

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

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

Copy
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 を作成する」を参照してください。

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

Copy
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 を作成する」を参照してください。

注記

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

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

Copy
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 用のオープンソースツールキット」を参照してください。

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