

# Establecimiento de cookies firmadas mediante una política predefinida
<a name="private-content-setting-signed-cookie-canned-policy"></a>

Para establecer una cookie firmada utilizando una política predefinida, complete los pasos siguientes. Para crear la firma, consulte [Creación de una firma para una cookie firmada que utiliza una política predefinida](#private-content-canned-policy-signature-cookies).<a name="private-content-setting-signed-cookie-canned-policy-procedure"></a>

**Para establecer cookies firmadas mediante una política predefinida**

1. Si utiliza. NET o Java para crear cookies firmadas y no ha reformateado la clave privada del par de claves del formato .pem predeterminado a un formato compatible con .NET o con Java, hágalo ahora. Para obtener más información, consulte [Volver a formatear la clave privada (solo .NET y Java)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Programe su aplicación para que envíe tres encabezados `Set-Cookie` a los espectadores autorizados (o cuatro, si desea especificar un algoritmo hash). Necesita tres encabezados `Set-Cookie` porque cada encabezado `Set-Cookie` puede contener solo un par de nombre-valor y una cookie firmada de CloudFront requiere tres pares de nombre-valor. Los pares de nombre-valor son: `CloudFront-Expires`, `CloudFront-Signature` y `CloudFront-Key-Pair-Id`. Si lo desea, puede incluir un cuarto par nombre-valor, `CloudFront-Hash-Algorithm`, para especificar el algoritmo hash utilizado para la firma. Los valores deben estar presentes en el lector antes de que un usuario realice la primera solicitud de un archivo cuyo acceso desea controlar. 
**nota**  
En general, recomendamos que excluya los atributos `Expires` y `Max-Age`. Al excluir los atributos, el navegador elimina la cookie cuando el usuario lo cierra, lo que reduce la posibilidad de alguien obtenga acceso no autorizado a su contenido. Para obtener más información, consulte [Prevención del uso indebido de cookies firmadas](private-content-signed-cookies.md#private-content-signed-cookie-misuse).

   **Los nombres de los atributos de las cookies distinguen entre mayúsculas y minúsculas**. 

   Los saltos de línea se incluyen únicamente para que los atributos sean más legibles.

   ```
   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`**  
Nombre de dominio del archivo solicitado. Si no especifica un atributo `Domain`, el valor predeterminado será el nombre de dominio de la URL; esto es aplicable solo al nombre de dominio especificado, no a subdominios. Si especifica un atributo `Domain`, también será aplicable a subdominios. Un punto al inicio del nombre de dominio (por ejemplo, `Domain=.example.com`) es opcional. Además, si no especifica un atributo `Domain`, el nombre de dominio de la URL y el valor del atributo `Domain` deberán coincidir.  
Puede especificar el nombre de dominio que CloudFront ha asignado a la distribución, por ejemplo, d111111abcdef8.cloudfront.net, pero no puede especificar \*.cloudfront.net para el nombre de dominio.  
Si desea utilizar un nombre de dominio alternativo como example.com en las URL, debe añadir dicho nombre de dominio a su distribución independientemente de que especifique el atributo `Domain`. Para obtener más información, consulte [Nombres de dominio alternativos (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) en el tema [Referencia de toda la configuración de distribución](distribution-web-values-specify.md).  
**(Opcional) `Path`**  
Ruta del archivo solicitado. Si no especifica un atributo `Path`, el valor predeterminado será la ruta de la URL.  
**`Secure`**  
Requiere que el espectador cifre cookies antes de enviar una solicitud. Recomendamos que envíe el encabezado `Set-Cookie` a través de una conexión HTTPS para asegurarse de que los atributos de la cookie estén protegidos contra ataques man-in-the-middle.  
**`HttpOnly`**  
Define la forma en que el navegador (si es compatible) interactúa con el valor de la cookie. Con `HttpOnly`, JavaScript no puede acceder a los valores de las cookies. Esta precaución puede ayudar a mitigar los ataques de scripting entre sitios (XSS). Para obtener más información, consulte [Using HTTP cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies).  
**`CloudFront-Expires`**  
Especifique la fecha y la hora de vencimiento en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). Por ejemplo, 1 de enero de 2026 a las 10:00 UTC pasa a ser 1767290400 en formato de tiempo Unix.   
Para utilizar el tiempo de época, especifique un número entero de 64 bits para una fecha que no sea posterior a `9223372036854775807` (viernes, 11 de abril de 2262 a las 23:47:16.854 UTC).  
Para obtener información acerca de UTC, consulte *RFC 3339, fecha y hora en Internet: marcas temporales*, [https://tools.ietf.org/html/rfc3339](https://tools.ietf.org/html/rfc3339).  
**`CloudFront-Signature`**  
Una versión de una instrucción de política JSON firmada, a la que se le ha aplicado una función hash y codificada en base64. Para obtener más información, consulte [Creación de una firma para una cookie firmada que utiliza una política predefinida](#private-content-canned-policy-signature-cookies).  
**`CloudFront-Key-Pair-Id`**  
El ID de una clave pública de CloudFront, por ejemplo, `K2JCJMDEHXQW5F`. El ID de clave pública indica a CloudFront qué clave pública usar para validar la URL firmada. CloudFront compara la información de la firma con la información de la instrucción de política para comprobar que la URL no se ha manipulado.  
Esta clave pública debe pertenecer a un grupo de claves que tiene un signatario de confianza en la distribución. Para obtener más información, consulte [Especificación de los signatarios que pueden crear URL firmadas y cookies firmadas](private-content-trusted-signers.md).  
**`CloudFront-Hash-Algorithm`**  
(Opcional) El algoritmo hash utilizado para crear la firma. Los valores admitidos son `SHA1` y `SHA256`. Si no incluye esta cookie, CloudFront utilizará por defecto `SHA1`.

En el ejemplo siguiente, se muestran los encabezados `Set-Cookie` de una cookie firmada cuando se usa el nombre de dominio asociado a la distribución en las URL de los archivos:

```
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
```

En el ejemplo siguiente, se muestran los encabezados `Set-Cookie` de una cookie firmada cuando se usa el nombre de dominio alternativo example.org en las URL de los archivos:

```
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
```

Si desea utilizar un nombre de dominio alternativo como example.com en las URL, debe añadir dicho nombre de dominio a su distribución independientemente de que especifique el atributo `Domain`. Para obtener más información, consulte [Nombres de dominio alternativos (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) en el tema [Referencia de toda la configuración de distribución](distribution-web-values-specify.md).

## Creación de una firma para una cookie firmada que utiliza una política predefinida
<a name="private-content-canned-policy-signature-cookies"></a>

Para crear la firma para una cookie firmada que utilice una política predefinida, realice los procedimientos indicados a continuación.

**Topics**
+ [Creación de una instrucción de política para una cookie firmada que use una política predefinida](#private-content-canned-policy-statement-cookies)
+ [Firma de la instrucción de política para crear una firma para una cookie firmada que utiliza una política predefinida](#private-content-canned-policy-cookies-signing-policy-statement)

### Creación de una instrucción de política para una cookie firmada que use una política predefinida
<a name="private-content-canned-policy-statement-cookies"></a>

Al establecer una cookie firmada que use una política predefinida, el atributo `CloudFront-Signature` es una versión de una instrucción de política firmada y a la que se le ha aplicado una función hash. En el caso de cookies firmadas que utilizan una política predefinida, la instrucción de política no se incluye en el encabezado `Set-Cookie`, a diferencia de las cookies firmadas que utilizan una política personalizada. Para crear la instrucción de política, complete los pasos siguientes.<a name="private-content-canned-policy-statement-cookies-procedure"></a>

**Para crear una instrucción de política para una cookie firmada que use una política predefinida**

1. Cree la instrucción de política utilizando el siguiente formato JSON y codificación de caracteres UTF-8. Incluya toda la puntuación y otros valores literalmente, tal como se especifica. Para obtener más información acerca de los parámetros `Resource` y `DateLessThan`, consulte [Valores que se especifican en la instrucción de política de una política predefinida para cookies firmadas](#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. Elimine todos los espacios vacíos (incluidos tabuladores y caracteres de línea nueva) de la instrucción de la política. Es posible que tenga que incluir caracteres de escape en la cadena del código de la aplicación.

#### Valores que se especifican en la instrucción de política de una política predefinida para cookies firmadas
<a name="private-content-canned-policy-statement-cookies-values"></a>

Al crear una instrucción de una política predefinida, debe especificar los siguientes valores:

**Recurso**  
La URL base, incluidas las cadenas de consulta, de haberlas; por ejemplo:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
Puede especificar solo un valor en `Resource`.  
Tenga en cuenta lo siguiente:  
+ **Protocol (Protocolo)**: el valor debe comenzar con `http://` o `https://`.
+ **Query string parameters (Parámetros de cadena de consulta)**: si no tiene parámetros de cadena de consulta, omita el signo de interrogación.
+ **Alternate domain names (Nombres de dominio alternativos)**: si especifica un nombre de dominio alternativo (CNAME) en la URL, debe especificarlo al hacer referencia al archivo en la página web o aplicación. No especifique la URL de Amazon S3 para el archivo.

**DateLessThan**  
La fecha y hora de vencimiento de la URL en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). No incluya el valor entre comillas.  
Por ejemplo, 16 de marzo de 2015 a las 10:00 h UTC pasa a ser 1426500000 en formato de tiempo Unix.  
Este valor debe coincidir con el valor del atributo `CloudFront-Expires` en el encabezado `Set-Cookie`. No incluya el valor entre comillas.  
Para obtener más información, consulte [Cuándo comprueba CloudFront la fecha y hora de vencimiento de una cookie firmada](private-content-signed-cookies.md#private-content-check-expiration-cookie).

#### Ejemplo de instrucción de política para una política predefinida
<a name="private-content-canned-policy-cookies-sample-policy-statement"></a>

Si se utiliza el siguiente ejemplo de instrucción de política en una cookie firmada, los usuarios podrán obtener acceso al archivo `https://d111111abcdef8.cloudfront.net/horizon.jpg` hasta el 16 de marzo de 2015 a las 10:00 h UTC:

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

### Firma de la instrucción de política para crear una firma para una cookie firmada que utiliza una política predefinida
<a name="private-content-canned-policy-cookies-signing-policy-statement"></a>

Para crear el valor del atributo `CloudFront-Signature` en un encabezado `Set-Cookie`, aplique una función hash y firme la instrucción de política creada en [Para crear una instrucción de política para una cookie firmada que use una política predefinida](#private-content-canned-policy-statement-cookies-procedure). 

Para obtener más información y ejemplos de cómo aplicar una función hash, firmar y codificar la instrucción de política, consulte los siguientes temas:
+ [Comandos de Linux y OpenSSL para codificación y cifrado base64](private-content-linux-openssl.md)
+ [Ejemplos de código para la creación de una firma para una URL firmada](PrivateCFSignatureCodeAndExamples.md)

**nota**  
Los ejemplos vinculados utilizan SHA-1 de forma predeterminada. Para utilizar SHA-256 en su lugar, sustituya `sha1` por `sha256` en los comandos de OpenSSL e incluya la cookie `CloudFront-Hash-Algorithm` con un valor de `SHA256`.<a name="private-content-canned-policy-cookie-creating-signature-procedure"></a>

**Para crear una firma para una cookie firmada que use una política predefinida**

1. Use la función hash SHA-1 o SHA-256 y RSA para resumir y firmar la instrucción de política creada en el procedimiento [Para crear una instrucción de política para una cookie firmada que use una política predefinida](#private-content-canned-policy-statement-cookies-procedure). Utilice la versión de la instrucción de política que ya no incluye espacios vacíos.

   Si usa SHA-256, debe incluir la cookie `CloudFront-Hash-Algorithm` con un valor de `SHA256`.

   Para la clave privada requerida por la función hash, utilice una clave privada cuya clave pública esté en un grupo de claves de confianza activo para la distribución.
**nota**  
El método que utilice para resumir y aplicar una función hash la instrucción de política depende de su lenguaje de programación y plataforma. Para ver código de muestra, consulte [Ejemplos de código para la creación de una firma para una URL firmada](PrivateCFSignatureCodeAndExamples.md).

1. Elimine los espacios vacíos (incluidos tabuladores y caracteres de línea nueva) de la cadena a la que se le ha aplicado una función hash y firmada.

1. Codifique la cadena con codificación base64 de MIME. Para obtener más información, consulte la [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) de *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. Sustituya caracteres no válidos en una cadena de consulta de URL por caracteres válidos. En la siguiente tabla se muestran los caracteres válidos y no válidos.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-canned-policy.html)

1. Incluya el valor resultante en el encabezado `Set-Cookie` para el par nombre-valor `CloudFront-Signature`. A continuación, vuelva a [Para establecer cookies firmadas mediante una política predefinida](#private-content-setting-signed-cookie-canned-policy-procedure) y añada el encabezado `Set-Cookie` en `CloudFront-Key-Pair-Id`.