View a markdown version of this page

Revoca del certificato - Amazon CloudFront

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

Revoca del certificato

Quando i certificati devono essere revocati, a causa di compromessi, modifiche alle politiche o interruzioni di relazioni, è necessario un meccanismo per rifiutare tali certificati durante l'handshake MTLS. CloudFront fornisce due approcci nativi alla revoca dei certificati ed è possibile combinarli per un controllo a più livelli.

  • OCSP (Online Certificate Status Protocol): CloudFront interroga il risponditore OCSP dell'autorità di certificazione in tempo reale per verificare se un certificato client è stato revocato. Abilita OCSP sul tuo trust store e CloudFront gestisce la convalida automaticamente durante l'handshake TLS. I risultati OCSP sono visibili anche in Connection Functions, che consente l'accesso programmatico allo stato di revoca per processi decisionali personalizzati.

  • CloudFront Funzioni e KeyValueStore: è possibile mantenere un elenco di numeri di serie dei certificati revocati in un. CloudFront KeyValueStore Una funzione di connessione interroga l'utente KeyValueStore durante l'handshake TLS e consente o nega la connessione. Questo ti dà il pieno controllo sui dati di revoca, sui tempi di aggiornamento e sulla logica personalizzata come i periodi di tolleranza o le eccezioni. IP-based

Confronto: OCSP e funzioni con CloudFront KeyValueStore
OCSP CloudFront Funzioni + KeyValueStore
Origine dati Risponditore OCSP dell'Autorità di certificazione Sei tu a gestire l'elenco delle revoche
Meccanismo di aggiornamento Real-time interrogazione a CA Invii aggiornamenti a KeyValueStore
Logica personalizzata Disponibile tramite le funzioni di connessione Integrato nel tuo codice funzione
Dipendenza esterna Richiede la disponibilità del risponditore CA OCSP Nessuna dipendenza esterna
Ideale per CA che gestiscono i risponditori OCSP; stato in tempo reale CA-authoritative Self-managed revoca; politiche personalizzate; CA senza supporto OCSP

È possibile utilizzare entrambi gli approcci insieme. Abilita OCSP per il controllo CA-authoritative delle revoche, quindi utilizza una funzione di connessione per aggiungere logica aggiuntiva al risultato OCSP, ad esempio consentendo la revoca dei certificati da intervalli IP affidabili durante un periodo di tolleranza.

OCSP (Online Certificate Status Protocol)

OCSP è un protocollo in tempo reale che verifica lo stato di revoca di un certificato direttamente con la Certificate Authority (CA). Durante il processo di firma del certificato, la CA incorpora un URL del risponditore OCSP nel certificato. Quando un client presenta il proprio certificato durante l'handshake MTLS, CloudFront invia una richiesta OCSP all'URL del risponditore incorporato e agisce in base alla risposta: i certificati validi procedono, i certificati revocati vengono terminati.

CloudFront convalida l'intera catena di certificati, il certificato principale e fino a tre certificati intermedi, ciascuno rispetto ai rispettivi URL dei risponditori OCSP. I certificati presenti nel trust store vengono considerati come ancoraggi di fiducia e sono esclusi dalla convalida OCSP. Questo vale per qualsiasi certificato nel trust store, sia che si tratti di una CA root o di una CA intermedia. Quando si inserisce una CA intermedia nel trust store, questa diventa un trust anchor e la convalida della catena termina in corrispondenza di quel certificato. Lo sono solo i certificati sottostanti nella catena. OCSP-validated

Abilita OCSP

Abilita OCSP nel tuo trust store. Se abilitato, esegue CloudFront automaticamente la convalida OCSP per qualsiasi certificato client che contiene un URL del risponditore OCSP nella relativa estensione AIA (Authority Information Access). Una volta abilitato l'OCSP, ogni certificato nella catena di certificati client al di sotto del trust anchor deve avere un URL OCSP. Se un certificato al di sotto del trust anchor non contiene un URL OCSP, CloudFront non stabilisce la connessione. I certificati presenti nel trust store (trust anchors) sono esenti da questo requisito.

CloudFront memorizza nella cache le risposte OCSP all'edge per ridurre i tempi di andata e ritorno e proteggersi dai tempi di inattività dei risponditori OCSP. Le risposte OCSP vengono memorizzate nella cache per circa 30 minuti e il ripristino dello stato di revoca aggiornato può richiedere fino a 30 minuti.

I risultati OCSP sono Funzioni di connessione

Quando una funzione di connessione è configurata sulla stessa distribuzione, la CloudFront richiama al termine della convalida OCSP. L'oggetto di connessione contiene lo stato OCSP per i certificati leaf e intermedi:

