Escenarios de revocación avanzada
Para requisitos de revocación de certificados más complejos, considere estas configuraciones adicionales:
Temas
Convierta las listas de revocación de certificados (CRL) al formato KeyValueStore.
Si tiene un archivo de lista de revocación de certificados (CRL), puede convertirlo al formato JSON de KeyValueStore mediante OpenSSL y jq:
Convierta el CRL al formato KeyValueStore
Extraiga los números de serie del archivo CRL:
openssl crl -text -noout -in rfc5280_CRL.crl | \ awk '/Serial Number:/ {print $3}' | \ cut -d'=' -f2 | \ sed 's/../&:/g;s/:$//' >> serialnumbers.txt
Convierta los números de serie al formato JSON de KeyValueStore:
jq -R -s 'split("\n") | map(select(length > 0)) | {data: map({"key": ., "value": ""})}' \ serialnumbers.txt >> serialnumbers_kvs.json
Cargue el archivo formateado en S3 y cree el KeyValueStore tal y como se describe en el paso 1.
Gestión de varias autoridades de certificación
Si su TrustStore contiene varias autoridades de certificación (CA), incluya la información del emisor en las claves de KeyValueStore para evitar conflictos entre certificados de distintas autoridades de certificación que puedan tener el mismo número de serie.
En escenarios con varias autoridades de certificación, utilice como clave una combinación del hash SHA1 del emisor y el número de 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
Al utilizar el identificador del emisor y el número de serie, se crean claves más largas, lo que puede reducir el número total de entradas que puede almacenar en KeyValueStore.
Agregación de datos personalizados a los registros de conexión
Las funciones de conexión pueden agregar datos personalizados a los registros de conexión de CloudFront mediante el método logCustomData. Esto permite incluir los resultados de las comprobaciones de revocación, la información sobre los certificados u otros datos relevantes en los registros.
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(); }
Los datos personalizados están limitados a 800 bytes de texto UTF-8 válido. Si supera este límite, CloudFront trunca los datos hasta el límite UTF-8 válido más cercano.
nota
El registro de datos personalizado solo funciona cuando los registros de conexión están habilitados para la distribución. Si los registros de conexión no están configurados, el método logCustomData no es operativo.
Actualizaciones de CRL administradas
Las autoridades de certificación pueden emitir dos tipos de CRL:
-
CRL completas: contienen una lista completa de todos los certificados revocados
-
CRL de Delta: solo se muestran los certificados revocados desde la última CRL completa
Para obtener actualizaciones completas de la CRL, cree un KeyValueStore nuevo con los datos actualizados y redirija la asociación de la función de conexión al nuevo KeyValueStore. Este enfoque es más sencillo que calcular las diferencias y realizar actualizaciones incrementales.
Para las actualizaciones de CRL delta, utilice el comando update-keys para agregar nuevos certificados revocados al KeyValueStore existente:
aws cloudfront update-key-value-store \ --name "revoked-serials-kvs" \ --if-match "current-etag" \ --put file://delta-revoked-serials.json
Planificación de la capacidad de KeyValueStore
KeyValueStore tiene un límite de tamaño total de 5 MB y admite hasta 10 millones de pares clave-valor. Planifique la capacidad de la lista de revocación en función del formato de la clave y del tamaño de los datos:
-
Solo número de serie: almacenamiento eficiente para una comprobación sencilla de las revocaciones
-
Identificador del emisor + número de serie: claves más largas para entornos con varias autoridades de certificación
En el caso de listas de revocación de gran tamaño, considere la posibilidad de implementar un enfoque escalonado en el que mantenga almacenes KeyValueStores independientes para diferentes categorías de certificados o periodos de tiempo.