Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 PHP 创建 URL 签名

运行 PHP 的任何 Web 服务器可使用 PHP 演示代码,来为私有的 CloudFront RTMP 分配创建策略声明和签名。该示例使用签名 URL 链接创建一个正常运作的网页,这些链接使用 CloudFront 流播放视频流。要获取示例,请下载采用 PHP 的视频流签名代码

还可以通过使用适用于 PHP 的 AWS 开发工具包中的 UrlSigner 类来创建签名 URL。有关更多信息,请参阅 适用于 PHP 的 AWS 开发工具包 API Reference 中的 UrlSigner 类

注意

创建 URL 签名只是使用签名 URL 提供私有内容过程的一部分。有关整个过程的更多信息,请参阅 使用签名 URL

在以下代码段中,函数rsa_sha1_sign哈希并签署策略声明。所需的参数是策略声明、包含签名的输出参数以及 AWS 账户或您指定的可信 AWS 账户的私有密钥。接下来,url_safe_base64_encode函数创建签名 URL 安全版本。

例 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

例 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

注意

$expires 变量是一个日期/时间戳,必须为整数,而不是字符串。

例 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 实现的更多信息,请参阅 Open Source Toolkit for SSL/TLS

另请参阅