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
Per requisiti di revoca dei certificati più complessi, considera queste configurazioni aggiuntive:
Argomenti
Converti gli elenchi di revoca dei certificati (CRL) in formato KeyValueStore
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
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 + 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
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
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
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 + 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.