

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à.

# Autenticazione TLS reciproca con CloudFront (Viewer mTLS)
<a name="mtls-authentication"></a>

L'autenticazione TLS reciproca (Mutual Transport Layer Security Authentication — MTLS) è un protocollo di sicurezza che estende l'autenticazione TLS standard richiedendo l'autenticazione bidirezionale basata su certificati, in cui sia il client che il server devono dimostrare la propria identità prima di stabilire una connessione sicura. Utilizzando Mutual TLS, puoi garantire che solo i client che presentano certificati TLS affidabili abbiano accesso alle tue distribuzioni. CloudFront 

## Come funziona
<a name="how-mtls-works"></a>

In un handshake TLS standard, solo il server presenta un certificato per dimostrare la propria identità al client. Con il TLS reciproco, il processo di autenticazione diventa bidirezionale. Quando un client tenta di connettersi alla tua CloudFront distribuzione, CloudFront richiede un certificato client durante l'handshake TLS. Il client deve presentare un certificato X.509 valido che sia CloudFront convalidato rispetto all'archivio di fiducia configurato prima di stabilire la connessione sicura.

CloudFront esegue la convalida del certificato presso le AWS edge location, alleggerendo la complessità dell'autenticazione dai server di origine e mantenendo CloudFront al contempo i vantaggi in termini di prestazioni globali. È possibile configurare gli MTL in due modalità: modalità di verifica (che richiede a tutti i client di presentare certificati validi) o modalità opzionale (che convalida i certificati quando vengono presentati ma consente anche connessioni senza certificati).

## Casi d’uso
<a name="mtls-use-cases"></a>

L'autenticazione TLS reciproca CloudFront risolve diversi scenari di sicurezza critici in cui i metodi di autenticazione tradizionali sono insufficienti:
+ **Autenticazione dei dispositivi con memorizzazione nella cache dei contenuti**: puoi autenticare console di gioco, dispositivi IoT o hardware aziendale prima di consentire l'accesso agli aggiornamenti del firmware, ai download di giochi o alle risorse interne. Ogni dispositivo contiene un certificato unico che ne dimostra l'autenticità sfruttando al contempo le funzionalità di memorizzazione nella cache. CloudFront
+ **API-to-API autenticazione**: è possibile proteggere le machine-to-machine comunicazioni tra partner commerciali, sistemi di pagamento o microservizi affidabili. L'autenticazione basata su certificati elimina la necessità di chiavi API o segreti condivisi, fornendo al contempo una solida verifica dell'identità per gli scambi automatici di dati.

