

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

Para establecer una cookie firmada que utiliza una política personalizada, complete los siguientes pasos.<a name="private-content-setting-signed-cookie-custom-policy-procedure"></a>

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

1. Si utiliza. NET o Java para crear URL 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-Policy`, `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 excluirlos, 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-Policy=base64 encoded version of the policy statement; 
   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 \$1.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`**  
Requiere que el espectador envíe la cookie únicamente en solicitudes de HTTP o HTTPS.  
**`CloudFront-Policy`**  
La instrucción de política en formato JSON después de haber eliminado los espacios vacíos y, a continuación, codificada con base64. Para obtener más información, consulte [Creación de una firma para una cookie firmada que utiliza una política personalizada](#private-content-custom-policy-signature-cookies).  
La instrucción de política controla el acceso que una cookie firmada concede a un usuario. Incluye los archivos a los que el usuario puede acceder, una fecha y hora de vencimiento, una fecha y hora opcionales a las que la URL se convierte en válida y una dirección IP opcional o un intervalo de direcciones IP a las que se permite acceder al archivo.  
**`CloudFront-Signature`**  
Una versión firmada, a la que se le ha aplicado una función hash y codificada en base64 de la instrucción de política JSON. Para obtener más información, consulte [Creación de una firma para una cookie firmada que utiliza una política personalizada](#private-content-custom-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`.

## Ejemplos de encabezados `Set-Cookie` para políticas personalizadas
<a name="example-set-cookie-headers-custom-policy"></a>

Consulte los siguientes ejemplos de pares de encabezados `Set-Cookie`. 

Si desea utilizar un nombre de dominio alternativo como example.org en las URL, debe agregarlo a la 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).

**Example Ejemplo 1**  
Puede utilizar los encabezados `Set-Cookie` de una cookie firmada cuando se utiliza el nombre de dominio asociado a la distribución en las URL de los archivos.  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
```

**Example Ejemplo 2**  
Puede utilizar los encabezados `Set-Cookie` de una cookie firmada cuando se utiliza el nombre de dominio alternativo (example.org) en las URL de los archivos.  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=example.org; Path=/; Secure; HttpOnly
```

**Example Ejemplo 3**  
Puede utilizar los pares de encabezados `Set-Cookie` de una solicitud firmada cuando se utiliza el nombre de dominio asociado a la distribución en las URL de los archivos.  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=dd111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
```

**Example Ejemplo 4**  
Puede utilizar los pares de encabezados `Set-Cookie` de una solicitud firmada cuando se utiliza un nombre de dominio alternativo (example.org) asociado a la distribución en las URL de los archivos.  

```
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=example.org; Path=/; Secure; HttpOnly
```

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

Para crear una instrucción de política para una política personalizada, complete los siguientes pasos. Para consultar varias instrucciones de políticas de ejemplo que controlan el acceso a archivos de distintas maneras, consulte [Ejemplos de instrucciones de políticas para una cookie firmada que utiliza una política personalizada](#private-content-custom-policy-statement-signed-cookies-examples).<a name="private-content-custom-policy-statement-cookies-procedure"></a>

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

1. Cree la instrucción de política en el siguiente formato JSON.

   ```
   {
       "Statement": [
           {
               "Resource": "URL of the file",
               "Condition": {
                   "DateLessThan": {
                       "AWS:EpochTime":required ending date and time in Unix time format and UTC
                   },
                   "DateGreaterThan": {
                       "AWS:EpochTime":optional beginning date and time in Unix time format and UTC
                   },
                   "IpAddress": {
                       "AWS:SourceIp": "optional IP address"
                   }
               }
           }
       ]
   }
   ```

   Tenga en cuenta lo siguiente:
   + Puede incluir una instrucción.
   + Utilice la codificación de caracteres UTF-8.
   + Incluya toda la puntuación y los nombres de parámetros exactamente como se especifica. No se aceptan abreviaturas de nombres de parámetros.
   + El orden de los parámetros de la sección `Condition` no importa.
   + Para obtener información acerca de valores para `Resource`, `DateLessThan`, `DateGreaterThan` y `IpAddress`, consulte [Valores que se especifican en la instrucción de política de una política personalizada para cookies firmadas](#private-content-custom-policy-statement-cookies-values).

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.

1. Codifique la instrucción de política 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-custom-policy.html)

1. Incluya el valor resultante en el encabezado `Set-Cookie` después de `CloudFront-Policy=`.

1. Cree una firma para el encabezado `Set-Cookie` en `CloudFront-Signature` aplicando una función hash, firmando y codificando con base64 la instrucción de política. Para obtener más información, consulte [Creación de una firma para una cookie firmada que utiliza una política personalizada](#private-content-custom-policy-signature-cookies).

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

Al crear una instrucción de política para una política personalizada, debe especificar los siguientes valores.

**Recurso**  
La URL base, incluidas las cadenas de consulta, de haberlas:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
Si omite el parámetro `Resource`, los usuarios podrán obtener acceso a todos los archivos asociados a cualquier distribución que esté asociada al par de claves utilizado para crear la URL firmada.
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.
+ **Wildcards (Caracteres comodín)**: puede utilizar el carácter comodín que coincide con cero o más caracteres (\$1) o el carácter comodín que coincide exactamente con un carácter (?) en cualquier lugar de la cadena. Por ejemplo, el valor:

  `https://d111111abcdef8.cloudfront.net/*game_download.zip*`

  incluiría, por ejemplo, los siguientes archivos:
  + `https://d111111abcdef8.cloudfront.net/game_download.zip`
  + `https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes`
  + `https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp`
