Skenario pencabutan lanjutan - Amazon CloudFront

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Skenario pencabutan lanjutan

Untuk persyaratan pencabutan sertifikat yang lebih kompleks, pertimbangkan konfigurasi tambahan ini:

Konversi Daftar Pencabutan Sertifikat (CRL) ke format KeyValueStore

Jika Anda memiliki file Certificate Revocation List (CRL), Anda dapat mengonversinya ke KeyValueStore format JSON menggunakan OpenSSL dan jq:

Konversi CRL ke format KeyValueStore

Ekstrak nomor seri dari file CRL:

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

Konversi nomor seri ke format KeyValueStore JSON:

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

Unggah file yang diformat ke S3 dan buat KeyValueStore seperti yang dijelaskan pada Langkah 1.

Menangani beberapa Otoritas Sertifikat

Jika Anda TrustStore berisi beberapa Otoritas Sertifikat (CAs), sertakan informasi penerbit dalam KeyValueStore kunci Anda untuk menghindari konflik antar sertifikat dari CAs yang berbeda yang mungkin memiliki nomor seri yang sama.

Untuk skenario multi-CA, gunakan kombinasi SHA1 hash penerbit dan nomor seri sebagai kuncinya:

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

Menggunakan pengenal penerbit+nomor seri membuat kunci yang lebih panjang, yang dapat mengurangi jumlah total entri yang dapat Anda simpan di. KeyValueStore

Tambahkan data khusus ke log koneksi

Fungsi koneksi dapat menambahkan data khusus ke log CloudFront koneksi menggunakan logCustomData metode ini. Ini memungkinkan Anda menyertakan hasil pemeriksaan pencabutan, informasi sertifikat, atau data relevan lainnya di log Anda.

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

Data kustom dibatasi hingga 800 byte teks UTF-8 yang valid. Jika Anda melebihi batas ini, CloudFront potong data ke batas UTF-8 terdekat yang valid.

catatan

Pencatatan data khusus hanya berfungsi saat log koneksi diaktifkan untuk distribusi Anda. Jika log koneksi tidak dikonfigurasi, logCustomData metode ini adalah no-op.

Kelola pembaruan CRL

Otoritas Sertifikat dapat mengeluarkan dua jenis CRLs:

  • Lengkap CRLs: Berisi daftar lengkap semua sertifikat yang dicabut

  • Delta CRLs: Hanya sertifikat daftar yang dicabut sejak CRL penuh terakhir

Untuk pembaruan CRL lengkap, buat yang baru KeyValueStore dengan data yang diperbarui dan alihkan asosiasi Fungsi Koneksi ke yang baru. KeyValueStore Pendekatan ini lebih sederhana daripada menghitung perbedaan dan melakukan pembaruan tambahan.

Untuk pembaruan delta CRL, gunakan perintah update-keys untuk menambahkan sertifikat baru yang telah dicabut ke yang sudah ada: KeyValueStore

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

KeyValueStore Kapasitas rencana

KeyValueStore memiliki batas ukuran 5 MB dan mendukung hingga 10 juta pasangan nilai kunci. Rencanakan kapasitas daftar pencabutan Anda berdasarkan format kunci dan ukuran data Anda:

  • Nomor seri saja: Penyimpanan yang efisien untuk pemeriksaan pencabutan sederhana

  • Pengidentifikasi penerbit+nomor seri: Kunci yang lebih panjang untuk lingkungan multi-CA

Untuk daftar pencabutan besar, pertimbangkan untuk menerapkan pendekatan berjenjang di mana Anda memelihara terpisah KeyValueStores untuk kategori sertifikat atau periode waktu yang berbeda.