Revocación mediante la función de conexión de CloudFront y KVS - Amazon CloudFront

Revocación mediante la función de conexión de CloudFront y KVS

Puede implementar la comprobación de revocación de certificados para la autenticación TLS mutua combinando funciones de conexión de CloudFront con KeyValueStore. Este enfoque proporciona un mecanismo de revocación de certificados escalable y en tiempo real que complementa la validación de certificados integrada en CloudFront.

Las funciones de conexión son funciones de JavaScript que se ejecutan durante el establecimiento de la conexión de TLS en las ubicaciones periféricas de CloudFront y permiten implementar una lógica de validación de certificados personalizada para la autenticación mTLS. Para obtener información detallada sobre las funciones de conexión, consulte Asociación de una función de conexión de CloudFront.

Cómo funciona la revocación de certificados con funciones de conexión

La validación de certificados estándar de CloudFront verifica la cadena, la firma y la caducidad del certificado, pero no incluye la comprobación de revocación de certificados integrada. Al usar funciones de conexión, puede implementar una comprobación de revocación personalizada durante el establecimiento de comunicación de TLS.

El proceso de revocación de certificados funciona de la siguiente manera:

  1. Guarde los números de serie de los certificados revocados en un KeyValueStore de CloudFront.

  2. Cuando un cliente presenta un certificado, se invoca la función de conexión.

  3. La función compara el número de serie del certificado con el KeyValueStore.

  4. Si el número de serie se encuentra en la tienda, se revoca el certificado.

  5. Su función deniega la conexión en el caso de los certificados revocados.

Este enfoque permite comprobar las revocaciones prácticamente en tiempo real en toda la red de periferia global de CloudFront.

Configuración de KeyValueStore para certificados revocados

En primer lugar, cree un KeyValueStore para almacenar los números de serie de los certificados revocados:

Creación de un KeyValueStore (consola)

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. En el panel de navegación, elija Almacenes de valores de claves.

  3. Elija Creación de un almacén de valores de claves.

  4. Ingrese un nombre para el almacén de valores de claves (por ejemplo, certificados revocados).

  5. (Opcional) Añada una descripción.

  6. Elija Creación de un almacén de valores de claves.

Creación de un KeyValueStore (CLI de AWS)

En el ejemplo siguiente se muestra cómo crear un KeyValueStore:

aws cloudfront create-key-value-store \ --name "revoked-certificates" \ --comment "Store for revoked certificate serial numbers"

Importación de los números de serie de los certificados revocados

Después de crear un KeyValueStore, debe importar los números de serie de los certificados revocados:

Preparación de los datos de revocación

Cree un archivo JSON con los números de serie de los certificados revocados:

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

Importar desde S3

  1. Carga del archivo JSON en un bucket de S3

  2. Importación del archivo al KeyValueStore:

    aws cloudfront create-key-value-store \ --name "revoked-certificates" \ --import-source '{ "SourceType": "S3", "SourceARN": "arn:aws:s3:::amzn-s3-demo-bucket1/revoked-serials.json" }'

Creación de una función de conexión para comprobar las revocaciones

Cree una función de conexión que compruebe los números de serie de los certificados con el KeyValueStore:

Ejemplo de código de función de conexión

En el ejemplo siguiente, se muestra una función de conexión que realiza la comprobación de la revocación de certificados:

import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // Get client certificate serial number const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check if the serial number exists in the KeyValueStore const isRevoked = await kvsHandle.exists(clientSerialNumber.replaceAll(':', '')); if (isRevoked) { console.log(`Certificate ${clientSerialNumber} is revoked. Denying connection.`); connection.logCustomData(`REVOKED:${clientSerialNumber}`); connection.deny(); } else { console.log(`Certificate ${clientSerialNumber} is valid. Allowing connection.`); connection.allow(); } }

Creación de la función de conexión (CLI de AWS)

En el siguiente ejemplo, se muestra cómo crear una función de conexión con la asociación de KeyValueStore:

aws cloudfront create-connection-function \ --name "revocation-checker" \ --connection-function-config '{ "Comment": "Certificate revocation checking function", "Runtime": "cloudfront-js-2.0", "KeyValueStoreAssociations": { "Quantity": 1, "Items": [ { "KeyValueStoreARN": "arn:aws:cloudfront::123456789012:key-value-store/revoked-certificates" } ] } }' \ --connection-function-code fileb://revocation-checker.js

Asociación de la función con la distribución

Tras crear y publicar la función de conexión, asóciela a la distribución de CloudFront compatible con mTLS, tal y como se describe en la sección Asociación de una función de conexión de CloudFront.