Cenários avançados de revogação - Amazon CloudFront

Cenários avançados de revogação

Com relação a requisitos de revogação de certificados mais complexos, considere estas configurações adicionais:

Converter listas de revogação de certificados (CRLs) no formato do KeyValueStore

Se você tiver um arquivo de lista de revogação de certificados (CRL), poderá convertê-lo no formato JSON do KeyValueStore usando OpenSSL e jq:

Converter CRLs no formato do KeyValueStore

Extraia os números de série do arquivo de CRL:

openssl crl -text -noout -in rfc5280_CRL.crl | \ awk '/Serial Number:/ {print $3}' | \ cut -d'=' -f2 | \ sed 's/../&:/g;s/:$//' >> serialnumbers.txt

Converta os números de série no formato JSON do KeyValueStore:

jq -R -s 'split("\n") | map(select(length > 0)) | {data: map({"key": ., "value": ""})}' \ serialnumbers.txt >> serialnumbers_kvs.json

Faça upload do arquivo formatado no S3 e crie o KeyValueStore conforme descrito na Etapa 1.

Lidar com várias autoridades de certificação

Quando sua TrustStore contém várias autoridades de certificação (CAs), inclua as informações do emissor nas chaves do KeyValueStore para evitar conflitos entre certificados de CAs diferentes que possam ter o mesmo número de série.

Em cenários com várias CAs, use uma combinação do hash SHA1 do emissor e o número de série como chave:

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

O uso do identificador do emissor e do número de série cria chaves mais longas, o que pode reduzir o número total de entradas que é possível armazenar no KeyValueStore.

Adicionar dados personalizados aos logs de conexão

As funções de conexão podem adicionar dados personalizados aos logs de conexão do CloudFront usando o método logCustomData. Isso permite incluir resultados da verificação de revogação, informações do certificado ou outros dados relevantes nos logs.

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(); }

Os dados personalizados são limitados a 800 bytes de texto UTF-8 válido. Se você exceder esse limite, o CloudFront truncará os dados até o limite UTF-8 válido mais próximo.

nota

O registro em log de dados personalizados só funciona quando os logs de conexão estão habilitados para a distribuição. Se os logs de conexão não estiverem configurados, o método logCustomData não fará nada.

Gerenciar atualizações de CRL

As autoridades de certificação podem emitir dois tipos de CRL:

  • CRLs completas: contêm uma lista completa de todos os certificados revogados.

  • CRLs delta: listam somente certificados revogados desde a última CRL completa.

Para atualizações de CRLs completas, crie um KeyValueStore com os dados atualizados e redirecione a associação da função de conexão para o novo KeyValueStore. Essa abordagem é mais simples do que calcular diferenças e realizar atualizações incrementais.

Para atualizações de CRLs delta, use o comando update-keys para adicionar novos certificados revogados ao KeyValueStore existente:

aws cloudfront update-key-value-store \ --name "revoked-serials-kvs" \ --if-match "current-etag" \ --put file://delta-revoked-serials.json

Planejar a capacidade do KeyValueStore

O KeyValueStore tem um limite de tamanho total de 5 MB e comporta até 10 milhões de pares de chave-valor. Planeje a capacidade da lista de revogação com base no formato da chave e no tamanho dos dados:

  • Somente número de série: armazenamento eficiente para verificação simples de revogação.

  • Identificador do emissor + número de série: chaves mais longas para ambientes com várias CAs.

Para listas de revogação extensas, considere a possibilidade de implementar uma abordagem em camadas em que você mantenha os KeyValueStores separados para diferentes categorias de certificado ou períodos.