Revogação usando a função de conexão e o KVS do CloudFront - Amazon CloudFront

Revogação usando a função de conexão e o KVS do CloudFront

É possível implementar a verificação de revogação de certificados para autenticação TLS mútua associando funções de conexão e o KeyValueStore do CloudFront. Essa abordagem oferece um mecanismo de revogação de certificados escalável e em tempo real que complementa a validação de certificados integrada do CloudFront.

Funções de conexão são funções em JavaScript executadas durante o estabelecimento da conexão TLS nos locais da borda do CloudFront que permitem implementar uma lógica de validação de certificados personalizada para autenticação mTLS. Para ter informações mais detalhadas sobre como funções de conexão, consulte Associar uma função de conexão do CloudFront.

Como a revogação de certificados funciona com as funções de conexão

A validação padrão de certificados do CloudFront verifica a cadeia de certificados, a assinatura e a expiração, mas não inclui a verificação integrada de revogação de certificados. Por meio de funções de conexão, é possível implementar a verificação de revogação personalizada durante o handshake do TLS.

O processo de revogação de certificados funciona da seguinte maneira:

  1. O número de série dos certificados revogados é armazenado em um KeyValueStore do CloudFront.

  2. Quando um cliente apresenta um certificado, a função de conexão é invocada.

  3. A função compara o número de série do certificado com o número presente no KeyValueStore.

  4. Se o número de série for encontrado no armazenamento, o certificado será revogado.

  5. A função nega a conexão para certificados revogados.

Essa abordagem oferece uma verificação de revogação quase em tempo real na rede de borda global do CloudFront.

Configurar o KeyValueStore para certificados revogados

Primeiro, crie um KeyValueStore para armazenar os números de série dos certificados revogados:

Como criar um KeyValueStore (console)

  1. Faça login no Console de gerenciamento da AWS e abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v4/home.

  2. No painel de navegação, selecione Armazenamentos de chave-valor.

  3. Selecione Criar armazenamento de chave-valor.

  4. Insira um nome para o armazenamento de chave-valor (p. ex., certificados revogados).

  5. (Opcional) Adicione uma descrição.

  6. Selecione Criar armazenamento de chave-valor.

Como criar um KeyValueStore (AWS CLI)

O seguinte exemplo mostra como criar um KeyValueStore:

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

Importar números de série de certificados revogados

Após a criação de um KeyValueStore, é necessário importar o número de série dos certificados revogados:

Preparar os dados de revogação

Crie um arquivo JSON com o número de série dos certificados revogados:

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

Importar do S3

  1. Faça upload do arquivo JSON em um bucket do S3.

  2. Importe o arquivo para o 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" }'

Criar uma função de conexão para verificação de revogação

Crie uma função de conexão que compare o número de série dos certificados com os números presentes no KeyValueStore:

Exemplo de código de função de conexão

O seguinte exemplo mostra uma função de conexão que realiza a verificação de revogação 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(); } }

Como criar a função de conexão (AWS CLI)

O seguinte exemplo mostra como criar uma função de conexão associada ao 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

Associar a função à sua distribuição

Depois de criar e publicar a função de conexão, associe-a à sua distribuição do CloudFront habilitada para mTLS, conforme descrito na seção Associar uma função de conexão do CloudFront.