**Topics**
+ [

## Come funziona
](#how-mtls-works)
+ [

## Casi d’uso
](#mtls-use-cases)
+ [

# Archivi di fiducia e gestione dei certificati
](trust-stores-certificate-management.md)
+ [

# Abilita il TLS reciproco per le distribuzioni CloudFront
](enable-mtls-distributions.md)
+ [

# Associare una funzione di CloudFront connessione
](connection-functions.md)
+ [

# Configurazione di impostazioni aggiuntive
](configuring-additional-settings.md)
+ [

# Visualizza le intestazioni MTLS per le politiche della cache e le inoltra all'origine
](viewer-mtls-headers.md)
+ [

# Revoca tramite CloudFront Connection Function e KVS
](revocation-connection-function-kvs.md)
+ [

# Osservabilità tramite log di connessione
](connection-logs.md)

# Archivi di fiducia e gestione dei certificati
<a name="trust-stores-certificate-management"></a>

La creazione e la configurazione di un trust store è un requisito obbligatorio per implementare l'autenticazione TLS reciproca con. CloudFront I trust store contengono i certificati Certificate Authority (CA) CloudFront utilizzati per convalidare i certificati client durante il processo di autenticazione.

## Cos'è un trust store?
<a name="what-is-trust-store"></a>

Un trust store è un archivio di certificati CA CloudFront utilizzato per convalidare i certificati client durante l'autenticazione TLS reciproca. Gli archivi di fiducia contengono i certificati CA root e intermedi che costituiscono la catena di fiducia per l'autenticazione dei certificati client.

Quando si implementa il TLS reciproco con CloudFront, il trust store definisce le autorità di certificazione attendibili per l'emissione di certificati client validi. CloudFront convalida ogni certificato client confrontandolo con il trust store durante l'handshake TLS. Solo i client che presentano certificati collegati a uno dei certificati presenti CAs nel tuo trust store verranno autenticati correttamente.

I trust store in CloudFront sono risorse a livello di account che puoi associare a più distribuzioni. Ciò consente di mantenere politiche di convalida dei certificati coerenti durante l'intera CloudFront distribuzione, semplificando al contempo la gestione dei certificati CA.

## Supporto dell'Autorità di Certificazione
<a name="ca-support"></a>

CloudFront supporta i certificati emessi da autorità di certificazione AWS private e autorità di certificazione private di terze parti. Questa flessibilità consente di utilizzare l'infrastruttura di certificazione esistente o di sfruttare i servizi di certificazione AWS gestiti in base ai requisiti organizzativi.
+ **AWS Autorità di certificazione privata:** è possibile utilizzare i certificati emessi da AWS Private CA, che fornisce un servizio gestito di autorità di certificazione privata. Questa integrazione semplifica la gestione del ciclo di vita dei certificati e offre una perfetta integrazione con altri servizi. AWS 
+ **Autorità di certificazione private di terze parti:** puoi anche utilizzare i certificati della tua infrastruttura di autorità di certificazione privata esistente, inclusi fornitori di certificati aziendali CAs o di altri fornitori di certificati di terze parti. Ciò consente di mantenere gli attuali processi di gestione dei certificati aggiungendo CloudFront al contempo le funzionalità mTLS.

## Requisiti e specifiche del certificato
<a name="certificate-requirements"></a>

I trust store hanno requisiti specifici per i certificati CA che contengono:

### Requisiti di formato dei certificati CA
<a name="ca-cert-format-requirements"></a>
+ **Formato: formato** PEM (Privacy Enhanced Mail)
+ **Limiti del contenuto: i certificati devono essere racchiusi entro i limiti** -----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----
+ **Commenti:** deve essere preceduto da un carattere \$1 e non può contenere alcun carattere -
+ **Interruzioni di riga:** non sono consentite righe vuote tra i certificati

### Specifiche dei certificati supportate
<a name="supported-cert-specs"></a>
+ **Tipo di certificato: X.509v3**
+ **Tipi di chiavi pubbliche:**
  + RSA 2048, RSA 3072, RSA 4096
  + ECDSA: secp256r1, secp384r1
+ **Algoritmi di firma:**
  + SHA256 SHA384, SHA512 con RSA
  + SHA256 SHA384, SHA512 con EC
  + SHA256 SHA384, SHA512 con RASSA-PSS con MGF1

### Esempio di formato del pacchetto di certificati
<a name="example-cert-bundle"></a>

Certificati multipli (con codifica PEM):

```
# Root CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqiMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
# Intermediate CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqjMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
```

## Crea un archivio di fiducia
<a name="create-trust-store"></a>

Prima di creare un trust store, devi caricare il tuo pacchetto di certificati CA in formato PEM in un bucket Amazon S3. Il pacchetto di certificati deve contenere tutti i certificati CA root e intermedi affidabili necessari per convalidare i certificati client.

Il pacchetto di certificati CA viene letto solo una volta da S3 durante la creazione di un trust store. Se verranno apportate modifiche future al pacchetto di certificati CA, il trust store dovrà essere aggiornato manualmente. Non viene mantenuta alcuna sincronizzazione tra il trust store e il pacchetto di certificati CA S3.

### Prerequisiti
<a name="trust-store-prerequisites"></a>
+ Un pacchetto di certificati della tua Certificate Authority (CA) caricato in un bucket Amazon S3
+ Le autorizzazioni necessarie per creare risorse CloudFront 

### Per creare un trust store (Console)
<a name="create-trust-store-console"></a>

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel pannello di navigazione, scegli **Trust stores**.

1. Scegli **Create Trust Store**.

1. Per il **nome del Trust Store**, inserisci un nome per il tuo Trust Store.

1. Per il **pacchetto Certificate Authority (CA)**, inserisci il percorso Amazon S3 del tuo pacchetto di certificati CA in formato PEM.

1. **Scegli** Create trust store.

### Per creare un trust store (AWS CLI)
<a name="create-trust-store-cli"></a>

```
aws cloudfront create-trust-store \
  --name MyTrustStore \
  --ca-certificates-bundle-source '{"CaCertificatesBundleS3Location":{"Bucket":"my-bucket","Key":"ca-bundle.pem","Region":"bucket-region"}}' \
  --tags Items=[{Key=Environment,Value=Production}]
```

## Associa trust store alle distribuzioni
<a name="associate-trust-store"></a>

Dopo aver creato un trust store, è necessario associarlo a una CloudFront distribuzione per abilitare l'autenticazione TLS reciproca.

### Prerequisiti
<a name="associate-prerequisites"></a>
+ Una CloudFront distribuzione esistente con la politica del protocollo di visualizzazione solo HTTPS abilitata e HTTP3 il supporto disabilitato.

### Per associare un trust store (Console)
<a name="associate-trust-store-console"></a>

Esistono due modi per associare un trust store all'interno della CloudFront console: tramite la pagina dei dettagli del trust store o tramite la pagina delle impostazioni di distribuzione.

**Associare un trust store tramite la pagina dei dettagli del trust store:**

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel pannello di navigazione, scegli **Trust stores**.

1. Scegli il nome del trust store che desideri associare.

1. Scegli **Associa alla distribuzione**.

1. Configura le opzioni Viewer MTLs disponibili:
   + Modalità **di convalida del certificato client: scegli tra la modalità** obbligatoria e quella opzionale. Nella modalità richiesta, tutti i client devono presentare i certificati. In modalità opzionale, i client che presentano certificati vengono convalidati, mentre ai client che non presentano certificati è consentito l'accesso.
   + **Pubblicizza i nomi delle CA del trust store:** scegli se pubblicizzare i nomi delle CA nel tuo trust store ai clienti durante l'handshake TLS.
   + **Ignora la data di scadenza del certificato:** scegli se consentire le connessioni con certificati scaduti (valgono ancora altri criteri di convalida).
   + **Funzione di connessione:** una funzione di connessione opzionale può essere associata alle allow/deny connessioni basate su altri criteri personalizzati.

1. Seleziona una o più distribuzioni da associare al trust store. Solo le distribuzioni con comportamenti di cache HTTP3 disabilitati e con comportamento di cache basato solo su HTTPS possono supportare Viewer MTL.

1. Selezionare **Associate (Associa)**.

**Associazione di un trust store tramite la pagina delle impostazioni di distribuzione:**

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Seleziona la distribuzione che desideri associare

1. Nella scheda **Generale**, all'interno del contenitore **Impostazioni**, scegli **Modifica** nell'angolo in alto a destra

1. Scorri verso il basso fino alla fine della pagina, all'interno del contenitore **Connectivity**, attiva l'opzione **Viewer MTLs**

1. Configura le opzioni Viewer MTLs disponibili:
   + Modalità **di convalida del certificato client: scegli tra la modalità** obbligatoria e quella opzionale. Nella modalità richiesta, tutti i client devono presentare i certificati. In modalità opzionale, i client che presentano certificati vengono convalidati, mentre ai client che non presentano certificati è consentito l'accesso.
   + **Pubblicizza i nomi delle CA del trust store:** scegli se pubblicizzare i nomi delle CA nel tuo trust store ai clienti durante l'handshake TLS.
   + **Ignora la data di scadenza del certificato:** scegli se consentire le connessioni con certificati scaduti (valgono ancora altri criteri di convalida).
   + **Funzione di connessione:** una funzione di connessione opzionale può essere associata alle allow/deny connessioni basate su altri criteri personalizzati.

1. Scegli **Salva modifiche** nell'angolo in basso a destra.

### Per associare un trust store (AWS CLI)
<a name="associate-trust-store-cli"></a>

I trust store possono essere associati alle distribuzioni tramite. DistributionConfig ViewerMtlsConfig proprietà. Ciò significa che dobbiamo prima recuperare la configurazione della distribuzione e poi fornirla ViewerMtlsConfig in una richiesta successiva UpdateDistribution .

```
// First fetch the distribution
aws cloudfront get-distribution {DISTRIBUTION_ID}

// Update the distribution config, for example:
Distribution config, file://distConf.json: 
{
  ...other fields,
  ViewerMtlsConfig: {
    Mode: 'required',
    TrustStoreConfig: {
        AdvertiseTrustStoreCaNames: false,
        IgnoreCertificateExpiry: true,
        TrustStoreId: {TRUST_STORE_ID}
    }
  }
}

aws cloudfront update-distribution \
   --id {DISTRIBUTION_ID} \
   --if-match {ETAG} \
   --distribution-config file://distConf.json
```

## Gestisci gli archivi di fiducia
<a name="manage-trust-stores"></a>

### Visualizza i dettagli del Trust Store
<a name="view-trust-store-details"></a>

1. Accedi Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel pannello di navigazione, scegli **Trust stores**.

1. Scegli il nome del trust store per visualizzarne la pagina dei dettagli.

La pagina dei dettagli mostra:
+ Nome e ID del Trust Store
+ Numero di certificati CA
+ Data di creazione e data dell'ultima modifica
+ Distribuzioni associate
+ Tag

### Modificare un trust store
<a name="modify-trust-store"></a>

Per sostituire il pacchetto di certificati CA:

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel pannello di navigazione, scegli **Trust stores**.

1. Scegli il nome del trust store.

1. Scegli **Azioni**, quindi **Modifica**.

1. Per il **pacchetto Certificate Authority (CA)**, inserisci la posizione Amazon S3 del file PEM del pacchetto CA aggiornato.

1. **Scegli Update trust store.**

### Elimina un trust store
<a name="delete-trust-store"></a>

**Prerequisiti:** è innanzitutto necessario dissociare il trust store da tutte le CloudFront distribuzioni.

1. Accedi a Console di gestione AWS e apri la console all' CloudFront indirizzo. [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)

1. Nel pannello di navigazione, scegli **Trust stores**.

1. Scegli il nome del trust store.

1. Scegli **Elimina trust store**.

1. Seleziona **Elimina** per confermare.

### Fasi successive
<a name="trust-store-next-steps"></a>

Dopo aver creato e associato il tuo trust store a una CloudFront distribuzione, puoi procedere ad abilitare l'autenticazione TLS reciproca sulla tua distribuzione e configurare impostazioni aggiuntive come l'inoltro delle intestazioni dei certificati alle tue origini. Per istruzioni dettagliate sull'abilitazione degli MTL sulle distribuzioni, consulta. [Abilita il TLS reciproco per le distribuzioni CloudFront](enable-mtls-distributions.md)

# Abilita il TLS reciproco per le distribuzioni CloudFront
<a name="enable-mtls-distributions"></a>

## Prerequisiti e requisiti
<a name="mtls-prerequisites-requirements"></a>

CloudFrontla modalità di verifica TLS reciproca richiede che tutti i client presentino certificati validi durante l'handshake TLS e rifiuta le connessioni senza certificati validi. Prima di abilitare il TLS reciproco su una CloudFront distribuzione, assicurati di avere:
+ Hai creato un trust store con i tuoi certificati di Certificate Authority
+ Hai associato il trust store alla tua CloudFront distribuzione
+ È stato garantito che tutti i comportamenti della cache di distribuzione utilizzino una politica del protocollo di visualizzazione solo HTTPS
+ Assicurati che la tua distribuzione utilizzi HTTP/2 (l'impostazione predefinita, Viewer MTLs non è supportata su HTTP/3)

**Nota**  
L'autenticazione TLS reciproca richiede connessioni HTTPS tra i visualizzatori e. CloudFront Non è possibile abilitare MTL su una distribuzione con comportamenti di cache che supportano le connessioni HTTP.

## Abilita il TLS reciproco (Console)
<a name="enable-mtls-console"></a>

### Per nuove distribuzioni
<a name="enable-mtls-new-distributions"></a>

I Viewer MTL non possono essere configurati durante il processo di creazione di una nuova distribuzione nella CloudFront console. Innanzitutto crea la distribuzione con qualsiasi mezzo (console, CLI, API), quindi modifica le impostazioni di distribuzione per abilitare Viewer MTL secondo le istruzioni di distribuzione esistenti riportate di seguito.

### Per le distribuzioni esistenti
<a name="enable-mtls-existing-distributions"></a>

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dalla lista di distribuzione, seleziona la distribuzione che desideri modificare.

1. Assicurati che la politica del protocollo Viewer sia impostata su **Reindirizza HTTP su HTTPS** o **Solo HTTPS** per tutti i comportamenti della cache. (Puoi scegliere la scheda **Comportamenti della cache** per visualizzare e aggiornare qualsiasi comportamento della cache con le politiche del protocollo HTTP).

1. Scegli la scheda **Generale**.

1. Nella sezione **Settings** (Impostazioni), scegli **Edit** (Modifica).

1. Nella sezione **Connettività**, trova **Viewer Mutual Authentication (MTLs).**

1. Attiva **Abilita l'autenticazione reciproca**.

1. Per la **modalità di convalida del certificato client**, seleziona **Obbligatorio** (tutti i client devono presentare certificati) o **Facoltativo (i client possono facoltativamente** presentare certificati).

1. Per **Trust store**, seleziona il trust store creato in precedenza.

1. (Facoltativo) Seleziona **Pubblicizza i nomi CA del trust store se desideri CloudFront inviare i nomi** CA ai client durante l'handshake TLS.

1. (Facoltativo) Attiva **Ignora la data di scadenza del certificato** se desideri consentire le connessioni con certificati scaduti.

1. Scegli **Save changes** (Salva modifiche).

## Abilita TLS reciproco (AWS CLI)
<a name="enable-mtls-cli"></a>

### Per nuove distribuzioni
<a name="enable-mtls-cli-new"></a>

L'esempio seguente mostra come creare un file di configurazione della distribuzione (distribution-config.json) che includa le impostazioni MTLS:

```
{
  "CallerReference": "cli-example-1",
  "Origins": {
    "Quantity": 1,
    "Items": [
      {
        "Id": "my-origin",
        "DomainName": "example.com",
        "CustomOriginConfig": {
          "HTTPPort": 80,
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only"
        }
      }
    ]
  },
  "DefaultCacheBehavior": {
    "TargetOriginId": "my-origin",
    "ViewerProtocolPolicy": "https-only",
    "MinTTL": 0,
    "ForwardedValues": {
      "QueryString": false,
      "Cookies": {
        "Forward": "none"
      }
    }
  },
  "ViewerCertificate": {
    "CloudFrontDefaultCertificate": true
  },
  "ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
  },
  "Enabled": true
}
```

Crea la distribuzione con MTL abilitati utilizzando il seguente comando di esempio:

```
aws cloudfront create-distribution --distribution-config file://distribution-config.json
```

### Per le distribuzioni esistenti
<a name="enable-mtls-cli-existing"></a>

Ottieni la configurazione corrente della distribuzione utilizzando il seguente comando di esempio:

```
aws cloudfront get-distribution-config --id E1A2B3C4D5E6F7 --output json > dist-config.json
```

Modifica il file per aggiungere le impostazioni mTLS. Aggiungete la seguente sezione di esempio alla configurazione della distribuzione:

```
"ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
}
```

Rimuovi il ETag campo dal file ma salva il suo valore separatamente.

Aggiorna la distribuzione con la nuova configurazione usando il seguente comando di esempio:

```
aws cloudfront update-distribution \
    --id E1A2B3C4D5E6F7 \
    --if-match YOUR-ETAG-VALUE \
    --distribution-config file://dist-config.json
```

## Politiche del protocollo Viewer
<a name="viewer-protocol-policies"></a>

Quando si utilizza il protocollo TLS reciproco, tutti i comportamenti della cache di distribuzione devono essere configurati con una politica del protocollo di visualizzazione basata esclusivamente su HTTPS:
+ **Reindirizza da HTTP a HTTPS**: reindirizza le richieste HTTP a HTTPS prima di eseguire la convalida del certificato.
+ **Solo HTTPS: accetta solo** richieste HTTPS ed esegue la convalida dei certificati.

**Nota**  
La politica del protocollo di visualizzazione HTTP e HTTPS non è supportata con TLS reciproco poiché le connessioni HTTP non possono eseguire la convalida dei certificati.

## Fasi successive
<a name="enable-mtls-next-steps"></a>

Dopo aver abilitato Viewer TLS sulla tua CloudFront distribuzione, puoi associare le funzioni di connessione per implementare una logica di convalida dei certificati personalizzata. Le funzioni di connessione consentono di estendere le funzionalità di autenticazione MTLS integrate con regole di convalida personalizzate, controllo della revoca dei certificati e registrazione. Per i dettagli sulla creazione e l'associazione delle funzioni di connessione, vedere. [Associare una funzione di CloudFront connessione](connection-functions.md)

# Associare una funzione di CloudFront connessione
<a name="connection-functions"></a>

CloudFront Le funzioni di connessione consentono di implementare una logica di convalida dei certificati personalizzata durante gli handshake TLS, fornendo estensioni alle funzionalità di autenticazione MTLS integrate.

## Cosa sono le funzioni di connessione?
<a name="what-are-connection-functions"></a>

Le funzioni di connessione sono JavaScript funzioni che vengono eseguite durante l'handshake TLS dopo la convalida dei certificati client. Il certificato client convalidato viene passato alla funzione di connessione, a quel punto la funzione di connessione può determinare ulteriormente se concedere o meno l'accesso. Per informazioni dettagliate sulle funzioni di connessione, vedere[Personalizza a 360° con CloudFront Functions](cloudfront-functions.md).

## Come funzionano le funzioni di connessione con le MTL
<a name="how-connection-functions-work"></a>

Quando un client tenta di stabilire una connessione mTLS alla CloudFront distribuzione, si verifica la seguente sequenza:

1. Il client avvia l'handshake TLS con edge location. CloudFront 

1. CloudFront richiede e riceve il certificato del cliente.

1. CloudFront esegue la convalida standard dei certificati rispetto al trust store.

1. Se il certificato supera la convalida standard, CloudFront richiama la funzione di connessione. Se **IgnoreCertificateExpiry**è abilitato all'interno del tuo **ViewerMtlsConfig**, anche i certificati scaduti, ma per il resto validi, vengono passati alla Funzione di connessione. Se i certificati client non sono validi, le funzioni di connessione non verranno richiamate.

1. La tua funzione di connessione riceve informazioni sui certificati e dettagli di connessione analizzati.

1. La tua funzione prende una allow/deny decisione in base a una logica personalizzata.

1. CloudFront completa o termina la connessione TLS in base alla tua decisione.

Le funzioni di connessione vengono richiamate sia per la modalità di verifica che per la modalità opzionale (quando i client presentano certificati).

## Crea una funzione di connessione
<a name="create-connection-function"></a>

È possibile creare funzioni di connessione utilizzando la CloudFront console o la AWS CLI.

### Per creare una funzione di connessione (console)
<a name="create-connection-function-console"></a>

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel riquadro di navigazione, seleziona **Funzioni**.

1. Scegli la scheda **Funzioni di connessione** e scegli **Crea funzione di connessione**.

1. Inserisci un nome di funzione univoco all'interno del tuo AWS account.

1. Scegli **Continua**.

1. Nell'editor delle funzioni, scrivi il JavaScript codice per la convalida del certificato. Il gestore della funzione deve chiamare allow o deny.

1. Facoltativo: è possibile associare un KeyValue archivio alla funzione di connessione per implementare il controllo delle revoce.

1. Scegli **Save changes** (Salva modifiche).

### Per creare una funzione di connessione (AWS CLI)
<a name="create-connection-function-cli"></a>

L'esempio seguente mostra come creare una funzione di connessione:

Scrivi il codice della funzione in un file separato, ad esempio code.js:

```
function connectionHandler(connection) {
  connection.allow();
}
```

```
aws cloudfront create-connection-function \
  --name "certificate-validator" \
  --connection-function-config '{
      "Comment": "Client certificate validation function",
      "Runtime": "cloudfront-js-2.0"
  }' \
  --connection-function-code fileb://code.js
```

## Struttura del codice della funzione di connessione
<a name="connection-function-code-structure"></a>

Le funzioni di connessione implementano la funzione ConnectionHandler che riceve un oggetto di connessione contenente il certificato e le informazioni di connessione. La funzione deve utilizzare una delle due `connection.allow()` opzioni o `connection.deny()` per prendere una decisione sulla connessione.

### Esempio di funzione di connessione di base
<a name="basic-connection-function-example"></a>

L'esempio seguente mostra una semplice funzione di connessione che verifica il campo dell'oggetto dei certificati client:

```
function connectionHandler(connection) {
    // Only process if a certificate was presented
    if (!connection.clientCertificate) {
        console.log("No certificate presented");
        connection.deny();
    }
    
    // Check the subject field for specific organization
    const subject = connection.clientCertificate.certificates.leaf.subject;
    if (!subject.includes("O=ExampleCorp")) {
        console.log("Certificate not from authorized organization");
       connection.deny();
    } else {
        // All checks passed
        console.log("Certificate validation passed");
        connection.allow();
    }
}
```

La specifica completa delle proprietà dei certificati client disponibili sull'oggetto di connessione è disponibile qui:

```
{
  "connectionId": "Fdb-Eb7L9gVn2cFakz7wWyBJIDAD4-oNO6g8r3vXDV132BtnIVtqDA==", // Unique identifier for this TLS connection
  "clientIp": "203.0.113.42", // IP address of the connecting client (IPv4 or IPv6)
  "clientCertificate": {
    "certificates": {
      "leaf": {
        "subject": "CN=client.example.com,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate holder
        "issuer": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate authority that issued this certificate
        "serialNumber": "4a:3f:5c:92:d1:e8:7b:6c", // Unique serial number assigned by the issuing CA (hexadecimal)
        "validity": {
          "notBefore": "2024-01-15T00:00:00Z", // Certificate validity start date (ISO 8601 format)
          "notAfter": "2025-01-14T23:59:59Z"   // Certificate expiration date (ISO 8601 format)
        },
        "sha256Fingerprint": "a1b2c3d4e5f6...abc123def456", // SHA-256 hash of the certificate (64 hex characters)
      },
    },
  },
}
```

## Associa una funzione di connessione
<a name="associate-connection-function-section"></a>

Dopo aver creato la funzione di connessione, è necessario pubblicarla nella fase LIVE e associarla alla distribuzione.

### Per pubblicare e associare una funzione di connessione (console)
<a name="publish-associate-console"></a>

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel riquadro di navigazione, scegli **Funzioni**

1. Scegli la scheda **Funzioni di connessione** e seleziona la tua funzione di connessione.

1. Scegli **Pubblica** per spostarlo nella fase LIVE.

1. Scegli **Aggiungi associazione** nella tabella delle distribuzioni associate sotto la sezione di pubblicazione.

1. Seleziona la distribuzione con Viewer MTLs abilitato che desideri associare.

In alternativa, è possibile associare le funzioni di connessione pubblicate anche dalla pagina dei dettagli della distribuzione.

1. Vai alla home page della console dove sono elencate tutte le tue distribuzioni.

1. Seleziona la distribuzione che desideri associare.

1. Scegli la scheda **Generale**.

1. Nella sezione **Settings** (Impostazioni), scegli **Edit** (Modifica).

1. Nella sezione **Connettività**, trova **Viewer Mutual Authentication (MTLs).**

1. Per **Funzione di connessione**, seleziona la tua funzione.

1. Scegli **Save changes** (Salva modifiche).

### Per associare una funzione di connessione (AWS CLI)
<a name="associate-connection-function-cli"></a>

L'esempio seguente mostra come associare una funzione di connessione a una distribuzione:

```
// DistributionConfig:
{
   ...other settings,
    "ConnectionFunctionAssociation": {
        "Id": "cf_30c2CV2elHwCoInb3LtcaUJkZeD"
    }
}
```

## Casi d'uso per le funzioni di connessione
<a name="connection-function-use-cases"></a>

Le funzioni di connessione consentono diversi casi d'uso avanzati di MTL:
+ **Convalida degli attributi del certificato**: verifica campi specifici nei certificati client, come i requisiti delle unità organizzative o i modelli di denominazione alternativi dei soggetti.
+ **Controllo della revoca dei certificati**: implementa il controllo personalizzato della revoca dei certificati utilizzando KeyValueStore per archiviare i numeri di serie dei certificati revocati.
+ **Politiche di certificazione basate su IP: applica politiche di** certificazione diverse in base agli indirizzi IP dei client o alle restrizioni geografiche.
+ Convalida **multi-tenant: implementa regole di convalida** specifiche del tenant in cui si applicano requisiti di certificato diversi in base ai nomi host o agli attributi del certificato.

**Nota**  
Le funzioni di connessione vengono eseguite una volta per connessione client durante l'handshake TLS.  
Le funzioni di connessione possono solo consentire o negare le connessioni, non modificare le richieste/risposte HTTP.  
Solo le funzioni LIVE stage (pubblicate) possono essere associate alle distribuzioni.  
Ogni distribuzione può avere al massimo una funzione di connessione.

## Fasi successive
<a name="connection-function-next-steps"></a>

Dopo aver associato una funzione di connessione alla CloudFront distribuzione, è possibile configurare impostazioni opzionali per personalizzare il comportamento dell'implementazione di MTLS. Per istruzioni dettagliate sulla configurazione di impostazioni aggiuntive come una modalità opzionale di convalida del certificato client, consulta. [Configurazione di impostazioni aggiuntive](configuring-additional-settings.md)

# Configurazione di impostazioni aggiuntive
<a name="configuring-additional-settings"></a>

Dopo aver abilitato l'autenticazione TLS reciproca di base, è possibile configurare impostazioni aggiuntive per personalizzare il comportamento di autenticazione per casi d'uso e requisiti specifici.

## Convalida del certificato client (modalità opzionale)
<a name="optional-mode"></a>

CloudFront offre una modalità alternativa di convalida dei certificati client opzionale che convalida i certificati client presentati ma consente l'accesso ai client che non presentano certificati.

### Comportamento in modalità opzionale
<a name="optional-mode-behavior"></a>
+ Concede la connessione ai client con certificati validi (i certificati non validi vengono negati).
+ Consente la connessione a client senza certificati
+ Consente scenari di autenticazione client misti tramite un'unica distribuzione.

La modalità opzionale è ideale per la migrazione graduale all'autenticazione MTLS, per supportare client con certificati e client senza certificati o per mantenere la retrocompatibilità con i client legacy.

**Nota**  
In modalità opzionale, le funzioni di connessione vengono ancora richiamate anche quando i client non presentano certificati. Ciò consente di implementare una logica personalizzata come la registrazione degli indirizzi IP dei client o l'applicazione di politiche diverse in base alla presentazione dei certificati.

### Per configurare la modalità opzionale (console)
<a name="configure-optional-mode-console"></a>

1. Nelle impostazioni di distribuzione, vai alla scheda **Generale**, scegli **Modifica**.

1. Scorri fino alla sezione **Viewer Mutual Authentication (mTLS)** all'interno del contenitore **Connectivity**.

1. **Per la **modalità di convalida del certificato Client**, seleziona Opzionale.**

1. Salva le modifiche.

### Per configurare la modalità opzionale (AWS CLI)
<a name="configure-optional-mode-cli"></a>

L'esempio seguente mostra come configurare la modalità opzionale:

```
"ViewerMtlsConfig": {
   "Mode": "optional",
   ...other settings
}
```

## Pubblicità dell'Autorità di Certificazione
<a name="ca-advertisement"></a>

Il AdvertiseTrustStoreCaNames campo controlla se CloudFront inviare l'elenco di nomi CA affidabili ai client durante l'handshake TLS, aiutandoli a selezionare il certificato appropriato.

### Per configurare CA advertising (Console)
<a name="configure-ca-advertisement-console"></a>

1. Nelle impostazioni di distribuzione, vai alla scheda **Generale**, scegli **Modifica**.

1. Scorri fino alla sezione **Viewer Mutual Authentication (mTLS)** all'interno del contenitore **Connectivity**.

1. Seleziona o deseleziona la casella di controllo **Advertise trust store CA names**.

1. Scegli **Save changes** (Salva modifiche).

### Per configurare la pubblicità CA (AWS CLI)
<a name="configure-ca-advertisement-cli"></a>

L'esempio seguente mostra come abilitare la pubblicità CA:

```
"ViewerMtlsConfig": {
   "Mode": "required", // or "optional"
   "TrustStoreConfig": {
      "AdvertiseTrustStoreCaNames": true,
      ...other settings
   } 
}
```

## Gestione della scadenza dei certificati
<a name="certificate-expiration-handling"></a>

La IgnoreCertificateExpiry proprietà determina la modalità di CloudFront risposta ai certificati client scaduti. Per impostazione predefinita, CloudFront rifiuta i certificati client scaduti, ma è possibile configurarlo per accettarli quando necessario. In genere è abilitato per i dispositivi con certificati scaduti che non possono essere aggiornati prontamente.

### Per configurare la gestione della scadenza dei certificati (Console)
<a name="configure-expiration-console"></a>

1. Nelle impostazioni di distribuzione, vai alla scheda **Generale**, scegli **Modifica**.

1. Scorri fino alla sezione **Viewer Mutual Authentication (mTLS)** del contenitore **Connectivity**.

1. Seleziona o deseleziona la casella di controllo **Ignora la data di scadenza del certificato**.

1. Scegli **Save changes** (Salva modifiche).

### Per configurare la gestione della scadenza dei certificati (AWS CLI)
<a name="configure-expiration-cli"></a>

L'esempio seguente mostra come ignorare la scadenza dei certificati:

```
"ViewerMtlsConfig": {
  "Mode": "required", // or "optional"
  "TrustStoreConfig": {
     "IgnoreCertificateExpiry": false,
     ...other settings
  }
}
```

**Nota**  
**IgnoreCertificateExpiry**si applica solo alle date di validità dei certificati. Tutti gli altri controlli di convalida dei certificati sono ancora validi (catena di fiducia, convalida della firma).

## Fasi successive
<a name="additional-settings-next-steps"></a>

Dopo aver configurato impostazioni aggiuntive, è possibile configurare l'inoltro delle intestazioni per trasmettere le informazioni del certificato alle origini, implementare la revoca dei certificati utilizzando Connection Functions e KeyValueStore abilitare i log di connessione per il monitoraggio. [Per i dettagli sull'inoltro delle informazioni sui certificati alle origini, consulta Forward Headers to origin.](viewer-mtls-headers.md)

# Visualizza le intestazioni MTLS per le politiche della cache e le inoltra all'origine
<a name="viewer-mtls-headers"></a>

Quando si utilizza l'autenticazione TLS reciproca, CloudFront è possibile estrarre informazioni dai certificati client e inoltrarle alle origini come intestazioni HTTP. Ciò consente ai server di origine di accedere ai dettagli dei certificati senza implementare la logica di convalida dei certificati.

Le seguenti intestazioni sono disponibili per la creazione di comportamenti di cache:


| Nome intestazione | Description | Valore di esempio | 
| --- | --- | --- | 
| CloudFront-Viewer-Cert-Serial-Number | Rappresentazione esadecimale del numero di serie del certificato | 4a:3f:5c:92:d1:e 8:7b:6c | 
| CloudFront-Viewer-Cert-Emittente | RFC2253 rappresentazione in formato stringa del nome distinto (DN) dell'emittente | CN=rootcamtls.com, OU=RootCA, o=MTLS, L=Seattle, ST=Washington, C=USA | 
| CloudFront-Viewer-Cert-Subject | RFC2253 rappresentazione in formato stringa del nome distinto (DN) del soggetto | CN=client\$1.com, OU=Client-3, o=MTLS, ST=Washington, C=US | 
| CloudFront-Viewer-Cert-Present | 1 (presente) o 0 (non presente) indica se il certificato è presente. Questo valore è sempre 1 in modalità Obbligatoria. | 1 | 
| CloudFront-Viewer-Cert-Sha256 | L'hash del certificato client SHA256  | 01fbf94fef5569753420c349f49adbfd80af5275377816e3ab1fb371b29cb586 | 

Per le richieste di origine, vengono fornite due intestazioni aggiuntive, oltre alle intestazioni sopra rese disponibili per i comportamenti della cache. A causa della potenziale dimensione dell'intestazione, l' CloudFront-Viewer-Cert-Pemintestazione non è esposta alle funzioni edge (Lambda @Edge o CloudFront Functions) e viene inoltrata solo all'origine.


| Nome intestazione | Description | Valore di esempio | 
| --- | --- | --- | 
| CloudFront-Viewer-Cert-Validity | ISO8601 formato della data NotBefore e NotAfter | CloudFront-Viewer-Cert-Validity: =2023-09-21T 01:50:17 Z; =2024-09-20T 01:50:17 Z NotBefore NotAfter | 
| CloudFront-Viewer-Cert-Pem | Formato PEM con codifica URL del certificato leaf | CloudFront-Viewer-Cert-Pem: -----BEGIN%20CERTIFICATE-----%0AMIIG<... ridotto... -Viewer-Cert-Pem: -----INIZIO%20CERTIFICATO-----%0AMIIG %0A-----FINE NmrUlw CERTIFICATO-----%0A | 

## Configura l'inoltro degli header
<a name="configure-header-forwarding"></a>

### Console
<a name="configure-headers-console"></a>

In modalità di verifica, aggiunge CloudFront automaticamente le intestazioni CloudFront-Viewer-Cert -\$1 a tutte le richieste dei visualizzatori. Per inoltrare queste intestazioni alla tua origine:

1. **Dalla pagina principale delle distribuzioni dell'elenco, seleziona la tua distribuzione con i viewer MTL abilitati e vai alla scheda Comportamenti**

1. **Seleziona il comportamento della cache e scegli Modifica**

1. Nella sezione **Politica di richiesta Origin**, scegli **Crea policy** o seleziona una policy esistente

1. Assicurati che le seguenti intestazioni siano incluse nella politica di richiesta di origine:
   + CloudFront-Viewer-Cert-Serial-Number
   + CloudFront-Viewer-Cert-Issuer
   + CloudFront-Viewer-Cert-Subject
   + CloudFront-Viewer-Cert-Present
   + Cloudfront-Viewer-Cert-Sha256
   + CloudFront-Viewer-Cert-Validity
   + CloudFront-Visualizzatore-Cert-Pem

1. Scegli **Crea** (per nuove politiche) o **Salva** modifiche (per le politiche esistenti)

1. Seleziona la politica all'interno del comportamento della cache e salva le modifiche

### Utilizzo della AWS CLI
<a name="configure-headers-cli"></a>

L'esempio seguente mostra come creare una policy di richiesta di origine che includa le intestazioni MTL per la modalità di verifica:

```
aws cloudfront create-origin-request-policy \
  --origin-request-policy-config '{
    "Name": "MTLSHeadersPolicy",
    "HeadersConfig": {
      "HeaderBehavior": "whitelist",
      "Headers": {
        "Quantity": 5,
        "Items": [
          "CloudFront-Viewer-Cert-Serial-Number",
          "CloudFront-Viewer-Cert-Issuer",
          "CloudFront-Viewer-Cert-Subject",
          "CloudFront-Viewer-Cert-Validity",
          "CloudFront-Viewer-Cert-Pem"
        ]
      }
    },
    "CookiesConfig": {
      "CookieBehavior": "none"
    },
    "QueryStringsConfig": {
      "QueryStringBehavior": "none"
    }
  }'
```

## Considerazioni sull'elaborazione delle intestazioni
<a name="header-processing-considerations"></a>

Quando lavori con le intestazioni dei certificati, prendi in considerazione queste best practice:
+ **Convalida dell'intestazione:** verifica i valori dell'intestazione del certificato all'origine come misura di sicurezza aggiuntiva
+ **Limiti di dimensione delle intestazioni:** le intestazioni dei certificati PEM possono essere grandi, assicuratevi che il server di origine sia in grado di gestirle
+ **Considerazioni sulla cache: l'utilizzo delle intestazioni** dei certificati nella chiave della cache aumenta la frammentazione della cache
+ **Richieste provenienti da più origini:** se l'applicazione utilizza CORS, potrebbe essere necessario configurarla per consentire le intestazioni dei certificati

## Fasi successive
<a name="headers-next-steps"></a>

Dopo aver configurato l'inoltro delle intestazioni, è possibile implementare il controllo della revoca dei certificati utilizzando Connection Functions e. CloudFront KeyValueStore Per i dettagli sull'implementazione dei controlli di revoca, vedere. [Revoca tramite CloudFront Connection Function e KVS](revocation-connection-function-kvs.md)

# Revoca tramite CloudFront Connection Function e KVS
<a name="revocation-connection-function-kvs"></a>

È possibile implementare il controllo della revoca dei certificati per l'autenticazione TLS reciproca combinando CloudFront Connection Functions con. KeyValueStore Questo approccio fornisce un meccanismo di revoca dei certificati scalabile e in tempo reale che integra CloudFront la convalida dei certificati integrata.

Le funzioni di connessione sono JavaScript funzioni che vengono eseguite durante la creazione della connessione TLS nelle sedi CloudFront periferiche e consentono di implementare una logica di convalida dei certificati personalizzata per l'autenticazione MTLS. Per informazioni dettagliate sulle funzioni di connessione, vedere. [Associare una funzione di CloudFront connessione](connection-functions.md)

## Come funziona la revoca dei certificati con Connection Functions
<a name="how-revocation-works"></a>

CloudFrontla convalida standard dei certificati verifica la catena, la firma e la scadenza del certificato, ma non include il controllo integrato della revoca del certificato. Utilizzando Connection Functions, è possibile implementare un controllo di revoca personalizzato durante l'handshake TLS.

Il processo di revoca del certificato funziona come segue:

1. Memorizza i numeri di serie dei certificati revocati in un. CloudFront KeyValueStore

1. Quando un client presenta un certificato, viene richiamata la funzione di connessione.

1. La funzione confronta il numero di serie del certificato con il KeyValueStore.

1. Se il numero di serie viene trovato nell'archivio, il certificato viene revocato.

1. La tua funzione nega la connessione per i certificati revocati.

Questo approccio fornisce il controllo near-real-time delle revoche attraverso la rete CloudFront perimetrale globale.

## Configurazione KeyValueStore per i certificati revocati
<a name="setup-kvs-revoked-certs"></a>

Innanzitutto, crea un file KeyValueStore per memorizzare i numeri di serie dei certificati revocati:

### Per creare una KeyValueStore (Console)
<a name="create-kvs-console"></a>

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel riquadro di navigazione, scegli **Key value stores**.

1. Scegli **Crea archivio di valori chiave**.

1. Inserisci un nome per il tuo archivio di valori chiave (ad esempio, certificati revocati).

1. (Facoltativo) Aggiungi una descrizione.

1. Scegli **Crea archivio di valori chiave**.

### Per creare una KeyValueStore (AWS CLI)
<a name="create-kvs-cli"></a>

L'esempio seguente mostra come creare un KeyValueStore:

```
aws cloudfront create-key-value-store \
  --name "revoked-certificates" \
  --comment "Store for revoked certificate serial numbers"
```

## Importa i numeri di serie dei certificati revocati
<a name="import-revoked-serials"></a>

Dopo aver creato un KeyValueStore, devi importare i numeri di serie dei certificati revocati:

### Preparare i dati di revoca
<a name="prepare-revocation-data"></a>

Crea un file JSON con i numeri di serie del certificato revocato:

```
{
  "data": [
    {
      "key": "ABC123DEF456",
      "value": ""
    },
    {
      "key": "789XYZ012GHI",
      "value": ""
    }
  ]
}
```

### Importazione da S3
<a name="import-from-s3"></a>

1. Carica il file JSON in un bucket S3

1. Importa il file su: KeyValueStore

   ```
   aws cloudfront create-key-value-store \
     --name "revoked-certificates" \
     --import-source '{
       "SourceType": "S3",
       "SourceARN": "arn:aws:s3:::amzn-s3-demo-bucket1/revoked-serials.json"
     }'
   ```

## Crea una funzione di connessione per il controllo delle revoce
<a name="create-revocation-connection-function"></a>

Crea una funzione di connessione che confronti i numeri di serie dei certificati con i tuoi KeyValueStore:

### Esempio di codice della funzione di connessione
<a name="revocation-function-example"></a>

L'esempio seguente mostra una funzione di connessione che esegue il controllo della revoca dei certificati:

```
import cf from 'cloudfront';

async function connectionHandler(connection) {
    const kvsHandle = cf.kvs();
    
    // Get client certificate serial number
    const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber;
    
    // Check if the serial number exists in the KeyValueStore
    const isRevoked = await kvsHandle.exists(clientSerialNumber.replaceAll(':', ''));
    
    if (isRevoked) {
        console.log(`Certificate ${clientSerialNumber} is revoked. Denying connection.`);
        connection.logCustomData(`REVOKED:${clientSerialNumber}`);
        connection.deny();
    } else {
        console.log(`Certificate ${clientSerialNumber} is valid. Allowing connection.`);
        connection.allow();
    }
    
}
```

### Per creare la funzione di connessione (AWS CLI)
<a name="create-revocation-function-cli"></a>

L'esempio seguente mostra come creare una funzione di connessione con KeyValueStore associazione:

```
aws cloudfront create-connection-function \
  --name "revocation-checker" \
  --connection-function-config '{
      "Comment": "Certificate revocation checking function",
      "Runtime": "cloudfront-js-2.0",
      "KeyValueStoreAssociations": {
          "Quantity": 1,
          "Items": [
              {
                  "KeyValueStoreARN": "arn:aws:cloudfront::123456789012:key-value-store/revoked-certificates"
              }
          ]
      }
  }' \
  --connection-function-code fileb://revocation-checker.js
```

## Associate la funzione alla vostra distribuzione
<a name="associate-revocation-function"></a>

Dopo aver creato e pubblicato la tua Connection Function, associala alla tua CloudFront distribuzione abilitata per MTLS come descritto nella sezione. [Associare una funzione di CloudFront connessione](connection-functions.md)

# Osservabilità tramite log di connessione
<a name="connection-logs"></a>

CloudFront i registri di connessione forniscono una visibilità dettagliata degli eventi di autenticazione TLS reciproca, consentendo di monitorare la convalida dei certificati, tenere traccia dei tentativi di connessione e risolvere i problemi di autenticazione.

## Cosa sono i log di connessione?
<a name="what-are-connection-logs"></a>

I log di connessione raccolgono informazioni dettagliate sugli handshake TLS e sulla convalida dei certificati per le distribuzioni reciproche abilitate per TLS. A differenza dei log di accesso standard che registrano le informazioni sulle richieste HTTP, i log di connessione si concentrano specificamente sulla fase di creazione della connessione TLS, tra cui:
+ Stato della connessione (successo/errore)
+ Dettagli del certificato del cliente
+ Informazioni sul protocollo TLS e sulla cifratura
+ Metriche sulla tempistica della connessione
+ Dati personalizzati da Connection Functions

Questi registri offrono una visibilità completa sugli eventi di autenticazione basati su certificati, aiutandovi a monitorare la sicurezza, risolvere i problemi e soddisfare i requisiti di conformità.

## Abilita i registri di connessione
<a name="enable-connection-logs"></a>

I log di connessione sono disponibili solo per le distribuzioni con l'autenticazione TLS reciproca abilitata. Puoi inviare i log di connessione a più destinazioni, tra cui CloudWatch Logs, Amazon Data Firehose e Amazon S3.

### Prerequisiti
<a name="connection-logs-prerequisites"></a>

Prima di abilitare i log di connessione:
+ Configura il TLS reciproco per la tua distribuzione CloudFront 
+ Abilita i log di connessione per la tua distribuzione CloudFront 
+ Assicurati di disporre delle autorizzazioni necessarie per la destinazione di registrazione scelta
+ Per la distribuzione tra più account, configura le politiche IAM appropriate

### Per abilitare i registri di connessione (Console)
<a name="enable-connection-logs-console"></a>

1. Accedi a Console di gestione AWS e apri la CloudFront console all'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Dalla lista di distribuzione, seleziona la tua distribuzione abilitata per MTLS.

1. Scegli la scheda **Logging** (Utilizzo log).

1. Scegliere **Aggiungi**.

1. Seleziona il servizio per ricevere i log:
   + **CloudWatch Log**
   + **Firehose**
   + **Amazon S3**

1. Per **Destinazione**, seleziona la risorsa per il servizio scelto:
   + Per CloudWatch Log, inserisci il nome del **gruppo di log**
   + **Per Firehose, selezionare lo stream di distribuzione Firehose**
   + Per Amazon S3, inserisci il **nome del bucket** (facoltativamente con un prefisso)

1. (Facoltativo) Configura le impostazioni aggiuntive:
   + **Selezione dei campi:** seleziona campi di registro specifici da includere.
   + **Formato di output:** scegli tra JSON, Plain, w3c, Raw o Parquet (solo S3).
   + **Delimitatore di campo:** specifica come separare i campi del registro.

1. Scegliere **Salva modifiche**.

### Per abilitare i log di connessione (AWS CLI)
<a name="enable-connection-logs-cli"></a>

L'esempio seguente mostra come abilitare i log di connessione utilizzando l'API: CloudWatch 

```
# Step 1: Create a delivery source
aws logs put-delivery-source \
  --name "cf-mtls-connection-logs" \
  --resource-arn "arn:aws:cloudfront::123456789012:distribution/E1A2B3C4D5E6F7" \
  --log-type CONNECTION_LOGS

# Step 2: Create a delivery destination
aws logs put-delivery-destination \
  --name "s3-destination" \
  --delivery-destination-configuration \
  "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket1"

# Step 3: Create the delivery
aws logs create-delivery \
  --delivery-source-name "cf-mtls-connection-logs" \
  --delivery-destination-arn "arn:aws:logs:us-east-1:123456789012:delivery-destination:s3-destination"
```

**Nota**  
Quando si utilizza l' CloudWatch API, è necessario specificare la regione Stati Uniti orientali (Virginia settentrionale) (us-east-1) anche quando si consegnano i log in altre regioni.

## Campi del registro delle connessioni
<a name="connection-log-fields"></a>

I registri di connessione includono informazioni dettagliate su ogni tentativo di connessione TLS:


| Campo | Description | Esempio | 
| --- | --- | --- | 
| eventTimestamp | Timestamp ISO 8601 quando la connessione è stata stabilita o non è riuscita | 1731620046814 | 
| connectionId | Identificatore univoco per la connessione TLS | oLHiEKbQSn8lkvJfA3D4gFowK3\$1iZ0g4i5nMUjE1Akod8TuAzn5nzg== | 
| connectionStatus |  Lo stato del tentativo di connessione mTLS.  | Success o Failed | 
| clientIp | Indirizzo IP del client di connessione | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 | 
| clientPort | Porta utilizzata dal client | 12137 | 
| serverIp | Indirizzo IP del server CloudFront perimetrale | 99.84.71.136 | 
| distributionId | CloudFront ID di distribuzione | E2DX1SLDPK0123 | 
| distributionTenantId | CloudFront ID del tenant di distribuzione (se applicabile) | dt\$12te1Ura9X3R2iCGNjW123 | 
| tlsProtocol | versione del protocollo TLS utilizzata | TLSv1.3 | 
| tlsCipher | Suite di crittografia TLS utilizzata per la connessione | TLS\$1AES\$1128\$1GCM\$1SHA256 | 
| tlsHandshakeDuration | Durata dell'handshake TLS in millisecondi | 153 | 
| tlsSni | Valore di indicazione del nome del server ricavato dall'handshake TLS | d111111abcdef8.cloudfront.net | 
| clientLeafCertSerialNumber | Numero di serie del certificato del client | 00:b1:43:ed:93:d2:d8:f3:9d | 
| clientLeafCertSubject | Campo relativo all'oggetto del certificato del cliente | C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=client.test.mtls.net | 
| clientLeafCertIssuer | Campo dell'emittente del certificato del cliente | C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=test.mtls.net | 
| clientLeafCertValidity | Periodo di validità del certificato del cliente | NotBefore=2025-06-05T23:28:21Z;NotAfter=2125-05-12T23:28:21Z | 
| connectionLogCustomData | Dati personalizzati aggiunti tramite Connection Functions | REVOKED:00:b1:43:ed:93:d2:d8:f3:9d | 

## Codici di errore di connessione
<a name="connection-error-codes"></a>

```
Failed:ClientCertMaxChainDepthExceeded
Failed:ClientCertMaxSizeExceeded
Failed:ClientCertUntrusted
Failed:ClientCertNotYetValid
Failed:ClientCertExpired
Failed:ClientCertTypeUnsupported
Failed:ClientCertInvalid
Failed:ClientCertIntentInvalid
Failed:ClientCertRejected
Failed:ClientCertMissing
Failed:TcpError
Failed:TcpTimeout
Failed:ConnectionFunctionError
Failed:ConnectionFunctionDenied
Failed:Internal
Failed:UnmappedConnectionError
```

Quando le connessioni falliscono, CloudFront registra codici di motivo specifici:


| Codice | Description | 
| --- | --- | 
| ClientCertMaxChainDepthExceeded | È stata superata la profondità massima della catena di certificati | 
| ClientCertMaxSizeExceeded | Dimensione massima del certificato superata | 
| ClientCertUntrusted | Il certificato non è attendibile | 
| ClientCertNotYetValid | Il certificato non è ancora valido | 
| ClientCertExpired | Il certificato è scaduto | 
| ClientCertTypeUnsupported | Il tipo di certificato non è supportato | 
| ClientCertInvalid | Il certificato non è valido | 
| ClientCertIntentInvalid | L'intento del certificato non è valido | 
| ClientCertRejected | Certificato rifiutato mediante convalida personalizzata | 
| ClientCertMissing | Manca il certificato | 
| TcpError |  Si è verificato un errore durante il tentativo di stabilire una connessione  | 
| TcpTimeout |  Non è stato possibile stabilire la connessione entro il periodo di timeout  | 
| ConnectionFunctionError |  È stata generata un'eccezione non rilevata durante l'esecuzione della funzione di connessione  | 
| Interno |  Si è verificato un errore interno del servizio  | 
| UnmappedConnectionError |  Si è verificato un errore che non rientra in nessuna delle altre categorie  | 