{ "clientCertificate": { "certificates": { "leaf": { "subject": "CN=client.example.com, O=Example Org", "issuer": "CN=Intermediate CA, O=Example Org", "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86", "validity": { "notBefore": "2024-01-01T00:00:00Z", "notAfter": "2025-01-01T00:00:00Z" }, "sha256Fingerprint": "AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90", "ocspEndpoint": "http://ocsp.example.org" }, "intermediates": [ { "subject": "CN=Intermediate CA, O=Example Org", "issuer": "CN=Root CA, O=Example Org", "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86", "validity": { "notBefore": "2020-01-01T00:00:00Z", "notAfter": "2030-01-01T00:00:00Z" }, "sha256Fingerprint": "12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF", "ocspEndpoint": "http://ocsp.example.org" } ] }, "revocationStatus": { "chainValidity": "Valid", // "Valid" | "Invalid" | "Unknown" "certificates": { "leaf": { "method": "OCSP", // "OCSP" "status": "Good", // "Good" | "Revoked" | "Unknown" | "Error" "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86" }, "intermediates": [ { "method": "OCSP", // "OCSP" "status": "Error", // "Good" | "Revoked" | "Unknown" | "Error" "errorType": "InternalError", // "InternalError" | "OCSP response verification failed: {Type}" "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86" } ] } } }, "clientIp":"127.0.0.1", "endpoint":"d123.cloudfront.net", "distributionId":"E1NXS4MQZH501R", "connectionId":"xdzQ6lJUDUt8b7OuqOD8lmzOC9HcMaXPmhH5ZdzLCZpKxqzfCPpR4A==" }

Il chainValidity campo può essereValid,Invalid, o. Unknown statusI valori dei singoli certificati possono essere GoodRevoked,Unknown, oError. Il errorType campo contiene InternalError o OCSP response verification failed: {Type} quando lo stato èError.

La funzione di connessione può sovrascrivere il risultato OCSP, ad esempio autorizzando un certificato revocato da un intervallo IP attendibile o negando un certificato che OCSP riporta come «valido» in base a una logica aziendale aggiuntiva.

Nota

Il errorType campo sarà presente solo se lo stato è. Error

Esempio: gestione OCSP personalizzata con eccezione IP attendibile

function connectionHandler(connection) { var revocationStatus = connection.clientCertificate.revocationStatus; var trustedIP = (connection.clientIp === "[IP_ADDRESS]"); if (revocationStatus.chainValidity === "Invalid") { if (trustedIP) { connection.allow(); } else { connection.deny(); } } else if (revocationStatus.certificates.leaf.status === "Error") { console.log(revocationStatus.certificates.leaf.errorType); connection.deny(); } else { connection.allow(); } }

Comportamento in caso di errore OCSP

Quando CloudFront non è possibile determinare lo stato di revoca di un certificato, perché il risponditore OCSP non è raggiungibile, restituisce un errore o restituisce «sconosciuto», nega la connessione per impostazione predefinita. CloudFront Per implementare un comportamento soft-fail, utilizzate una funzione di connessione. Le funzioni di connessione non verranno eseguite se OCSP è abilitato e l'URL OCSP è assente nei certificati client. Il risultato OCSP è disponibile nell'oggetto di connessione e la funzione può consentire connessioni quando lo stato OCSP è indeterminato:

async function connectionHandler(connection) { var revocationStatus = connection.clientCertificate.revocationStatus; if (revocationStatus.certificates.leaf.status === "Error" || revocationStatus.certificates.leaf.status === "Unknown") { // OCSP responder unreachable — allow connection (soft-fail) connection.logCustomData(`OCSP_SOFT_FAIL:${revocationStatus.certificates.leaf.errorType}`); return connection.allow(); } if (revocationStatus.chainValidity === "Invalid") { return connection.deny(); } return connection.allow(); }

Revoca del certificato con funzioni e CloudFront KeyValueStore

È possibile utilizzare CloudFront Connection Functions with KeyValueStore per implementare il controllo della revoca dei certificati senza alcuna dipendenza esterna. Si mantiene un elenco dei numeri di serie dei certificati revocati in un KeyValueStore formato e la funzione di connessione verifica ogni certificato client confrontandolo con questo elenco 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

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

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

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

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

Questo approccio fornisce un controllo delle revoche quasi in tempo reale nella rete edge globale CloudFront.

Per implementare questo approccio, è necessario:

  • Una distribuzione configurata con visualizzatori MTL

  • A KeyValueStore contenente numeri di serie del certificato revocato

  • Una funzione di connessione che richiede di KeyValueStore verificare lo stato del certificato

Quando un client si connette, CloudFront convalida il certificato rispetto al trust store, quindi esegue la funzione di connessione. La tua funzione confronta il numero di serie del certificato con KeyValueStore e consente o nega la connessione.

Passaggio 1: creare un modulo KeyValueStore per i certificati revocati

Prepara i numeri di serie dei certificati revocati in formato JSON:

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

Carica questo file JSON in un bucket S3, quindi crea: KeyValueStore

aws s3 cp revoked-serials.json s3://your-bucket-name/revoked-serials.json aws cloudfront create-key-value-store \ --name revoked-serials-kvs \ --import-source '{ "SourceType": "S3", "SourceARN": "arn:aws:s3:::your-bucket-name/revoked-serials.json" }'

Attendi il completamento del KeyValueStore provisioning. Controlla lo stato con:

aws cloudfront get-key-value-store --name "revoked-serials-kvs"

Passaggio 2: creare la funzione di connessione di revoca

Crea una funzione di connessione che verifichi i numeri di serie del KeyValueStore certificato rispetto a:

aws cloudfront create-connection-function \ --name "revocation-control" \ --connection-function-config file://connection-function-config.json \ --connection-function-code file://connection-function-code.txt

Il file di configurazione specifica l' KeyValueStore associazione:

{ "Runtime": "cloudfront-js-2.0", "Comment": "A function that implements revocation control via KVS", "KeyValueStoreAssociations": { "Quantity": 1, "Items": [ { "KeyValueStoreArn": "arn:aws:cloudfront::account-id:key-value-store/kvs-id" } ] } }

Esempio di codice della funzione di connessione:

import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // Get client serial number from client certificate const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check KVS to see if serial number exists as a key // Remove : from the clientSerialNumber if KVS entries dont have it const serialNumberExistsInKvs = await kvsHandle.exists(clientSerialNumber.replaceAll(":", "")); // Deny connection if serial number exists in KVS if (serialNumberExistsInKvs) { console.log("Connection denied — certificate revoked"); connection.logCustomData("Connection denied — certificate revoked"); return connection.deny(); } // Allow connections that don't exist in KVS console.log("Connection allowed"); return connection.allow(); }

Fase 3: verifica la tua funzione di revoca

Usa la CloudFront console per testare la tua funzione di connessione con certificati di esempio. Accedi alla funzione di connessione nella console e utilizza la scheda Test.

  • Incolla un certificato di esempio in formato PEM nell'interfaccia di test.

  • Facoltativamente, specificate un indirizzo IP del client per testare IP-based la logica.

  • Scegliete la funzione Test per visualizzare i risultati dell'esecuzione.

  • Esamina i log di esecuzione per verificare la logica della tua funzione.

Esegui i test con certificati validi e revocati per assicurarti che la tua funzione gestisca correttamente entrambi gli scenari.

Fase 4: Associa la funzione alla tua distribuzione

Una volta pubblicata la funzione di connessione, associala alla TLS-enabled distribuzione m per attivare il controllo della revoca dei certificati. Accedi alle impostazioni di distribuzione, scorri fino alla sezione «Autenticazione reciproca tra visualizzatori (MTLs)», seleziona la tua funzione di connessione e salva le modifiche.

Strategie di revoca avanzate

Combina OCSP con la logica delle funzioni di connessione

È possibile abilitare OCSP per il controllo CA-authoritative delle revoche e sovrapporre una Connection Function per le policy personalizzate. La funzione di connessione riceve il risultato OCSP e può applicare una logica aggiuntiva:

  • Periodi di tolleranza: consenti la revoca dei certificati dalle reti interne per un periodo definito durante la rotazione dei certificati.

  • Accesso di emergenza: consente le connessioni da IP specifici anche quando OCSP segnala lo stato di revoca.

  • Logica di negazione personalizzata: blocca i certificati che OCSP riporta come «validi» in base ai tuoi dati di revoca in. KeyValueStore

Esempio Revoca combinata OCSP + KVS
import cf from 'cloudfront'; async function connectionHandler(connection) { var kvsHandle = cf.kvs(); var revocationStatus = connection.clientCertificate.revocationStatus; var serialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check your own revocation list first (immediate revocation, no cache delay) var inKvs = await kvsHandle.exists(serialNumber.replaceAll(":", "")); if (inKvs) { connection.logCustomData("KVS_REVOKED:" + serialNumber); return connection.deny(); } // Then check OCSP result if (revocationStatus.chainValidity === 'Valid' && revocationStatus.certificates.leaf.status === "Revoked") { // OCSP says revoked — allow grace period from trusted IPs if (connection.clientIp.startsWith("10.0.")) { connection.logCustomData("GRACE_PERIOD:" + serialNumber + ":" + connection.clientIp); return connection.allow(); } connection.logCustomData("OCSP_REVOKED:" + serialNumber); return connection.deny(); } connection.allow(); }

Questo schema consente la revoca immediata tramite KVS (senza ritardo nella cache) e la CA-authoritative revoca tramite OCSP, con una gestione personalizzata delle eccezioni intermedie.