

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

# Scenari di revoca avanzati
<a name="advanced-revocation-scenarios"></a>

Per requisiti di revoca dei certificati più complessi, considera queste configurazioni aggiuntive:

**Topics**
+ [Converti gli elenchi di revoca dei certificati (CRL) in formato KeyValueStore](#convert-crl-kvs-format)
+ [Gestisci più autorità di certificazione](#handle-multiple-cas)
+ [Aggiungere dati personalizzati ai registri di connessione](#add-custom-data-logs)
+ [Gestisci gli aggiornamenti CRL](#manage-crl-updates)
+ [Pianifica la capacità KeyValueStore](#plan-kvs-capacity)

## Converti gli elenchi di revoca dei certificati (CRL) in formato KeyValueStore
<a name="convert-crl-kvs-format"></a>

Se disponi di un file CRL (Certificate Revocation List), puoi convertirlo in formato KeyValueStore JSON utilizzando OpenSSL e jq:

**Converti CRL in formato KeyValueStore **

Estrai i numeri di serie dal file CRL:

```
openssl crl -text -noout -in rfc5280_CRL.crl | \
  awk '/Serial Number:/ {print $3}' | \
  cut -d'=' -f2 | \
  sed 's/../&:/g;s/:$//' >> serialnumbers.txt
```

Converti i numeri di serie in formato KeyValueStore JSON:

```
jq -R -s 'split("\n") | map(select(length > 0)) | {data: map({"key": ., "value": ""})}' \
  serialnumbers.txt >> serialnumbers_kvs.json
```

Carica il file formattato su S3 e crealo KeyValueStore come descritto nel passaggio 1.

## Gestisci più autorità di certificazione
<a name="handle-multiple-cas"></a>

Se disponi TrustStore di più autorità di certificazione (CAs), includi le informazioni sull'emittente nelle KeyValueStore chiavi per evitare conflitti tra certificati diversi CAs che potrebbero avere lo stesso numero di serie.

Per scenari con più CA, utilizzate come chiave una combinazione dell' SHA1 hash dell'emittente e del numero di serie:

```
import cf from 'cloudfront';

async function connectionHandler(connection) {
    const kvsHandle = cf.kvs();
    const clientCert = connection.clientCertInfo;
    
    // Create composite key with issuer hash and serial number
    const issuer = clientCert.issuer.replace(/[^a-zA-Z0-9]/g, '').substring(0, 20);
    const serialno = clientCert.serialNumber;
    const compositeKey = `${issuer}_${serialno}`;
    
    const cert_revoked = await kvsHandle.exists(compositeKey);
    
    if (cert_revoked) {
        console.log(`Blocking revoked cert: ${serialno} from issuer: ${issuer}`);
        connection.deny();
    } else {
        connection.allow();
    }
}
```

**Nota**  
L'utilizzo dell'identificatore emittente \$1 del numero di serie crea chiavi più lunghe, che possono ridurre il numero totale di voci che è possibile memorizzare in. KeyValueStore

## Aggiungere dati personalizzati ai registri di connessione
<a name="add-custom-data-logs"></a>

Le funzioni di connessione possono aggiungere dati personalizzati ai registri di CloudFront connessione utilizzando il logCustomData metodo. Ciò consente di includere i risultati del controllo di revoca, le informazioni sul certificato o altri dati pertinenti nei registri.

```
async function connectionHandler(connection) {
    const kvsHandle = cf.kvs();
    const clientSerialNumber = connection.clientCertInfo.serialNumber;
    const serialNumberExistsInKvs = await kvsHandle.exists(clientSerialNumber);
    
    if (serialNumberExistsInKvs) {
        // Log revocation details to connection logs
        connection.logCustomData(`REVOKED:${clientSerialNumber}:DENIED`);
        console.log("Connection denied - certificate revoked");
        return connection.deny();
    }
    
    // Log successful validation
    connection.logCustomData(`VALID:${clientSerialNumber}:ALLOWED`);
    console.log("Connection allowed");
    return connection.allow();
}
```

I dati personalizzati sono limitati a 800 byte di testo UTF-8 valido. Se superi questo limite, CloudFront tronca i dati fino al limite UTF-8 valido più vicino.

**Nota**  
La registrazione dei dati personalizzata funziona solo quando i registri di connessione sono abilitati per la distribuzione. Se i log di connessione non sono configurati, il logCustomData metodo non è operativo.

## Gestisci gli aggiornamenti CRL
<a name="manage-crl-updates"></a>

Le autorità di certificazione possono emettere due tipi di CRLs:
+ **Completo CRLs**: contiene un elenco completo di tutti i certificati revocati
+ **Delta CRLs**: elenca solo i certificati revocati dall'ultimo CRL completo

Per gli aggiornamenti CRL completi, creane uno nuovo KeyValueStore con i dati aggiornati e reindirizza l'associazione Connection Function al nuovo. KeyValueStore Questo approccio è più semplice rispetto al calcolo delle differenze e all'esecuzione di aggiornamenti incrementali.

Per gli aggiornamenti delta CRL, usa il comando update-keys per aggiungere nuovi certificati revocati a quelli esistenti: KeyValueStore

```
aws cloudfront update-key-value-store \
  --name "revoked-serials-kvs" \
  --if-match "current-etag" \
  --put file://delta-revoked-serials.json
```

## Pianifica la capacità KeyValueStore
<a name="plan-kvs-capacity"></a>

KeyValueStore ha un limite di dimensione di 5 MB e supporta fino a 10 milioni di coppie chiave-valore. Pianifica la capacità dell'elenco di revoca in base al formato della chiave e alla dimensione dei dati:
+ **Solo numero di serie**: archiviazione efficiente per un semplice controllo delle revoche
+ **Identificatore dell'emittente \$1 numero di serie**: chiavi più lunghe per ambienti con più CA

Per elenchi di revoche di grandi dimensioni, prendi in considerazione l'implementazione di un approccio a più livelli in cui mantieni la separazione KeyValueStores per diverse categorie di certificati o periodi di tempo.