

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di cookie firmati
<a name="private-content-signed-cookies"></a>

CloudFront i cookie firmati consentono di controllare chi può accedere ai contenuti quando non si desidera modificare quelli correnti URLs o quando si desidera consentire l'accesso a più file con restrizioni, ad esempio tutti i file presenti nell'area riservata agli abbonati di un sito Web. Questo argomento descrive le considerazioni relative all'utilizzo di cookie firmati e come definire cookie firmati utilizzando policy predefinite e personalizzate.

**Topics**
+ [Scelta se utilizzare policy di accesso predefinite o personalizzate per cookie firmati](#private-content-choosing-canned-custom-cookies)
+ [Funzionamento di cookie firmati](#private-content-how-signed-cookies-work)
+ [Prevenzione contro l’uso improprio di cookie firmati](#private-content-signed-cookie-misuse)
+ [When CloudFront controlla la data e l'ora di scadenza in un cookie firmato](#private-content-check-expiration-cookie)
+ [Codice di esempio e strumenti di terza parte.](#private-content-overview-sample-code-cookies)
+ [Impostazione di cookie firmati mediante una policy di accesso predefinita](private-content-setting-signed-cookie-canned-policy.md)
+ [Impostazione di cookie firmati che utilizzano una policy personalizzata](private-content-setting-signed-cookie-custom-policy.md)
+ [Creazione di cookie firmati utilizzando PHP](signed-cookies-PHP.md)

## Scelta se utilizzare policy di accesso predefinite o personalizzate per cookie firmati
<a name="private-content-choosing-canned-custom-cookies"></a>

Quando crei un cookie firmato, scrivi una dichiarazione di policy in formato JSON che specifica le restrizioni sul cookie firmato, ad esempio, il periodo di validità del cookie. Puoi utilizzare policy predefinite o policy personalizzate. La seguente tabella confronta questi due tipi di policy:


****  

| Descrizione | Policy predefinita | Policy personalizzata | 
| --- | --- | --- | 
| Puoi riutilizzare la dichiarazione di policy per più file. Per riutilizzare la dichiarazione di policy, devi utilizzare caratteri jolly nell'oggetto `Resource`. Per ulteriori informazioni, consulta [Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy personalizzata](private-content-setting-signed-cookie-custom-policy.md#private-content-custom-policy-statement-cookies-values).)  | No | Sì | 
| Puoi specificare la data e l'ora in cui gli utenti possono iniziare ad accedere al tuo contenuto. | No | Sì (facoltativo) | 
| Puoi specificare la data e l'ora in cui gli utenti non possono più accedere al tuo contenuto. | Sì | Sì | 
| Puoi specificare l'indirizzo IP o l'intervallo di indirizzi IP degli utenti che possono accedere al tuo contenuto | No | Sì (facoltativo) | 

Per informazioni sulla creazione di cookie firmati utilizzando una policy predefinita, consulta [Impostazione di cookie firmati mediante una policy di accesso predefinita](private-content-setting-signed-cookie-canned-policy.md).

Per informazioni sulla creazione di cookie firmati utilizzando una policy personalizzata, consulta [Impostazione di cookie firmati che utilizzano una policy personalizzata](private-content-setting-signed-cookie-custom-policy.md).

## Funzionamento di cookie firmati
<a name="private-content-how-signed-cookies-work"></a>

Ecco una panoramica di come CloudFront configuri i cookie firmati e di come CloudFront reagisce quando un utente invia una richiesta che contiene un cookie firmato. 

1. Nella tua CloudFront distribuzione, specifica uno o più gruppi di chiavi affidabili, che contengono le chiavi pubbliche che CloudFront possono essere utilizzate per verificare la firma dell'URL. Utilizzi le chiavi private corrispondenti per firmare il URLs.

   Per ulteriori informazioni, consulta [Specificate i firmatari che possono creare cookie firmati e firmati URLs](private-content-trusted-signers.md).

1. Sviluppa la tua applicazione per determinare se un utente deve avere accesso al tuo contenuto e, in caso affermativo, per inviare tre intestazioni `Set-Cookie` al visualizzatore (Ogni `Set-Cookie` intestazione può contenere solo una coppia nome-valore e un cookie CloudFront firmato richiede tre coppie nome-valore.) Devi inviare le intestazioni `Set-Cookie` al visualizzatore prima che il visualizzatore richieda il tuo contenuto privato. Se hai impostato un breve periodo di scadenza sul cookie, è possibile che tu intenda inviare tre ulteriori intestazioni `Set-Cookie` in risposta a richieste successive, in modo che l'utente continui ad avere accesso.

   In genere, la CloudFront distribuzione avrà almeno due comportamenti di cache, uno che non richiede l'autenticazione e uno che richiede l'autenticazione. La pagina di errore della parte protetta del sito include un redirector o un collegamento a una pagina di login.

   Se configuri la distribuzione per memorizzare nella cache i file basati sui cookie, CloudFront non memorizza nella cache file separati in base agli attributi dei cookie firmati.

1. Un utente accede al tuo sito Web e paga per il contenuto o soddisfa alcuni altri requisiti per l'accesso.

1. La tua applicazione restituisce le intestazioni `Set-Cookie` nella risposta e il visualizzatore archivia la coppia nome-valore.

1. L'utente richiede un file.

   Il browser dell'utente o un altro visualizzatore ottiene le coppie nome-valore della fase 4 e le aggiunge alla richiesta in un'intestazione `Cookie`. Questo è il cookie firmato.

1. CloudFront utilizza la chiave pubblica per convalidare la firma nel cookie firmato e per confermare che il cookie non è stato manomesso. Se la firma non è valida, la richiesta viene respinta.

   Se la firma nel cookie è valida, CloudFront esamina l'informativa contenuta nel cookie (o ne crea una se utilizzi una politica predefinita) per confermare che la richiesta è ancora valida. Ad esempio, se hai specificato una data e un'ora di inizio e di fine per il cookie, CloudFront conferma che l'utente sta tentando di accedere ai tuoi contenuti durante il periodo di tempo in cui desideri consentire l'accesso.

   Se la richiesta soddisfa i requisiti dell'informativa, CloudFront serve i contenuti come per i contenuti non soggetti a restrizioni: determina se il file è già presente nella cache edge, inoltra la richiesta all'origine se necessario e restituisce il file all'utente.

## Prevenzione contro l’uso improprio di cookie firmati
<a name="private-content-signed-cookie-misuse"></a>

Se specifichi il parametro `Domain` in un'intestazione `Set-Cookie`, specifica il valore più preciso possibile per ridurre l'accesso potenziale da parte di un utente con lo stesso nome di dominio radice. Ad esempio, ape.example.com è preferibile a example.com, soprattutto quando non controlli example.com. In questo modo, impedisci agli utenti di accedere al tuo contenuto a partire da www.example.com.

Per impedire questo tipo di attacco, procedi come segue:
+ Escludi gli attributi di cookie `Expires` e `Max-Age`, in modo che l'intestazione `Set-Cookie` crei un cookie di sessione. I cookie di sessione vengono eliminati automaticamente quando l'utente chiude il browser, cosa che riduce la possibilità che qualcuno ottenga accesso non autorizzato al tuo contenuto.
+ Includi l'attributo `Secure`, in modo che il cookie sia crittografato quando un visualizzatore lo include in una richiesta.
+ Quando possibile, utilizza una policy personalizzata e includi l'indirizzo IP del visualizzatore.
+ Nell'attributo `CloudFront-Expires`, specifica la scadenza ragionevole più corta basata sul periodo di tempo durante il quale intendi autorizzare gli utenti ad accedere al tuo contenuto.

## When CloudFront controlla la data e l'ora di scadenza in un cookie firmato
<a name="private-content-check-expiration-cookie"></a>

Per determinare se un cookie firmato è ancora valido, CloudFront controlla la data e l'ora di scadenza nel cookie al momento della richiesta HTTP. Se un client inizia a scaricare un file di grandi dimensioni immediatamente prima della scadenza, il download viene completato anche se la scadenza avviene durante il download. Se la connessione TCP viene interrotta e il client tenta di riavviare il download dopo la scadenza, il download non riesce.

Se un client utilizza Range GETs per ottenere un file in parti più piccole, qualsiasi richiesta GET che si verifica dopo la scadenza avrà esito negativo. Per ulteriori informazioni su Range GETs, vedere[Come CloudFront elabora le richieste parziali per un oggetto (intervallo GETs)](RangeGETs.md).

## Codice di esempio e strumenti di terza parte.
<a name="private-content-overview-sample-code-cookies"></a>

Il codice di esempio per i contenuti privati mostra solo come creare la firma per signed URLs. Tuttavia, il processo per la creazione di una firma per un cookie firmato è molto simile, di conseguenza una gran parte del codice di esempio è ancora rilevante. Per ulteriori informazioni, consultare i seguenti argomenti: 
+ [Creazione di una firma per URL utilizzando Perl](CreateURLPerl.md)
+ [Creazione di una firma per URL utilizzando PHP](CreateURL_PHP.md)
+ [Crea una firma per URL utilizzando C\$1 e .NET Framework](CreateSignatureInCSharp.md)
+ [Creazione di una firma per URL utilizzando Java](CFPrivateDistJavaDevelopment.md)

# Impostazione di cookie firmati mediante una policy di accesso predefinita
<a name="private-content-setting-signed-cookie-canned-policy"></a>

Per definire un cookie firmato utilizzando una policy predefinita, completa la procedura descritta di seguito. Per creare la firma, consulta [Creazione di una firma per un cookie firmato che utilizza una policy di accesso predefinita](#private-content-canned-policy-signature-cookies).<a name="private-content-setting-signed-cookie-canned-policy-procedure"></a>

**Definizione di un cookie firmato utilizzando una policy predefinita**

1. Se utilizzi .NET o Java per creare cookie firmati e non hai riformattato la chiave privata per la coppia di chiavi dal formato default .pem a un formato compatibile con .NET o Java, fallo adesso. Per ulteriori informazioni, consulta [Riformattazione della chiave privata (solo .NET e Java)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Programma l'applicazione per inviare tre `Set-Cookie` header a utenti approvati (o quattro, se desideri specificare un algoritmo hash). Sono necessarie tre intestazioni `Set-Cookie` in quanto ogni intestazione `Set-Cookie` può contenere una sola coppia nome-valore e un cookie firmato di CloudFront richiede tre coppie nome-valore. Le coppie nome-valore sono: `CloudFront-Expires`, `CloudFront-Signature` e `CloudFront-Key-Pair-Id`. Facoltativamente, puoi includere una quarta coppia nome-valore per specificare l'algoritmo `CloudFront-Hash-Algorithm` hash utilizzato per la firma. I valori devono essere presenti sul visualizzatore prima che un utente effettui la prima richiesta per un file di cui intendi controllare l'accesso. 
**Nota**  
Come regola generale, ti consigliamo di escludere attributi `Expires` e `Max-Age`. In seguito all'esclusione degli attributi, il browser elimina il cookie quando l'utente chiude il browser e ciò riduce la possibilità che qualcuno ottenga accesso non autorizzato al tuo contenuto. Per ulteriori informazioni, consulta [Prevenzione contro l’uso improprio di cookie firmati](private-content-signed-cookies.md#private-content-signed-cookie-misuse).

   **I nomi degli attributi di cookie fanno distinzione tra maiuscole e minuscole**. 

   Le interruzioni di riga sono incluse solo per rendere gli attributi più leggibili.

   ```
   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
   ```  
**(Facoltativo) `Domain`**  
Il nome di dominio per il file richiesto. Se non specifichi un attributo `Domain`, il valore di default è il nome di dominio nell'URL e viene applicato solo al nome di dominio specificato, non ai sottodomini. Se specifichi un attributo `Domain`, è applicabile anche ai sottodomini. Un punto all'inizio del nome di dominio (ad esempio `Domain=.example.com`) è facoltativo. Inoltre, se specifichi un attributo `Domain`, il nome di dominio nell'URL e il valore dell'attributo `Domain` devono corrispondere.  
Puoi specificare il nome di dominio CloudFront assegnato alla tua distribuzione, ad esempio d111111abcdef8.cloudfront.net, ma non puoi specificare \$1.cloudfront.net per il nome di dominio.  
Se desideri utilizzare un nome di dominio alternativo come example.com in, devi aggiungere il nome di dominio alternativo alla tua distribuzione indipendentemente dal fatto che tu specifichi l'attributo. URLs `Domain` Per ulteriori informazioni, consulta [Nomi di dominio alternativi () CNAMEs](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) nell'argomento [Riferimento a tutte le impostazioni di distribuzione](distribution-web-values-specify.md).  
**(Facoltativo) `Path`**  
Il percorso per il file richiesto. Se non si specifichi un attributo `Path`, il valore di default è il percorso nell'URL.  
**`Secure`**  
Richiede al visualizzatore di crittografare i cookie prima dell'invio di una richiesta. Ti consigliamo di inviare l'`Set-Cookie`intestazione tramite una connessione HTTPS per assicurarti che gli attributi del cookie siano protetti dagli attacchi. man-in-the-middle  
**`HttpOnly`**  
Definisce in che modo il browser (ove supportato) interagisce con il valore del cookie. Con`HttpOnly`, i valori dei cookie sono inaccessibili a. JavaScript Questa precauzione può aiutare a mitigare gli attacchi di cross-site scripting (XSS). Per ulteriori informazioni, consulta [Utilizzo di cookie HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies).  
**`CloudFront-Expires`**  
Specifica la data e l'ora di scadenza in formato Unix (in secondi) e UTC. Ad esempio, le 10:00 UTC del 1° gennaio 2026 vengono convertite in 1767290400 nel formato orario Unix.   
Per usare il tempo epoch, specifica un numero intero a 64 bit per una data non posteriore a `9223372036854775807` (venerdì 11 aprile 2262 alle 23:47:16.854 UTC).  
Per informazioni sul formato UTC, consulta *RFC 3339, Date and Time on the Internet: Timestamps*, [https://tools.ietf.org/html/rfc3339](https://tools.ietf.org/html/rfc3339).  
**`CloudFront-Signature`**  
Una versione con hash, firma e codifica base64 di una dichiarazione di policy JSON. Per ulteriori informazioni, consulta [Creazione di una firma per un cookie firmato che utilizza una policy di accesso predefinita](#private-content-canned-policy-signature-cookies).  
**`CloudFront-Key-Pair-Id`**  
L'ID di una chiave pubblica, ad esempio,. CloudFront `K2JCJMDEHXQW5F` L'ID della chiave pubblica indica CloudFront quale chiave pubblica utilizzare per convalidare l'URL firmato. CloudFront confronta le informazioni contenute nella firma con quelle contenute nell'informativa per verificare che l'URL non sia stato manomesso.  
Questa chiave pubblica deve appartenere a un gruppo di chiavi che sia un firmatario attendibile nella distribuzione. Per ulteriori informazioni, consulta [Specificate i firmatari che possono creare cookie firmati e firmati URLs](private-content-trusted-signers.md).  
**`CloudFront-Hash-Algorithm`**  
(Facoltativo) L'algoritmo hash utilizzato per creare la firma. I valori supportati sono `SHA1` e `SHA256`. Se non includi questo cookie, l'CloudFront impostazione predefinita è. `SHA1`

L'esempio seguente mostra le `Set-Cookie` intestazioni per un cookie firmato quando utilizzi il nome di dominio associato alla distribuzione in URLs for your files:

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

L'esempio seguente mostra le `Set-Cookie` intestazioni per un cookie firmato quando utilizzi il nome di dominio alternativo example.org nella cartella per i tuoi file: URLs 

```
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 desideri utilizzare un nome di dominio alternativo come example.com in URLs, devi aggiungere il nome di dominio alternativo alla tua distribuzione indipendentemente dal fatto che tu specifichi l'attributo. `Domain` Per ulteriori informazioni, consulta [Nomi di dominio alternativi () CNAMEs](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) nell'argomento [Riferimento a tutte le impostazioni di distribuzione](distribution-web-values-specify.md).

## Creazione di una firma per un cookie firmato che utilizza una policy di accesso predefinita
<a name="private-content-canned-policy-signature-cookies"></a>

Per creare la firma per un cookie firmato che utilizza una policy di accesso predefinita, completa le seguenti procedure.

**Topics**
+ [Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy di accesso predefinita](#private-content-canned-policy-statement-cookies)
+ [Firma di una dichiarazione di policy per creare una firma per un cookie firmato che utilizza una policy di accesso predefinita](#private-content-canned-policy-cookies-signing-policy-statement)

### Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy di accesso predefinita
<a name="private-content-canned-policy-statement-cookies"></a>

Quando definisci un cookie firmato che utilizza una policy predefinita, l'attributo `CloudFront-Signature` è una versione con hash e firma di una dichiarazione di policy. Per i cookie firmati che utilizzano una policy predefinita, non includi la dichiarazione di policy nell'intestazione `Set-Cookie`, come avviene per i cookie firmati che utilizzano una policy personalizzata. Per creare una dichiarazione di policy, esegui la procedura descritta di seguito.<a name="private-content-canned-policy-statement-cookies-procedure"></a>

**Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy predefinita**

1. Crea la dichiarazione di policy utilizzando il formato JSON seguente e la codifica caratteri UTF-8. Includi tutta le punteggiatura e altri valori letterali esattamente come specificato. Per informazioni sui parametri `Resource` e `DateLessThan`, consulta [Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy predefinita](#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. Rimuovi tutti gli spazi vuoti (inclusi i caratteri di nuova riga e le tabulazioni) dalla dichiarazione di policy. È possibile che tu debba includere caratteri di escape nella stringa del codice dell'applicazione.

#### Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy predefinita
<a name="private-content-canned-policy-statement-cookies-values"></a>

Quando crei una dichiarazione di policy per una policy predefinita, specifichi i valori seguenti:

**Risorsa**  
L'URL di base che include le eventuali stringhe di query, ad esempio:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
Puoi specificare un solo valore per `Resource`.  
Tieni presente quanto segue:  
+ **Protocollo**: il valore deve iniziare con `http://` o `https://`.
+ **Parametri di stringa di query**: se non hai parametri di stringa di query, ometti il punto di domanda.
+ **Nomi di dominio alternativi**: se specifichi un nome di dominio alternativo (CNAME) nell'URL, devi specificarlo quando fai riferimento al file nella pagina Web o nell'applicazione. Non specificare l'URL Amazon S3 per il file.

**DateLessThan**  
La data e l'ora di scadenza per l'URL in formato Unix (in secondi) e UTC. Non racchiudere il valore tra virgolette.  
Ad esempio, 16 marzo 2015 10:00 UTC viene convertito in 1426500000 nel formato Unix.  
Questo valore deve corrispondere al valore dell'attributo `CloudFront-Expires` nell'intestazione `Set-Cookie`. Non racchiudere il valore tra virgolette.  
Per ulteriori informazioni, consulta [When CloudFront controlla la data e l'ora di scadenza in un cookie firmato](private-content-signed-cookies.md#private-content-check-expiration-cookie).

#### Esempio di dichiarazione di policy per una policy predefinita
<a name="private-content-canned-policy-cookies-sample-policy-statement"></a>

Quando utilizzi l'esempio di dichiarazione di policy seguente in un cookie firmato, un utente può accedere al file `https://d111111abcdef8.cloudfront.net/horizon.jpg` fino al 16 marzo 2015 10:00 UTC:

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

### Firma di una dichiarazione di policy per creare una firma per un cookie firmato che utilizza una policy di accesso predefinita
<a name="private-content-canned-policy-cookies-signing-policy-statement"></a>

Per creare il valore per l'attributo `CloudFront-Signature` in un'intestazione `Set-Cookie`, sottoponi a hashing e firmi la dichiarazione di policy che hai creato in [Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy predefinita](#private-content-canned-policy-statement-cookies-procedure). 

Per ulteriori informazioni ed esempi su come sottoporre a hashing, firmare e codificare la dichiarazione di policy, consulta i seguenti argomenti:
+ [Comandi Linux e OpenSSL per la crittografia e la codifica base64](private-content-linux-openssl.md)
+ [Codice di esempio per la creazione di una firma per un URL firmato](PrivateCFSignatureCodeAndExamples.md)

**Nota**  
Gli esempi collegati utilizzano SHA-1 per impostazione predefinita. Per utilizzare invece SHA-256, sostituiscilo `sha1` con `sha256` nei comandi OpenSSL e includi il cookie con il `CloudFront-Hash-Algorithm` valore di. `SHA256`<a name="private-content-canned-policy-cookie-creating-signature-procedure"></a>

**Creazione di una firma per un cookie firmato che utilizza una policy predefinita**

1. Utilizzate la funzione hash SHA-1 o SHA-256 e RSA per eseguire l'hash e firmare la dichiarazione politica creata durante la procedura. [Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy predefinita](#private-content-canned-policy-statement-cookies-procedure) Utilizza la versione della dichiarazione di policy che non include più spazi vuoti.

   Se si utilizza SHA-256, è necessario includere il cookie con un valore di. `CloudFront-Hash-Algorithm` `SHA256`

   Per la chiave privata richiesta dalla funzione hash, utilizza una chiave privata la cui chiave pubblica si trova in un gruppo di chiavi attendibili attivo per la distribuzione.
**Nota**  
Il metodo utilizzato per sottoporre a hashing e firmare la dichiarazione di policy dipende dalla piattaforma e dal linguaggio di programmazione. Per il codice di esempio, consulta [Codice di esempio per la creazione di una firma per un URL firmato](PrivateCFSignatureCodeAndExamples.md).

1. Rimuovi gli spazi vuoti (inclusi i caratteri di nuova riga e le tabulazioni) dalla stringa con hash e firmata.

1. Codifica la stringa utilizzando la codifica base64 MIME. Per ulteriori informazioni, vedere [Sezione 6.8, Base64 Content-Transfer-Encoding in RFC 2045,](https://tools.ietf.org/html/rfc2045#section-6.8) *MIME (Multipurpose Internet Mail Extensions), parte prima: Formato dei corpi dei messaggi Internet*.

1. Sostituisci i caratteri non validi nella stringa di query dell'URL con caratteri validi. La tabella seguente elenca i caratteri validi e non validi.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-canned-policy.html)

1. Includi il valore risultante nell'intestazione `Set-Cookie` per la coppia nome-valore `CloudFront-Signature`. Quindi ritorna a [Definizione di un cookie firmato utilizzando una policy predefinita](#private-content-setting-signed-cookie-canned-policy-procedure) e aggiungi l'intestazione `Set-Cookie` per `CloudFront-Key-Pair-Id`.

# Impostazione di cookie firmati che utilizzano una policy personalizzata
<a name="private-content-setting-signed-cookie-custom-policy"></a>

Per definire un cookie firmato che utilizza una policy personalizzata, procedi come indicato di seguito.<a name="private-content-setting-signed-cookie-custom-policy-procedure"></a>

**Impostazione di un cookie firmato che utilizza una policy personalizzata**

1. Se stai usando .NET o Java per creare un file firmato URLs e se non hai riformattato la chiave privata per la tua coppia di chiavi dal formato.pem predefinito a un formato compatibile con.NET o con Java, fallo ora. Per ulteriori informazioni, consulta [Riformattazione della chiave privata (solo .NET e Java)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Programma l'applicazione per inviare tre `Set-Cookie` intestazioni ai visualizzatori approvati (o quattro, se desideri specificare un algoritmo hash). Sono necessarie tre `Set-Cookie` intestazioni perché ogni `Set-Cookie` intestazione può contenere solo una coppia nome-valore e un CloudFront cookie firmato richiede tre coppie nome-valore. Le coppie nome-valore sono: `CloudFront-Policy`, `CloudFront-Signature` e `CloudFront-Key-Pair-Id`. Facoltativamente, puoi includere una quarta coppia nome-valore per specificare l'algoritmo hash utilizzato per `CloudFront-Hash-Algorithm` la firma. I valori devono essere presenti sul visualizzatore prima che un utente effettui la prima richiesta per un file di cui intendi controllare l'accesso. 
**Nota**  
Come regola generale, ti consigliamo di escludere attributi `Expires` e `Max-Age`. Ciò comporta l'eliminazione del cookie da parte del browser quando l'utente chiude il browser, cosa che riduce la possibilità che qualcuno ottenga accesso non autorizzato al tuo contenuto. Per ulteriori informazioni, consulta [Prevenzione contro l’uso improprio di cookie firmati](private-content-signed-cookies.md#private-content-signed-cookie-misuse).

   **I nomi degli attributi di cookie fanno distinzione tra maiuscole e minuscole**. 

   Le interruzioni di riga sono incluse solo per rendere gli attributi più leggibili.

   ```
   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
   ```  
**(Facoltativo) `Domain`**  
Il nome di dominio per il file richiesto. Se non specifichi un attributo `Domain`, il valore di default è il nome di dominio nell'URL e viene applicato solo al nome di dominio specificato, non ai sottodomini. Se specifichi un attributo `Domain`, è applicabile anche ai sottodomini. Un punto all'inizio del nome di dominio (ad esempio `Domain=.example.com`) è facoltativo. Inoltre, se specifichi un attributo `Domain`, il nome di dominio nell'URL e il valore dell'attributo `Domain` devono corrispondere.  
Puoi specificare il nome di dominio CloudFront assegnato alla tua distribuzione, ad esempio d111111abcdef8.cloudfront.net, ma non puoi specificare \$1.cloudfront.net per il nome di dominio.  
Se desideri utilizzare un nome di dominio alternativo come example.com in, devi aggiungere il nome di dominio alternativo alla tua distribuzione indipendentemente dal fatto che tu specifichi l'attributo. URLs `Domain` Per ulteriori informazioni, consulta [Nomi di dominio alternativi () CNAMEs](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) nell'argomento [Riferimento a tutte le impostazioni di distribuzione](distribution-web-values-specify.md).  
**(Facoltativo) `Path`**  
Il percorso per il file richiesto. Se non si specifichi un attributo `Path`, il valore di default è il percorso nell'URL.  
**`Secure`**  
Richiede al visualizzatore di crittografare i cookie prima dell'invio di una richiesta. Ti consigliamo di inviare l'`Set-Cookie`intestazione tramite una connessione HTTPS per assicurarti che gli attributi del cookie siano protetti dagli attacchi. man-in-the-middle  
**`HttpOnly`**  
Richiede al visualizzatore di inviare il cookie solo nelle richieste HTTP o HTTPS.  
**`CloudFront-Policy`**  
La dichiarazione di policy in formato JSON, con spazi vuoti rimossi e codifica base64. Per ulteriori informazioni, consulta [Creazione di una firma per un cookie firmato che utilizza una policy personalizzata](#private-content-custom-policy-signature-cookies).  
La dichiarazione di policy controlla l'accesso che un cookie firmato concede a un utente. Include i file a cui l'utente può accedere, una data e un'ora di scadenza, una data e un'ora facoltative in cui l'URL diventa valido e un indirizzo IP facoltativo o un intervallo di indirizzi IP a cui è consentito accedere al file.  
**`CloudFront-Signature`**  
Una versione con hash, firma e codifica base64 della dichiarazione di policy JSON. Per ulteriori informazioni, consulta [Creazione di una firma per un cookie firmato che utilizza una policy personalizzata](#private-content-custom-policy-signature-cookies).  
**`CloudFront-Key-Pair-Id`**  
L'ID di una chiave CloudFront pubblica, ad esempio,`K2JCJMDEHXQW5F`. L'ID della chiave pubblica indica CloudFront quale chiave pubblica utilizzare per convalidare l'URL firmato. CloudFrontconfronta le informazioni contenute nella firma con quelle contenute nell'informativa per verificare che l'URL non sia stato manomesso.  
Questa chiave pubblica deve appartenere a un gruppo di chiavi che sia un firmatario attendibile nella distribuzione. Per ulteriori informazioni, consulta [Specificate i firmatari che possono creare cookie firmati e firmati URLs](private-content-trusted-signers.md).  
**`CloudFront-Hash-Algorithm`**  
(Facoltativo) L'algoritmo hash utilizzato per creare la firma. I valori supportati sono `SHA1` e `SHA256`. Se non includi questo cookie, l'CloudFront impostazione predefinita è. `SHA1`

## Intestazioni `Set-Cookie` di esempio per policy personalizzate
<a name="example-set-cookie-headers-custom-policy"></a>

Vedi i seguenti esempi di coppie di intestazioni `Set-Cookie`. 

Se desideri utilizzare un nome di dominio alternativo come example.org in URLs, devi aggiungere il nome di dominio alternativo alla tua distribuzione indipendentemente dal fatto che tu specifichi l'attributo. `Domain` Per ulteriori informazioni, consulta [Nomi di dominio alternativi () CNAMEs](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME) nell'argomento [Riferimento a tutte le impostazioni di distribuzione](distribution-web-values-specify.md).

**Example Esempio 1**  
Puoi utilizzare le `Set-Cookie` intestazioni per un cookie firmato quando utilizzi il nome di dominio associato alla tua distribuzione in for your files. URLs   

```
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 Esempio 2**  
Puoi utilizzare le `Set-Cookie` intestazioni per un cookie firmato quando utilizzi un nome di dominio alternativo (example.org) nella cartella per i tuoi file. URLs   

```
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 Esempio 3**  
Puoi utilizzare le coppie di `Set-Cookie` intestazioni per una richiesta firmata quando utilizzi il nome di dominio associato alla tua distribuzione in for your files. URLs   

```
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 Esempio 4**  
Puoi utilizzare le coppie di `Set-Cookie` intestazioni per una richiesta firmata quando utilizzi un nome di dominio alternativo (example.org) associato alla tua distribuzione nella sezione per i tuoi file. URLs   

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

## Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy personalizzata
<a name="private-content-custom-policy-statement-cookies"></a>

Per creare una dichiarazione di policy per una policy personalizzata, completa i seguenti passaggi. Per vari esempi di dichiarazioni di policy che controllano l'accesso a file in vari modi, consulta [Esempi di dichiarazioni di policy per un cookie firmato che utilizza una policy personalizzata](#private-content-custom-policy-statement-signed-cookies-examples).<a name="private-content-custom-policy-statement-cookies-procedure"></a>

**Creazione di una dichiarazione di policy per un cookie firmato che utilizza una policy personalizzata**

1. Crea la dichiarazione di policy utilizzando il formato JSON seguente.

   ```
   {
       "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"
                   }
               }
           }
       ]
   }
   ```

   Tieni presente quanto segue:
   + Puoi includere solo una dichiarazione.
   + Utilizza la codifica caratteri UTF-8.
   + Includi tutta le punteggiatura e nomi di parametro esattamente come specificato. Le abbreviazioni per i nomi di parametro non sono accettate.
   + L'ordine dei parametri nella sezione `Condition` non è rilevante.
   + Per informazioni sui valori per `Resource`, `DateLessThan`, `DateGreaterThan` e `IpAddress`, consulta [Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy personalizzata](#private-content-custom-policy-statement-cookies-values).

1. Rimuovi tutti gli spazi vuoti (inclusi i caratteri di nuova riga e le tabulazioni) dalla dichiarazione di policy. È possibile che tu debba includere caratteri di escape nella stringa del codice dell'applicazione.

1. Codifica la dichiarazione di policy utilizzando la codifica base64 MIME. Per ulteriori informazioni, vedere [Sezione 6.8, Base64 Content-Transfer-Encoding in RFC 2045,](https://tools.ietf.org/html/rfc2045#section-6.8) *MIME (Multipurpose Internet Mail Extensions),* parte prima: Formato dei corpi dei messaggi Internet.

1. Sostituisci i caratteri non validi nella stringa di query dell'URL con caratteri validi. La tabella seguente elenca i caratteri validi e non validi.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html)

1. Includi il valore risultante nella tua intestazione `Set-Cookie` dopo `CloudFront-Policy=`.

1. Crea una firma per l'intestazione `Set-Cookie` per `CloudFront-Signature` sottoponendo a hashing, firmando e codificando in base64 la dichiarazione di policy. Per ulteriori informazioni, consulta [Creazione di una firma per un cookie firmato che utilizza una policy personalizzata](#private-content-custom-policy-signature-cookies).

### Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy personalizzata
<a name="private-content-custom-policy-statement-cookies-values"></a>

Quando crei una dichiarazione di policy per una policy personalizzata, specifichi i valori seguenti.

**Risorsa**  
L'URL di base che include le eventuali stringhe di query:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
Se ometti il parametro `Resource`, gli utenti possono accedere a tutti i file associati a qualsiasi distribuzione associata alla coppia di chiavi che utilizzi per creare l'URL firmato.
Puoi specificare un solo valore per `Resource`.  
Tieni presente quanto segue:  
+ **Protocollo**: il valore deve iniziare con `http://` o `https://`.
+ **Parametri di stringa di query**: se non hai parametri di stringa di query, ometti il punto di domanda.
+ **Caratteri jolly**: puoi utilizzare il carattere jolly che corrisponde a zero o più caratteri (\$1) o il carattere jolly che corrisponde esattamente a un carattere (?) in qualsiasi punto della stringa. Ad esempio, il valore:

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

  includerebbe (ad esempio) i seguenti file:
  + `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`
+ **Nomi di dominio alternativi**: se specifichi un nome di dominio alternativo (CNAME) nell'URL, devi specificarlo quando fai riferimento al file nella pagina Web o nell'applicazione. Non specificare l'URL Amazon S3 per il file.

**DateLessThan**  
La data e l'ora di scadenza per l'URL in formato Unix (in secondi) e UTC. Non racchiudere il valore tra virgolette.  
Ad esempio, 16 marzo 2015 10:00 UTC viene convertito in 1426500000 nel formato Unix.  
Per ulteriori informazioni, consulta [When CloudFront controlla la data e l'ora di scadenza in un cookie firmato](private-content-signed-cookies.md#private-content-check-expiration-cookie).

**DateGreaterThan (Facoltativo)**  
Una data e un'ora di inizio (facoltative) per l'URL in formato Unix (in secondi) e UTC. Agli utenti non è consentito accedere al file prima o in corrispondenza della data e ora specificate. Non racchiudere il valore tra virgolette. 

**IpAddress (Opzionale)**  
L'indirizzo IP del client che esegue la richiesta GET. Tieni presente quanto segue:  
+ Per consentire a qualsiasi indirizzo IP di accedere al file, ometti il parametro `IpAddress`.
+ Puoi specificare un indirizzo IP o un intervallo di indirizzi IP. Ad esempio, non puoi definire la policy per consentire l'accesso se l'indirizzo IP del client è in uno dei due intervalli distinti.
+ Per consentire l'accesso da un singolo indirizzo IP, specifica:

  `"`*IPv4 IP address*`/32"`
+ È necessario specificare gli intervalli di indirizzi IP nel formato IPv4 CIDR standard (ad esempio,`192.0.2.0/24`). Per ulteriori informazioni, consulta *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**  
Gli indirizzi IP in IPv6 formato, ad esempio 2001:0 db 8:85 a3: :8a2e: 0370:7334, non sono supportati. 

  Se utilizzi una politica personalizzata che include, non abilitarla per la distribuzione. `IpAddress` IPv6 Se desideri limitare l'accesso ad alcuni contenuti in base all'indirizzo IP e IPv6 alle richieste di supporto per altri contenuti, puoi creare due distribuzioni. Per ulteriori informazioni, consulta [Abilita IPv6 (richieste del visualizzatore)](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6) nell'argomento [Riferimento a tutte le impostazioni di distribuzione](distribution-web-values-specify.md).

## Esempi di dichiarazioni di policy per un cookie firmato che utilizza una policy personalizzata
<a name="private-content-custom-policy-statement-signed-cookies-examples"></a>

Gli esempi di dichiarazioni di policy seguenti mostrano il modo in cui controllare l'accesso a un determinato file, a tutti i file in una directory o a tutti i file associati a un ID di coppia di chiavi. Gli esempi mostrano inoltre come controllare l'accesso da un singolo indirizzo IP o da un intervallo di indirizzi IP e come impedire agli utenti di utilizzare il cookie firmato dopo una data e un'ora specificate.

Se copi e incolli uno di questi esempi, devi rimuovere gli eventuali spazi vuoti (inclusi i caratteri di nuova riga e le tabulazioni), sostituire i valori con i tuoi valori e includere un carattere di nuova riga dopo la parentesi graffa di chiusura ( \$1 ).

Per ulteriori informazioni, consulta [Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy personalizzata](#private-content-custom-policy-statement-cookies-values).

**Topics**
+ [Esempio di dichiarazione di policy: accesso a un file da un intervallo di indirizzi IP](#private-content-custom-policy-statement-signed-cookies-example-one-object)
+ [Esempio di dichiarazione di policy: accesso a tutti i file in una directory da un intervallo di indirizzi IP](#private-content-custom-policy-statement-signed-cookies-example-all-objects)
+ [Esempio di dichiarazione di policy: accesso a tutti i file associati a un ID di coppia di chiavi da un indirizzo IP](#private-content-custom-policy-statement-signed-cookies-example-one-ip)

### Esempio di dichiarazione di policy: accesso a un file da un intervallo di indirizzi IP
<a name="private-content-custom-policy-statement-signed-cookies-example-one-object"></a>

L'esempio seguente di policy personalizzata in un cookie firmato specifica che un utente può accedere al file `https://d111111abcdef8.cloudfront.net/game_download.zip` dagli indirizzi IP nell'intervallo `192.0.2.0/24` fino al 1° gennaio 2013 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
                }
            }
        }
    ]
}
```

### Esempio di dichiarazione di policy: accesso a tutti i file in una directory da un intervallo di indirizzi IP
<a name="private-content-custom-policy-statement-signed-cookies-example-all-objects"></a>

L'esempio di policy personalizzata seguente consente di creare cookie firmati per qualsiasi file nella directory `training`, come indicato dal carattere jolly \$1 nel parametro `Resource`. Gli utenti possono accedere al file da un indirizzo IP incluso nell'intervallo `192.0.2.0/24` fino al 1° gennaio 2013 10:00 UTC:

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

Ogni cookie firmato in cui utilizzi questa policy include un URL di base che identifica un file specifico, ad esempio:

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

### Esempio di dichiarazione di policy: accesso a tutti i file associati a un ID di coppia di chiavi da un indirizzo IP
<a name="private-content-custom-policy-statement-signed-cookies-example-one-ip"></a>

L'esempio di policy personalizzata seguente ti consente di definire cookie firmati per qualsiasi file associato a qualsiasi distribuzione, come indicato dal carattere jolly \$1 nel parametro `Resource`. L'utente deve utilizzare l'indirizzo I `192.0.2.10/32`. (il valore `192.0.2.10/32` nella notazione CIDR fa riferimento a un singolo indirizzo IP, `192.0.2.10`). I file sono disponibili solo dal 1° gennaio 2013 10:00 UTC fino al 2 gennaio 2013 10:00 UTC:

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

Ogni cookie firmato in cui si utilizza questa politica include un URL di base che identifica un file specifico in una CloudFront distribuzione specifica, ad esempio:

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

Il cookie firmato include inoltre un ID di coppia di chiavi, che deve essere associato a un firmatario attendibile nella distribuzione (d111111abcdef8.cloudfront.net) specificato nell'URL di base.

## Creazione di una firma per un cookie firmato che utilizza una policy personalizzata
<a name="private-content-custom-policy-signature-cookies"></a>

La firma di un cookie firmato che utilizza una policy personalizzata è una versione con hash, firma e codifica base64 della dichiarazione di policy. 

Per ulteriori informazioni ed esempi su come sottoporre a hashing, firmare e codificare la dichiarazione di policy, consulta:
+ [Comandi Linux e OpenSSL per la crittografia e la codifica base64](private-content-linux-openssl.md)
+ [Codice di esempio per la creazione di una firma per un URL firmato](PrivateCFSignatureCodeAndExamples.md)

**Nota**  
Gli esempi collegati utilizzano SHA-1 per impostazione predefinita. Per utilizzare invece SHA-256, sostituiscilo `sha1` con `sha256` nei comandi OpenSSL e includi il cookie con il `CloudFront-Hash-Algorithm` valore di. `SHA256`<a name="private-content-custom-policy-signature-cookies-procedure"></a>

**Creazione di una firma per un cookie firmato utilizzando una policy personalizzata**

1. Utilizzate la funzione hash SHA-1 o SHA-256 e RSA per eseguire l'hash e firmare la dichiarazione di policy JSON creata durante la procedura. [Creazione di una dichiarazione di policy per un URL firmato che utilizza una policy personalizzata](private-content-creating-signed-url-custom-policy.md#private-content-custom-policy-creating-policy-procedure) Utilizza la versione della dichiarazione di policy che non include più spazi vuoti, ma che non è ancora stata codificata in base64.

   Se si utilizza SHA-256, è necessario includere il cookie con un valore di. `CloudFront-Hash-Algorithm` `SHA256`

   Per la chiave privata richiesta dalla funzione hash, utilizza una chiave privata la cui chiave pubblica si trova in un gruppo di chiavi attendibili attivo per la distribuzione.
**Nota**  
Il metodo utilizzato per sottoporre a hashing e firmare la dichiarazione di policy dipende dalla piattaforma e dal linguaggio di programmazione. Per il codice di esempio, consulta [Codice di esempio per la creazione di una firma per un URL firmato](PrivateCFSignatureCodeAndExamples.md).

1. Rimuovi gli spazi vuoti (inclusi i caratteri di nuova riga e le tabulazioni) dalla stringa con hash e firmata.

1. Codifica la stringa utilizzando la codifica base64 MIME. Per ulteriori informazioni, vedere [Sezione 6.8, Base64 Content-Transfer-Encoding in RFC 2045,](https://tools.ietf.org/html/rfc2045#section-6.8) *MIME (Multipurpose Internet Mail Extensions), parte prima: Formato dei corpi dei messaggi Internet*.

1. Sostituisci i caratteri non validi nella stringa di query dell'URL con caratteri validi. La tabella seguente elenca i caratteri validi e non validi.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html)

1. Includi il valore risultante nell'intestazione `Set-Cookie` per la coppia nome-valore `CloudFront-Signature=` e ritorna a [Impostazione di un cookie firmato che utilizza una policy personalizzata](#private-content-setting-signed-cookie-custom-policy-procedure) per aggiungere l'intestazione `Set-Cookie` per `CloudFront-Key-Pair-Id`.

# Creazione di cookie firmati utilizzando PHP
<a name="signed-cookies-PHP"></a>

Il seguente esempio di codice è simile all’esempio in [Creazione di una firma per URL utilizzando PHP](CreateURL_PHP.md) in quanto crea un collegamento a un video. Tuttavia, invece di firmare l’URL nel codice, questo esempio firma i cookie con la funzione `create_signed_cookies()`. Il player lato client utilizza i cookie per autenticare ogni richiesta alla distribuzione. CloudFront

Questo approccio è utile per lo streaming di contenuti, come HTTP Live Streaming (HLS) o Dynamic Adaptive Streaming over HTTP (DASH), in cui il client deve effettuare più richieste per recuperare il manifesto, i segmenti e gli asset di riproduzione correlati. Utilizzando i cookie firmati, il client può autenticare ogni richiesta senza dover generare un nuovo URL firmato per ogni segmento. 

**Nota**  
La creazione di una firma URL è solo una parte del processo di gestione di contenuti privati tramite cookie firmati. Per ulteriori informazioni, consulta [Utilizzo di cookie firmati](private-content-signed-cookies.md).



**Topics**
+ [Crea la firma RSA SHA-1 o SHA-256](#create-rsa-sha-1signature-cookies)
+ [Creazione di cookie firmati](#create-the-signed-cookie)
+ [Codice completo](#full-code-signed-cookies)

Nelle sezioni seguenti, l’esempio di codice viene suddiviso in singole parti. Di seguito è riportato l’[esempio di codice](#full-code-signed-cookies) completo.

## Crea la firma RSA SHA-1 o SHA-256
<a name="create-rsa-sha-1signature-cookies"></a>

In questo codice di esempio vengono eseguite le seguenti operazioni:

1. La funzione esegue l'`rsa_sha1_sign`hashing e firma l'informativa sulla politica utilizzando SHA-1. Per utilizzare invece SHA-256, utilizzate la funzione rsa\$1sha256\$1sign mostrata di seguito. Gli argomenti richiesti sono una dichiarazione di policy e la chiave privata che corrisponde a una chiave pubblica appartenente a un gruppo di chiavi attendibili per la distribuzione.

1. Successivamente, la funzione `url_safe_base64_encode` crea una versione URL-safe della firma.

   ```
   function rsa_sha1_sign($policy, $private_key_filename) {
       $signature = "";
       $fp = fopen($private_key_filename, "r");
       $priv_key = fread($fp, 8192);
       fclose($fp);
       $pkeyid = openssl_get_privatekey($priv_key);
       openssl_sign($policy, $signature, $pkeyid);
       openssl_free_key($pkeyid);
       return $signature;
   }
   
   function url_safe_base64_encode($value) {
       $encoded = base64_encode($value);
       return str_replace(
           array('+', '=', '/'),
           array('-', '_', '~'),
           $encoded);
   }
   ```

   La seguente funzione utilizza SHA-256 anziché SHA-1:

   ```
   function rsa_sha256_sign($policy, $private_key_filename) {
       $signature = "";
       $fp = fopen($private_key_filename, "r");
       $priv_key = fread($fp, 8192);
       fclose($fp);
       $pkeyid = openssl_get_privatekey($priv_key);
       openssl_sign($policy, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
       openssl_free_key($pkeyid);
       return $signature;
   }
   ```

   La `rsa_sha256_sign` funzione è la stessa di`rsa_sha1_sign`, tranne per il fatto che passa a. `OPENSSL_ALGO_SHA256` `openssl_sign` Quando usi SHA-256, includi il `CloudFront-Hash-Algorithm` cookie con un valore di. `SHA256`

## Creazione di cookie firmati
<a name="create-the-signed-cookie"></a>

Il codice seguente costruisce a crea i cookie firmati, utilizzando i seguenti attributi dei cookie:`CloudFront-Expires`, `CloudFront-Signature` e. `CloudFront-Key-Pair-Id` `CloudFront-Hash-Algorithm` Il codice utilizza una policy personalizzata.

```
function create_signed_cookies($resource, $private_key_filename, $key_pair_id, $expires, $client_ip = null, $hash_algorithm = 'SHA1') {
    $policy = array(
        'Statement' => array(
            array(
                'Resource' => $resource,
                'Condition' => array(
                    'DateLessThan' => array('AWS:EpochTime' => $expires)
                )
            )
        )
    );

    if ($client_ip) {
        $policy['Statement'][0]['Condition']['IpAddress'] = array('AWS:SourceIp' => $client_ip . '/32');
    }

    $policy = json_encode($policy);
    $encoded_policy = url_safe_base64_encode($policy);
    if ($hash_algorithm === 'SHA256') {
        $signature = rsa_sha256_sign($policy, $private_key_filename);
    } else {
        $signature = rsa_sha1_sign($policy, $private_key_filename);
    }
    $encoded_signature = url_safe_base64_encode($signature);

    $cookies = array(
        'CloudFront-Policy' => $encoded_policy,
        'CloudFront-Signature' => $encoded_signature,
        'CloudFront-Key-Pair-Id' => $key_pair_id
    );

    if ($hash_algorithm === 'SHA256') {
        $cookies['CloudFront-Hash-Algorithm'] = 'SHA256';
    }

    return $cookies;
}
```

Per ulteriori informazioni, consulta [Impostazione di cookie firmati che utilizzano una policy personalizzata](private-content-setting-signed-cookie-custom-policy.md).

## Codice completo
<a name="full-code-signed-cookies"></a>

Il codice di esempio seguente fornisce una dimostrazione completa della creazione di cookie CloudFront firmati con PHP. Puoi scaricare l’esempio completo dal file [demo-php.zip](samples/demo-php.zip).

Nell'esempio seguente, è possibile modificare l'`$policy Condition`elemento per consentire sia gli intervalli di indirizzi che gli intervalli IPv4 di IPv6 indirizzi. Per un esempio, [ IPv6 consulta Using address in IAM policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ipv6-access.html#ipv6-access-iam) nella *Amazon Simple Storage Service User Guide*.

```
<?php

function rsa_sha1_sign($policy, $private_key_filename) {
    $signature = "";
    $fp = fopen($private_key_filename, "r");
    $priv_key = fread($fp, 8192);
    fclose($fp);
    $pkeyid = openssl_get_privatekey($priv_key);
    openssl_sign($policy, $signature, $pkeyid);
    openssl_free_key($pkeyid);
    return $signature;
}

function url_safe_base64_encode($value) {
    $encoded = base64_encode($value);
    return str_replace(
        array('+', '=', '/'),
        array('-', '_', '~'),
        $encoded);
}

function rsa_sha256_sign($policy, $private_key_filename) {
    $signature = "";
    $fp = fopen($private_key_filename, "r");
    $priv_key = fread($fp, 8192);
    fclose($fp);
    $pkeyid = openssl_get_privatekey($priv_key);
    openssl_sign($policy, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
    openssl_free_key($pkeyid);
    return $signature;
}

function create_signed_cookies($resource, $private_key_filename, $key_pair_id, $expires, $client_ip = null, $hash_algorithm = 'SHA1') {
    $policy = array(
        'Statement' => array(
            array(
                'Resource' => $resource,
                'Condition' => array(
                    'DateLessThan' => array('AWS:EpochTime' => $expires)
                )
            )
        )
    );

    if ($client_ip) {
        $policy['Statement'][0]['Condition']['IpAddress'] = array('AWS:SourceIp' => $client_ip . '/32');
    }

    $policy = json_encode($policy);
    $encoded_policy = url_safe_base64_encode($policy);
    if ($hash_algorithm === 'SHA256') {
        $signature = rsa_sha256_sign($policy, $private_key_filename);
    } else {
        $signature = rsa_sha1_sign($policy, $private_key_filename);
    }
    $encoded_signature = url_safe_base64_encode($signature);

    $cookies = array(
        'CloudFront-Policy' => $encoded_policy,
        'CloudFront-Signature' => $encoded_signature,
        'CloudFront-Key-Pair-Id' => $key_pair_id
    );

    if ($hash_algorithm === 'SHA256') {
        $cookies['CloudFront-Hash-Algorithm'] = 'SHA256';
    }

    return $cookies;
}



$private_key_filename = '/home/test/secure/example-priv-key.pem';
$key_pair_id = 'K2JCJMDEHXQW5F';
$base_url = 'https://d1234.cloudfront.net';

$expires = time() + 3600; // 1 hour from now

// Get the viewer real IP from the x-forward-for header as $_SERVER['REMOTE_ADDR'] will return viewer facing IP. An alternative option is to use CloudFront-Viewer-Address header. Note that this header is a trusted CloudFront immutable header. Example format: IP:PORT ("CloudFront-Viewer-Address": "1.2.3.4:12345")
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];


// For HLS manifest and segments (using wildcard)
$hls_resource = $base_url . '/sign/*';
$signed_cookies = create_signed_cookies($hls_resource, $private_key_filename, $key_pair_id, $expires, $client_ip, 'SHA256');

// Set the cookies
$cookie_domain = parse_url($base_url, PHP_URL_HOST);
foreach ($signed_cookies as $name => $value) {
    setcookie($name, $value, $expires, '/', $cookie_domain, true, true);
}

?>

<!DOCTYPE html>
<html>
<head>
    <title>CloudFront Signed HLS Stream with Cookies</title>
</head>
<body>
    <h1>Amazon CloudFront Signed HLS Stream with Cookies</h1>
    <h2>Expires at <?php echo gmdate('Y-m-d H:i:s T', $expires); ?> only viewable by IP <?php echo $client_ip; ?></h2>
    
    <div id='hls-video'>
        <video id="video" width="640" height="360" controls></video>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
    <script>
        var video = document.getElementById('video');
        var manifestUrl = '<?php echo $base_url; ?>/sign/manifest.m3u8';
        
        if (Hls.isSupported()) {
            var hls = new Hls();
            hls.loadSource(manifestUrl);
            hls.attachMedia(video);
        }
        else if (video.canPlayType('application/vnd.apple.mpegurl')) {
            video.src = manifestUrl;
        }
    </script>
</body>
</html>
```

Invece di utilizzare cookie firmati, puoi utilizzare cookie firmati URLs. Per ulteriori informazioni, consulta [Creazione di una firma per URL utilizzando PHP](CreateURL_PHP.md).