

# 使用标准策略创建签名 URL
<a name="private-content-creating-signed-url-canned-policy"></a>

要使用标准策略创建签名 URL，请完成以下步骤。<a name="private-content-creating-signed-url-canned-policy-procedure"></a>

**要使用标准策略创建签名 URL**

1. 如果您使用 .NET 和 Java 创建签名 URL，而且，如果您尚未将密钥对私有密钥的格式从默认 .pem 格式重新设置为与 .NET 和 Java 兼容的格式，那么现在就开始设置吧。有关更多信息，请参阅 [重新设置私有密钥的格式（仅限 .NET 和 Java）](private-content-trusted-signers.md#private-content-reformatting-private-key)。

1. 连接以下值。您可以使用此示例签名 URL 中的格式。

   ```
   https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Expires=1767290400&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F
   ```

   删除所有空格（包括制表符和换行符）。您可能需要在应用程序代码的字符串中包括换码符。所有值的类型均为 `String`。  
**1. *文件的基本 URL***  
基本 URL 是您将用于访问文件的 CloudFront URL，如果您不使用签名 URL，包括您自己的查询字符串参数（如果有）。在上一示例中，基本 URL 为 `https://d111111abcdef8.cloudfront.net/image.jpg`。有关适用于分配的 URL 格式的更多信息，请参阅[在 CloudFront 中自定义文件的 URL 格式](LinkFormat.md)。  
   + 以下 CloudFront URL 适用于分配中的图像文件（使用 CloudFront 域名）。请注意，`image.jpg` 是在 `images` 目录中。URL 中文件的路径必须与您的 HTTP 服务器或 Amazon S3 存储桶中文件的路径匹配。

     `https://d111111abcdef8.cloudfront.net/images/image.jpg`
   + 以下 CloudFront URL 包含查询字符串：

     `https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large`
   + 以下 CloudFront URL 适用于分配中的映像文件。均使用备用域名。第二个包括查询字符串：

     `https://www.example.com/images/image.jpg`

     `https://www.example.com/images/image.jpg?color=red`
   + 以下 CloudFront URL 用于使用备用域名和 HTTPS 协议的分配中的映像文件：

     `https://www.example.com/images/image.jpg`  
** 2.`?`**  
`?` 表示查询参数位于基本 URL 后面。即使您未指定任何查询参数，也应包括 `?`。  
您可以按任意顺序指定以下查询参数。  
**3. *您的查询字符串参数（如果有*`&`**  
（可选）您可以输入自己的查询字符串参数。为此，请在每个参数之间添加一个 `&` 字符，例如 `color=red&size=medium`。您可以在 URL 中按任意顺序指定查询字符串参数。  
您的查询字符串参数不能命名为 `Expires`、`Signature` 或 `Key-Pair-Id`。  
** 4. `Expires=`*Unix 时间格式（按秒计）和协调世界时（UTC）格式的日期和时间***  
您希望 URL 不再允许访问文件的日期和时间。  
指定 Unix 时间格式（以秒为单位） 和协调通用时间 (UTC) 格式的过期日期和时间。例如，UTC 时间 2026 年 1 月 1 日上午 10 点转换为 Unix 时间格式就是 `1767290400`，如本主题开头的示例所示。  
要使用纪元时间，请指定 64 位整数表示日期，该日期不得晚于 `9223372036854775807`（2262 年 4 月 11 日，星期五，23:47:16.854 UTC）。  
  
有关 UTC 的信息，请参阅 [RFC 3339，Internet 上的日期和时间：时间戳](https://tools.ietf.org/html/rfc3339)。  
** 5. `&Signature=`*策略声明经过哈希处理和签署后的版本***  
JSON 策略声明经过哈希处理、签署和 Base64 编码的版本。有关更多信息，请参阅 [为使用标准策略的签名 URL 创建签名](#private-content-canned-policy-creating-signature)。  
** 6. `&Key-Pair-Id=`*CloudFront 公有密钥的公有密钥 ID，您使用该公有密钥的对应私有密钥来生成签名***  
CloudFront 公有密钥的 ID，例如，`K2JCJMDEHXQW5F`。公有密钥 ID 告诉 CloudFront 要使用哪个公有密钥来验证签名的 URL。CloudFront 将比较签名中的信息与策略声明中的信息，以确认该 URL 没有被篡改。  
此公有密钥必须属于作为分配中可信签署人的密钥组。有关更多信息，请参阅 [指定可以创建签名 URL 和签名 Cookie 的签署人](private-content-trusted-signers.md)。

## 为使用标准策略的签名 URL 创建签名
<a name="private-content-canned-policy-creating-signature"></a>

要为使用标准策略的签名 URL 创建签名，请完成以下步骤：

**Topics**
+ [

### 为使用标准策略的签名 URL 创建策略声明
](#private-content-canned-policy-creating-policy-statement)
+ [

### 为使用标准策略的签名 URL 创建签名
](#private-content-canned-policy-signing-policy-statement)

### 为使用标准策略的签名 URL 创建策略声明
<a name="private-content-canned-policy-creating-policy-statement"></a>

使用标准策略创建签名 URL 时，`Signature` 参数是策略声明经过哈希处理和签署的版本。对于使用标准策略的签名 URL，您没有像对待使用自定义策略的签名 URL 那样将策略声明包含在 URL 内。要创建策略声明，请执行以下过程。<a name="private-content-canned-policy-creating-policy-statement-procedure"></a>

**为使用标准策略的签名 URL 创建策略声明**

1. 使用以下 JSON 格式以及 UTF-8 字符编码构建策略声明。根据指定，准确包括所有标点符号和其他文本值。有关 `Resource` 和 `DateLessThan` 参数的信息，请参阅 [在使用标准策略的签名 URL 的策略声明中指定的值](#private-content-canned-policy-statement-values)。

   ```
   {
       "Statement": [
           {
               "Resource": "base URL or stream name",
               "Condition": {
                   "DateLessThan": {
                       "AWS:EpochTime": ending date and time in Unix time format and UTC
                   }
               }
           }
       ]
   }
   ```

1. 删除策略声明中的所有空格（包括制表符和换行符）。您可能需要在应用程序代码的字符串中包括换码符。

#### 在使用标准策略的签名 URL 的策略声明中指定的值
<a name="private-content-canned-policy-statement-values"></a>

为标准策略创建策略声明时，请指定以下值。

**资源**  
只能为 `Resource` 指定一个值。
包含查询字符串（如果有）的基本 URL，但不包括 CloudFront `Expires`、`Signature` 和 `Key-Pair-Id` 参数，例如：  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
请注意以下几点：  
+ **协议** – 该值必须以 `http://` 或 `https://` 开头。
+ **查询字符串参数** – 如果没有查询字符串参数，请省略问号。
+ **备用域名** – 如果在 URL 中指定备用域名 (CNAME)，则必须在引用网页或应用程序中的文件时指定备用域名。切勿为对象指定 Amazon S3 URL。

**DateLessThan**  
Unix 时间格式（以秒为单位）和协调通用时间 (UTC) 格式的 URL 过期日期和时间。例如，2026 年 1 月 1 日上午 10 点 UTC 转换为 Unix 时间格式就是 1767290400。  
该值必须与签名 URL 中的 `Expires` 查询字符串参数相匹配。切勿用引号将该值括起来。  
有关更多信息，请参阅 [CloudFront 何时检查签名 URL 中的过期日期和时间](private-content-signed-urls.md#private-content-check-expiration)。

#### 使用标准策略的签名 URL 的示例策略声明
<a name="private-content-canned-policy-creating-policy-statement-example"></a>

当您在签名 URL 中使用以下示例策略语句时，用户将可以访问文件 `https://d111111abcdef8.cloudfront.net/horizon.jpg`，直至 UTC 时间 2026 年 1 月 1 日上午 10 点：

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes",
            "Condition": {
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

### 为使用标准策略的签名 URL 创建签名
<a name="private-content-canned-policy-signing-policy-statement"></a>

要为签名 URL 中的 `Signature` 参数创建值，请对在[为使用标准策略的签名 URL 创建策略声明](#private-content-canned-policy-creating-policy-statement)中创建的策略声明进行哈希处理并签署。

有关额外信息以及如何哈希、签署及编码策略声明的示例，请参阅：
+ [用于 Base64 编码和加密的 Linux 命令和 OpenSSL](private-content-linux-openssl.md)
+ [为签名 URL 创建签名的代码示例](PrivateCFSignatureCodeAndExamples.md)<a name="private-content-canned-policy-creating-signature-download-procedure"></a>

**选项 1：使用标准策略创建签名**

1. 使用 SHA-1 哈希函数和生成的 RSA 或 ECDSA 私有密钥，对在[为使用标准策略的签名 URL 创建策略声明](#private-content-canned-policy-creating-policy-statement-procedure)过程中创建的策略声明进行哈希处理并签名。使用不再包含空格的策略声明版本。

   对于哈希函数所需的私有密钥，请使用其公有密钥位于分配的活动可信密钥组中的私有密钥。
**注意**  
您用于哈希及签署策略声明的方法取决于您的编程语言和平台。有关代码示例，请参阅 [为签名 URL 创建签名的代码示例](PrivateCFSignatureCodeAndExamples.md)。

1. 删除经过哈希处理并签署的字符串中的空格（包括制表符和换行符）。

1. 使用 MIME Base64 编码对字符串进行 Base64 编码。有关更多信息，请参阅 *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies* 中的 [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8)。

1. 用有效的字符替换 URL 查询字符串中的无效字符。下表列出了无效和有效字符。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html)

1. 将结果值附在签名 URL 的 `&Signature=` 之后，然后返回 [要使用标准策略创建签名 URL](#private-content-creating-signed-url-canned-policy-procedure)，以完成签名 URL 的各部分的串连。