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 relazioni interrotte, è necessario un meccanismo per rifiutarli durante l'handshake MTLS. CloudFront offre due approcci nativi alla revoca dei certificati ed è possibile combinarli per un controllo a più livelli.

  • OCSP (Online Certificate Status Protocol): CloudFront interroga in tempo reale il risponditore OCSP dell'Autorità di certificazione 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 offre l'accesso programmatico allo stato di revoca per processi decisionali personalizzati.

  • CloudFront Funzioni e KeyValueStore: mantieni un elenco di numeri di serie dei certificati revocati in un. CloudFront KeyValueStore Una funzione di connessione interroga KeyValueStore durante l'handshake TLS e consente o nega la connessione. In questo modo hai il pieno controllo sui dati di revoca, sui tempi di aggiornamento e sulla logica personalizzata, come i periodi di grazia o le eccezioni. IP-based

Confronto: OCSP e funzioni con CloudFront KeyValueStore
OCSP CloudFront Funzioni + KeyValueStore
Origine dati Risponditore OCSP dell'Autorità di Certificazione Gestisci l'elenco delle revoche
Meccanismo di aggiornamento Real-time interrogazione a CA Invii aggiornamenti a KeyValueStore
Logica personalizzata Disponibile tramite Connection Functions Integrato nel codice della 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 sovrapporre una logica aggiuntiva al risultato OCSP, ad esempio, autorizzando i certificati revocati da intervalli IP affidabili durante un periodo di prova.

OCSP (Online Certificate Status Protocol)

OCSP è un protocollo in tempo reale che verifica lo stato di revoca di un certificato direttamente con l'Autorità di certificazione (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 leaf e fino a tre certificati intermedi, ciascuno rispetto ai rispettivi URL di risposta OCSP. I certificati root nel trust store sono esclusi dalla convalida OCSP.

Abilita OCSP

Abilita OCSP sul tuo trust store. Se abilitato, esegue CloudFront automaticamente la convalida OCSP per qualsiasi certificato client che contiene un URL di risposta OCSP nell'estensione Authority Information Access (AIA). Una volta abilitato OCSP, l'intera catena di certificati client deve avere un URL OCSP. Se un certificato nella catena di certificati client non contiene un URL OCSP, non CloudFront stabilirà la connessione.

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

Risultati OCSP in Connection Functions

Quando una funzione di connessione è configurata sulla stessa distribuzione, la CloudFront richiama dopo il completamento 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ò essere ValidInvalid, 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, consentire la revoca di un certificato da un intervallo IP affidabile o negare 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 affidabile

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 di errore OCSP

Quando CloudFront non è possibile determinare lo stato di revoca di un certificato, poiché il risponditore OCSP non è raggiungibile, restituisce un errore o restituisce «sconosciuto», per impostazione predefinita nega la connessione. CloudFront Per implementare il 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 con KeyValueStore per implementare il controllo della revoca dei certificati senza alcuna dipendenza esterna. L'utente mantiene un elenco di numeri di serie dei certificati revocati in a KeyValueStore e la funzione di connessione confronta ogni certificato client 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 consente il controllo delle revoce quasi in tempo reale sulla rete CloudFront perimetrale globale.

Per implementare questo approccio, è necessario:

  • Una distribuzione configurata con Viewer MTL

  • A KeyValueStore contenente i numeri di serie dei certificati revocati

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

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

Passaggio 1: creare un file 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. Verifica lo stato con:

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

Fase 2: Creare la funzione di connessione di revoca

Crea una funzione di connessione che controlli i numeri di serie dei certificati rispetto a: KeyValueStore

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. Vai alla funzione di connessione nella console e usa la scheda Test.

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

  • Specificare facoltativamente un indirizzo IP del client per testare IP-based la logica.

  • Scegli la funzione Test per vedere i risultati dell'esecuzione.

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

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

Fase 4: Associate la funzione alla vostra distribuzione

Una volta pubblicata la funzione di connessione, associala alla TLS-enabled distribuzione m per attivare il controllo della revoca dei certificati. Vai alle impostazioni di distribuzione, scorri fino alla sezione «Viewer mutual authentication (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 funzione di connessione per politiche personalizzate. La funzione di connessione riceve il risultato OCSP e può applicare una logica aggiuntiva:

  • Periodi di tolleranza: consentono i certificati revocati 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 dati di revoca inseriti dall'utente. 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 modello offre la revoca immediata tramite KVS (nessun ritardo nella cache) più la CA-authoritative revoca tramite OCSP, con la gestione personalizzata delle eccezioni.