+ **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.  
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).

**DateGreaterThan (opcional)**  
Una fecha y hora de inicio opcionales de la URL en formato de tiempo Unix (en segundos) y hora universal coordinada (UTC). Los usuarios no pueden acceder al archivo en la fecha y hora especificadas ni antes. No incluya el valor entre comillas. 

**IpAddress (opcional)**  
La dirección IP del cliente que hace la solicitud GET. Tenga en cuenta lo siguiente:  
+ Para permitir que cualquier dirección IP obtenga acceso al archivo, omita el parámetro `IpAddress`.
+ Puede especificar una dirección IP o a un rango de direcciones IP. Por ejemplo, no puede configurar la política para permitir el acceso si la dirección IP del cliente está en uno de dos rangos separados.
+ Para permitir el acceso desde una única dirección IP, especifique:

  `"`*Dirección IP IPv*`/32"`
+ Debe especificar rangos de direcciones IP en formato estándar IPv4 CIDR (por ejemplo, `192.0.2.0/24`). Para obtener más información, consulte *RFC 4632, Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan*, [https://tools.ietf.org/html/rfc4632](https://tools.ietf.org/html/rfc4632).
**importante**  
Las direcciones IP en formato IPv6, como 2001:0db8:85a3::8a2e:0370:7334, no son compatibles. 

  Si está utilizando una política personalizada que incluya `IpAddress`, no habilite IPv6 para la distribución. Si desea restringir el acceso a algún contenido por dirección IP y admite solicitudes IPv6 de otro contenido, puede crear dos distribuciones. Para obtener más información, consulte [Habilitación de IPv6 (solicitudes de espectadores)](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6) en el tema [Referencia de toda la configuración de distribución](distribution-web-values-specify.md).

## Ejemplos de instrucciones de políticas para una cookie firmada que utiliza una política personalizada
<a name="private-content-custom-policy-statement-signed-cookies-examples"></a>

En los siguientes ejemplos de instrucciones de políticas, se muestra cómo controlar el acceso a un archivo específico, a todos los archivos de un directorio o a todos los archivos asociados a un ID de par de claves. Los ejemplos también muestran cómo controlar el acceso de una dirección IP individual o a un rango de direcciones IP, y cómo impedir que los usuarios utilicen la cookie firmada después de una fecha y hora específicas.

Si copia y pega cualquiera de estos ejemplos, elimine los espacios vacíos (incluidos los tabuladores y los caracteres de línea nueva), sustituya los valores por sus propios valores e incluya un carácter de línea nueva después de la llave de cierre ( \$1 ).

Para obtener más información, consulte [Valores que se especifican en la instrucción de política de una política personalizada para cookies firmadas](#private-content-custom-policy-statement-cookies-values).

**Topics**
+ [Ejemplo de instrucción de política: acceso a un archivo desde un intervalo de direcciones IP](#private-content-custom-policy-statement-signed-cookies-example-one-object)
+ [Ejemplo de instrucción de política: acceso a todos los archivos de un directorio desde un intervalo de direcciones IP](#private-content-custom-policy-statement-signed-cookies-example-all-objects)
+ [Ejemplo de instrucción de política: acceso a todos los archivos asociados con un ID de par de claves desde una dirección IP](#private-content-custom-policy-statement-signed-cookies-example-one-ip)

### Ejemplo de instrucción de política: acceso a un archivo desde un intervalo de direcciones IP
<a name="private-content-custom-policy-statement-signed-cookies-example-one-object"></a>

En la siguiente política personalizada de ejemplo de una cookie firmada se especifica que un usuario puede acceder al archivo `https://d111111abcdef8.cloudfront.net/game_download.zip` desde las direcciones IP incluidas en el intervalo `192.0.2.0/24` hasta el 1 de enero de 2023 a las 10:00 UTC:

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.0/24"
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

### Ejemplo de instrucción de política: acceso a todos los archivos de un directorio desde un intervalo de direcciones IP
<a name="private-content-custom-policy-statement-signed-cookies-example-all-objects"></a>

La siguiente política personalizada de ejemplo le permite crear cookies firmadas para cualquier archivo del directorio `training`, tal y como indica el carácter comodín \$1 del parámetro `Resource`. Los usuarios podrán obtener acceso al archivo desde una dirección IP incluida en el rango `192.0.2.0/24` hasta el 1 de enero de 2013 a las 10:00 h UTC:

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/training/*",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.0/24"
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

Cada cookie firmada en la que utilice esta política tendrá una URL base que identificará un archivo específico; por ejemplo:

`https://d111111abcdef8.cloudfront.net/training/orientation.pdf`

### Ejemplo de instrucción de política: acceso a todos los archivos asociados con un ID de par de claves desde una dirección IP
<a name="private-content-custom-policy-statement-signed-cookies-example-one-ip"></a>

La siguiente política personalizada de ejemplo le permite establecer cookies firmadas para cualquier archivo asociado a cualquier distribución, tal y como indica el carácter comodín \$1 del parámetro `Resource`. El usuario debe utilizar la dirección IP `192.0.2.10/32`. (El valor `192.0.2.10/32` en notación CIDR se refiere a la dirección IP individual `192.0.2.10`). Los archivos solo van a estar disponibles desde el 1 de enero de 2013 a las 10:00 h UTC hasta el 2 de enero de 2013 a las 10:00 h UTC:

```
{
    "Statement": [
        {
            "Resource": "https://*",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.10/32"
                },
                "DateGreaterThan": {
                    "AWS:EpochTime": 1767290400
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1767376800
                }
            }
        }
    ]
}
```

Cada cookie firmada en la que utiliza esta política incluye una URL base que identifica un archivo específico de una distribución de CloudFront específica; por ejemplo:

`https://d111111abcdef8.cloudfront.net/training/orientation.pdf`

La cookie firmada también incluye un ID de par de claves que se debe asociar con un grupo de claves de confianza en la distribución (d111111abcdef8.cloudfront.net) que se especifica en la URL base.

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

La firma de una cookie firmada que utiliza una política personalizada es una versión de la instrucción de política a la que se le ha aplicado una función hash, firmada y codificada con base64. 

Para obtener más información y ejemplos de cómo resumir, aplicar una función hash y codificar la instrucción de política, consulte:
+ [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-custom-policy-signature-cookies-procedure"></a>

**Para crear una firma para una cookie firmada con una política personalizada**

1. Use la función hash SHA-1 o SHA-256 y RSA para resumir y firmar la instrucción de política JSON creada en el procedimiento [Para crear una instrucción de política para una URL firmada que use una política personalizada](private-content-creating-signed-url-custom-policy.md#private-content-custom-policy-creating-policy-procedure). Utilice la versión de la instrucción de política que ya no incluye espacios vacíos pero que aún no se ha codificado con base64.

   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-custom-policy.html)

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