

# Definir cookies assinados usando uma política predefinida
<a name="private-content-setting-signed-cookie-canned-policy"></a>

Para definir um signed cookie usando uma política padrão, execute as seguintes etapas. Para criar a assinatura, consulte [Criar uma assinatura para um cookie assinado que use uma política predefinida](#private-content-canned-policy-signature-cookies).<a name="private-content-setting-signed-cookie-canned-policy-procedure"></a>

**Para definir um signed cookie usando uma política padrão**

1. Se estiver usando o .NET ou o Java para criar signed cookies e não tiver reformatado a chave privada de seu par de chaves do formato padrão .pem para um formato compatível com o .NET ou o Java, faça isso agora. Para obter mais informações, consulte [Reformatar a chave privada (somente .NET e Java)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Programe a aplicação para enviar três cabeçalhos `Set-Cookie` para visualizadores aprovados (ou quatro, se desejar especificar um algoritmo de hash). São necessários três cabeçalhos `Set-Cookie` porque cada cabeçalho `Set-Cookie` pode conter somente um par de nome/valor, e um signed cookie do CloudFront requer três pares. Os pares de nome-valor são: `CloudFront-Expires`, `CloudFront-Signature` e `CloudFront-Key-Pair-Id`. Se preferir, inclua um quarto par nome-valor, `CloudFront-Hash-Algorithm`, para especificar o algoritmo de hash usado para a assinatura. Os valores devem estar presentes no visualizador antes de um usuário fazer a primeira solicitação de um arquivo ao qual você deseja controlar o acesso. 
**nota**  
Em geral, recomendamos que você exclua os atributos `Expires` e `Max-Age`. A exclusão dos atributos faz com que o navegador exclua o cookie quando o usuário fecha o navegador, diminuindo a possibilidade de alguém obter acesso não autorizado ao seu conteúdo. Para obter mais informações, consulte [Evitar o uso indevido de cookies assinados](private-content-signed-cookies.md#private-content-signed-cookie-misuse).

   **Os nomes dos atributos de cookie fazem distinção entre letras maiúsculas e minúsculas**. 

   As quebras de linha são incluídas apenas para tornar os atributos mais legíveis.

   ```
   Set-Cookie: 
   CloudFront-Expires={{date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC)}}; 
   Domain={{optional domain name}}; 
   Path=/{{optional directory path}}; 
   Secure; 
   HttpOnly
   
   Set-Cookie: 
   CloudFront-Signature={{hashed and signed version of the policy statement}}; 
   Domain={{optional domain name}}; 
   Path=/{{optional directory path}}; 
   Secure; 
   HttpOnly
   
   Set-Cookie: 
   CloudFront-Key-Pair-Id={{public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature}}; 
   Domain={{optional domain name}}; 
   Path=/{{optional directory path}}; 
   Secure; 
   HttpOnly
   
   Set-Cookie: 
   CloudFront-Hash-Algorithm={{SHA1 or SHA256}}; 
   Domain={{optional domain name}}; 
   Path=/{{optional directory path}}; 
   Secure; 
   HttpOnly
   ```  
**(Opcional) `Domain`**  
O nome de domínio do arquivo solicitado. Se você não especificar um atributo `Domain`, o valor padrão será o nome de domínio do URL, e ele se aplica apenas ao nome de domínio em questão, não aos subdomínios. Se você especificar um atributo `Domain`, ele também será aplicado aos subdomínios. Um ponto inicial no nome de domínio (por exemplo, `Domain=.example.com`) é opcional. Além disso, se você especificar um atributo `Domain`, o nome de domínio do URL e o valor do atributo `Domain` deverão ser correspondentes.  
É possível especificar o nome de domínio atribuído pelo CloudFront à sua distribuição, por exemplo, d111111abcdef8.cloudfront.net, mas é possível especificar \*.cloudfront.net para o nome de domínio.  
Se você quiser usar um nome de domínio alternativo, como example.com nos URLs, deverá adicioná-lo à sua distribuição, independentemente de especificá-lo no atributo `Domain` ou não. Para obter mais informações, consulte [Nomes de domínio alternativos (CNAMEs)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) no tópico [Referência de configurações de todas as distribuições](distribution-web-values-specify.md).  
**(Opcional) `Path`**  
O caminho do arquivo solicitado. Se você não especificar um atributo `Path`, o valor padrão será o caminho do URL.  
**`Secure`**  
Exige que o visualizador criptografe os cookies antes de enviar uma solicitação. Recomendamos que você envie o cabeçalho `Set-Cookie` por uma conexão HTTPS para garantir que os atributos de cookie estejam protegidos de ataques a intermediários.  
**`HttpOnly`**  
Define como o navegador (quando compatível) interage com o valor do cookie. Com `HttpOnly`, os valores dos cookies são inacessíveis ao JavaScript. Essa precaução pode ajudar a mitigar os ataques conhecidos como cross-site scripting (XSS). Consulte mais informações em [Using HTTP cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies).  
**`CloudFront-Expires`**  
Especifique a data e hora de expiração no formato de hora do Unix (em segundos) e no Tempo Universal Coordenado (UTC). Por exemplo, 1.º de janeiro de 2026 10h UTC é convertido em 1357034400 no formato de hora do Unix.   
Para usar o tempo de época, especifique um número inteiro de 64 bits para uma data que não seja posterior a `9223372036854775807` (sexta-feira, 11 de abril de 2262 às 23:47:16.854 UTC).  
Para obter informações sobre UTC, consulte a *RFC 3339, Date and Time on the Internet: Timestamps*, [https://tools.ietf.org/html/rfc3339](https://tools.ietf.org/html/rfc3339).  
**`CloudFront-Signature`**  
Uma versão assinada, com hash e codificação base64 de uma declaração de política do JSON. Para obter mais informações, consulte [Criar uma assinatura para um cookie assinado que use uma política predefinida](#private-content-canned-policy-signature-cookies).  
**`CloudFront-Key-Pair-Id`**  
O ID de uma chave pública do CloudFront, por exemplo, `K2JCJMDEHXQW5F`. O ID da chave pública informa ao CloudFront qual chave pública deve ser usada para validar o signed URL. O CloudFront compara as informações da assinatura com as informações da declaração de política para verificar se o URL não foi adulterado.  
Essa chave pública deve pertencer a um grupo de chaves que seja um signatário confiável na distribuição. Para obter mais informações, consulte [Especificar os assinantes que podem criar URLs e cookies assinados](private-content-trusted-signers.md).  
**`CloudFront-Hash-Algorithm`**  
(Opcional) O algoritmo de hash usado para criar a assinatura. Os valores compatíveis são `SHA1` e `SHA256`. Se você não incluir esse cookie, o CloudFront utilizará `SHA1` por padrão.

O exemplo a seguir mostra cabeçalhos de `Set-Cookie` de um signed cookie quando você está usando o nome de domínio associado à sua distribuição nas URLs de seus arquivos:

```
Set-Cookie: CloudFront-Expires=1426500000; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
```

O exemplo a seguir mostra cabeçalhos de `Set-Cookie` de um signed cookie quando você está usando o nome de domínio alternativo example.org nas URLs de seus arquivos:

```
Set-Cookie: CloudFront-Expires=1426500000; Domain=example.org; Path=/images/*; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=example.org; Path=/images/*; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/images/*; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=example.org; Path=/images/*; Secure; HttpOnly
```

Se você quiser usar um nome de domínio alternativo, como example.com nos URLs, deverá adicioná-lo à sua distribuição, independentemente de especificá-lo no atributo `Domain` ou não. Para obter mais informações, consulte [Nomes de domínio alternativos (CNAMEs)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) no tópico [Referência de configurações de todas as distribuições](distribution-web-values-specify.md).

## Criar uma assinatura para um cookie assinado que use uma política predefinida
<a name="private-content-canned-policy-signature-cookies"></a>

Para criar a assinatura de um cookie que use uma política predefinida, siga estes procedimentos.

**Topics**
+ [Criar uma declaração de política para um cookie assinado que use uma política predefinida](#private-content-canned-policy-statement-cookies)
+ [Assinar a declaração de política para criar uma assinatura para um cookie assinado que use uma política predefinida](#private-content-canned-policy-cookies-signing-policy-statement)

### Criar uma declaração de política para um cookie assinado que use uma política predefinida
<a name="private-content-canned-policy-statement-cookies"></a>

Ao definir um signed cookie que usa uma política padrão, o atributo `CloudFront-Signature` será uma versão assinada e com hash de uma declaração de política. Para signed cookies que usam uma política padrão, a declaração de política não é incluída no cabeçalho `Set-Cookie`, como é feito nos signed cookies que usam uma política personalizada. Para criar a declaração de política, conclua as etapas a seguir.<a name="private-content-canned-policy-statement-cookies-procedure"></a>

**Para criar uma declaração de política para um signed cookie que usa uma política padrão**

1. Crie a declaração de política usando o formato JSON a seguir e a codificação de caracteres UTF-8. Inclua todas as pontuações e outros valores literais exatamente como especificado. Para obter informações sobre os parâmetros `Resource` e `DateLessThan`, consulte [Valores especificados na declaração de uma política padrão para signed cookies](#private-content-canned-policy-statement-cookies-values).

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

1. Remova todas os espaços em branco (inclusive caracteres de nova linha e de tabulação) da declaração de política. Pode ser necessário incluir caracteres de escape na string do código do aplicativo.

#### Valores especificados na declaração de uma política padrão para signed cookies
<a name="private-content-canned-policy-statement-cookies-values"></a>

Ao criar uma declaração de política para uma política padrão, especifique os valores a seguir:

**Recurso**  
O URL base, inclusive suas query strings, se houver, por exemplo:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
Você pode especificar apenas um valor para `Resource`.  
Observe o seguinte:  
+ **Protocolo**: o valor deve começar com `http://` ou `https://`.
+ **Parâmetros de query string** :se você não tiver query strings, omita o ponto de interrogação.
+ **Nomes de domínio alternativos**: se especificar um nome de domínio alternativo (CNAME) no URL, você deverá especificá-lo ao fazer referência ao arquivo na sua página da web ou aplicação. Não especifique o URL do Amazon S3 para o arquivo.

**DateLessThan**  
A data e hora de expiração do URL no formato de hora do Unix (em segundos) e no Tempo Universal Coordenado (UTC). Não coloque os valores entre aspas.  
Por exemplo, 16 de março de 2015, 10h UTC é convertido para 1426500000 no formato de hora do Unix.  
Esse valor deve corresponder ao valor do atributo `CloudFront-Expires` no cabeçalho `Set-Cookie`. Não coloque os valores entre aspas.  
Para obter mais informações, consulte [Quando o CloudFront confere a data e hora de validade de um cookie assinado](private-content-signed-cookies.md#private-content-check-expiration-cookie).

#### Exemplo de declaração de política para uma política padrão
<a name="private-content-canned-policy-cookies-sample-policy-statement"></a>

Ao usar o seguinte exemplo de declaração de política em um signed cookie, um usuário pode acessar o arquivo `https://d111111abcdef8.cloudfront.net/horizon.jpg` até 16 de março de 2015, 10h UTC:

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

### Assinar a declaração de política para criar uma assinatura para um cookie assinado que use uma política predefinida
<a name="private-content-canned-policy-cookies-signing-policy-statement"></a>

Para criar o valor para o atributo `CloudFront-Signature` em um cabeçalho `Set-Cookie`, assine e adicione um hash à declaração de política criada em [Para criar uma declaração de política para um signed cookie que usa uma política padrão](#private-content-canned-policy-statement-cookies-procedure). 

Para obter mais informações e exemplos de como adicionar hash, assinar e codificar a declaração de política, consulte os seguintes tópicos:
+ [Comandos do Linux e OpenSSL para criptografia e codificação base64](private-content-linux-openssl.md)
+ [Exemplos de código para criar uma assinatura para um signed URL](PrivateCFSignatureCodeAndExamples.md)

**nota**  
Os exemplos vinculados usam SHA-1 por padrão. Para usar SHA-256, substitua `sha1` por `sha256` nos comandos OpenSSL e inclua o cookie `CloudFront-Hash-Algorithm` com o valor `SHA256`.<a name="private-content-canned-policy-cookie-creating-signature-procedure"></a>

**Para criar uma assinatura para um signed cookie usando uma política padrão**

1. Use a função de hash SHA-1 ou SHA-256 e RSA para fazer o hash e assinar a declaração de política que você criou no procedimento [Para criar uma declaração de política para um signed cookie que usa uma política padrão](#private-content-canned-policy-statement-cookies-procedure). Use a versão da declaração de política que não inclui mais espaços em branco.

   Se você usa SHA-256, deve incluir o cookie `CloudFront-Hash-Algorithm` com o valor `SHA256`.

   Para a chave privada exigida pela função hash, use uma chave privada que tenha a chave pública em um grupo de chaves confiável ativo para a distribuição.
**nota**  
O método usado para assinar e adicionar um hash à declaração de política depende da sua linguagem de programação e plataforma. Para obter o código de exemplo, consulte [Exemplos de código para criar uma assinatura para um signed URL](PrivateCFSignatureCodeAndExamples.md).

1. Remova os espaços em branco (inclusive caracteres de nova linha e de tabulação) da string assinada e com hash.

1. Codifique a string usando codificação base64 MIME. Para obter mais informações, consulte [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) em *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. Substitua os caracteres inválidos da query string de um URL por caracteres válidos. A tabela a seguir indica os caracteres válidos e inválidos.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-canned-policy.html)

1. Inclua o valor resultante no cabeçalho `Set-Cookie` para o par de nome-valor `CloudFront-Signature`. Em seguida, volte para [Para definir um signed cookie usando uma política padrão](#private-content-setting-signed-cookie-canned-policy-procedure) e adicione o cabeçalho `Set-Cookie` em `CloudFront-Key-Pair-Id`.