Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pencabutan sertifikat
Ketika sertifikat perlu dicabut — karena kompromi, perubahan kebijakan, atau hubungan yang dihentikan — Anda memerlukan mekanisme untuk menolak sertifikat tersebut selama jabat tangan MTL. CloudFront menyediakan dua pendekatan asli untuk pencabutan sertifikat, dan Anda dapat menggabungkannya untuk kontrol berlapis.
-
OCSP (Online Certificate Status Protocol) — men CloudFront anyakan responder OCSP Otoritas Sertifikat Anda secara real time untuk memeriksa apakah sertifikat klien telah dicabut. Aktifkan OCSP di toko kepercayaan Anda dan CloudFront menangani validasi secara otomatis selama jabat tangan TLS. Hasil OCSP juga terlihat di Fungsi Koneksi, memberi Anda akses terprogram ke status pencabutan untuk pengambilan keputusan khusus.
-
CloudFront Fungsi dan KeyValueStore - Anda menyimpan daftar nomor seri sertifikat yang dicabut di a. CloudFront KeyValueStore Fungsi Koneksi menanyakan KeyValueStore selama jabat tangan TLS dan mengizinkan atau menolak koneksi. Ini memberi Anda kontrol penuh atas data pencabutan, waktu pembaruan, dan logika khusus seperti masa tenggang atau peng IP-based ecualian.
| OCCP | CloudFront Fungsi + KeyValueStore | |
|---|---|---|
| Sumber data | Penjawab OCSP Otoritas Sertifikat | Anda mengelola daftar pencabutan |
| Perbarui mekanisme | Real-time query ke CA | Anda mendorong pembaruan ke KeyValueStore |
| Logika kustom | Tersedia melalui Fungsi Koneksi | Dibangun ke dalam kode fungsi Anda |
| Ketergantungan eksternal | Memerlukan ketersediaan responder OCSP CA | Tidak ada ketergantungan eksternal |
| Terbaik untuk | CA yang mempertahankan responden OCSP; status real-time CA-authoritative | Self-managed pencabutan; kebijakan khusus; CA tanpa dukungan OCSP |
Anda dapat menggunakan kedua pendekatan bersama-sama. Aktifkan OCSP untuk CA-authoritative pemeriksaan pencabutan, lalu gunakan Fungsi Koneksi untuk melapisi logika tambahan di atas hasil OCSP — misalnya, mengizinkan sertifikat yang dicabut dari rentang IP tepercaya selama masa tenggang.
OCSP (Protokol Status Sertifikat Online)
OCSP adalah protokol real-time yang memeriksa status pencabutan sertifikat secara langsung dengan Otoritas Sertifikat (CA). Selama proses penandatanganan sertifikat, CA menyematkan URL responder OCSP di sertifikat. Ketika klien menunjukkan sertifikat mereka selama jabat tangan MTLS, CloudFront mengirimkan permintaan OCSP ke URL responder tertanam dan bertindak berdasarkan respons: sertifikat yang valid dilanjutkan, sertifikat yang dicabut dihentikan.
CloudFront memvalidasi seluruh rantai sertifikat — sertifikat daun dan hingga tiga sertifikat perantara — masing-masing terhadap URL responder OCSP masing-masing. Sertifikat di penyimpanan kepercayaan diperlakukan sebagai jangkar kepercayaan dan dikecualikan dari validasi OCSP. Ini berlaku untuk sertifikat apa pun di penyimpanan kepercayaan, apakah itu CA root atau CA perantara. Ketika Anda menempatkan CA perantara di penyimpanan kepercayaan Anda, itu menjadi jangkar kepercayaan dan validasi rantai berakhir pada sertifikat itu. Hanya sertifikat di bawahnya dalam rantai yang ada OCSP-validated.
Aktifkan OCSP
Aktifkan OCSP di toko kepercayaan Anda. Saat diaktifkan, CloudFront secara otomatis melakukan validasi OCSP untuk setiap sertifikat klien yang berisi URL responder OCSP dalam ekstensi Authority Information Access (AIA). Setelah OCSP diaktifkan, setiap sertifikat dalam rantai sertifikat klien di bawah jangkar kepercayaan harus memiliki URL OCSP. Jika ada sertifikat di bawah jangkar kepercayaan tidak berisi URL OCSP, CloudFront tidak membuat koneksi. Sertifikat di penyimpanan kepercayaan (trust jangkar) dikecualikan dari persyaratan ini.
CloudFront menyimpan respons OCSP di tepi untuk mengurangi waktu pulang-pergi dan melindungi dari downtime responder OCSP. Respons OCSP disimpan dalam cache selama kurang lebih 30 menit, dan status pencabutan yang diperbarui mungkin membutuhkan waktu hingga 30 menit untuk direfleksikan.
OCSP menghasilkan Fungsi Koneksi
Ketika Fungsi Koneksi dikonfigurasi pada distribusi yang sama, memanggil CloudFront nya setelah validasi OCSP selesai. Objek koneksi berisi status OCSP untuk sertifikat daun dan perantara:
{ "clientCertificate": { "certificates": { "leaf": { "subject": "CN=client.example.com, O=Example Org", "issuer": "CN=Intermediate CA, O=Example Org", "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86", "validity": { "notBefore": "2024-01-01T00:00:00Z", "notAfter": "2025-01-01T00:00:00Z" }, "sha256Fingerprint": "AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90", "ocspEndpoint": "http://ocsp.example.org" }, "intermediates": [ { "subject": "CN=Intermediate CA, O=Example Org", "issuer": "CN=Root CA, O=Example Org", "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86", "validity": { "notBefore": "2020-01-01T00:00:00Z", "notAfter": "2030-01-01T00:00:00Z" }, "sha256Fingerprint": "12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF", "ocspEndpoint": "http://ocsp.example.org" } ] }, "revocationStatus": { "chainValidity": "Valid", // "Valid" | "Invalid" | "Unknown" "certificates": { "leaf": { "method": "OCSP", // "OCSP" "status": "Good", // "Good" | "Revoked" | "Unknown" | "Error" "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86" }, "intermediates": [ { "method": "OCSP", // "OCSP" "status": "Error", // "Good" | "Revoked" | "Unknown" | "Error" "errorType": "InternalError", // "InternalError" | "OCSP response verification failed: {Type}" "serialNumber": "00:a7:30:9e:73:7b:3e:63:bd:b7:c0:7e:bf:d5:c9:86" } ] } } }, "clientIp":"127.0.0.1", "endpoint":"d123.cloudfront.net", "distributionId":"E1NXS4MQZH501R", "connectionId":"xdzQ6lJUDUt8b7OuqOD8lmzOC9HcMaXPmhH5ZdzLCZpKxqzfCPpR4A==" }
chainValidityBidangnya bisaValid,Invalid, atauUnknown. statusNilai sertifikat individu dapat berupaGood,Revoked,Unknown, atauError. Bid errorType ang berisi InternalError atau OCSP response verification
failed: {Type} ketika statusnyaError.
Fungsi Koneksi dapat mengganti hasil OCSP — misalnya, mengizinkan sertifikat yang dicabut dari rentang IP tepercaya, atau menolak sertifikat yang dilaporkan OCSP sebagai “baik” berdasarkan logika bisnis tambahan.
catatan
Bid errorType ang hanya akan hadir jika statusnya adaError.
Contoh: Penanganan OCSP kustom dengan pengecualian IP tepercaya
function connectionHandler(connection) { var revocationStatus = connection.clientCertificate.revocationStatus; var trustedIP = (connection.clientIp === "[IP_ADDRESS]"); if (revocationStatus.chainValidity === "Invalid") { if (trustedIP) { connection.allow(); } else { connection.deny(); } } else if (revocationStatus.certificates.leaf.status === "Error") { console.log(revocationStatus.certificates.leaf.errorType); connection.deny(); } else { connection.allow(); } }
Perilaku kegagalan OCSP
Ketika CloudFront tidak dapat menentukan status pencabutan sertifikat — karena responder OCSP tidak dapat dij CloudFront angkau, mengembalikan kesalahan, atau mengembalikan “tidak dikenal” — menolak koneksi secara default. Untuk menerapkan perilaku soft-fail, gunakan Fungsi Koneksi. Fungsi koneksi tidak akan dijalankan jika OCSP diaktifkan dan URL OCSP tidak ada dalam sertifikat klien. Hasil OCSP tersedia di objek koneksi, dan fungsi Anda dapat mengizinkan koneksi ketika status OCSP tidak ditentukan:
async function connectionHandler(connection) { var revocationStatus = connection.clientCertificate.revocationStatus; if (revocationStatus.certificates.leaf.status === "Error" || revocationStatus.certificates.leaf.status === "Unknown") { // OCSP responder unreachable — allow connection (soft-fail) connection.logCustomData(`OCSP_SOFT_FAIL:${revocationStatus.certificates.leaf.errorType}`); return connection.allow(); } if (revocationStatus.chainValidity === "Invalid") { return connection.deny(); } return connection.allow(); }
Pencabutan sertifikat dengan CloudFront Fungsi dan KeyValueStore
Anda dapat menggunakan CloudFront Connection Functions with KeyValueStore untuk mengimplementasikan pemeriksaan pencabutan sertifikat tanpa ketergantungan eksternal. Anda menyimpan daftar nomor seri sertifikat yang dicabut di a KeyValueStore, dan Fungsi Koneksi memeriksa setiap sertifikat klien terhadap daftar ini selama jabat tangan TLS.
Proses pencabutan sertifikat bekerja sebagai berikut:
-
Simpan nomor seri sertifikat yang dicabut di a. CloudFront KeyValueStore
-
Ketika klien menyajikan sertifikat, Fungsi Koneksi Anda dipanggil.
-
Fungsi memeriksa nomor seri sertifikat terhadap KeyValueStore.
-
Jika nomor seri ditemukan di toko, sertifikat dicabut.
-
Fungsi Anda menolak koneksi untuk sertifikat yang dicabut.
Pendekatan ini menyediakan pemeriksaan pencabutan hampir real-time di seluruh CloudFront jaringan edge global.
Untuk menerapkan pendekatan ini, Anda perlu:
-
Distribusi yang dikonfigurasi dengan MTL penampil
-
A KeyValueStore berisi nomor seri sertifikat yang dicabut
-
Fungsi Koneksi yang menanyakan KeyValueStore untuk memeriksa status sertifikat
Ketika klien terhubung, CloudFront memvalidasi sertifikat terhadap penyimpanan kepercayaan, lalu jalankan Fungsi Koneksi Anda. Fungsi Anda memeriksa nomor seri sertifikat terhadap KeyValueStore dan mengizinkan atau menolak koneksi.
Langkah 1: Buat sertifikat yang KeyValueStore dicabut
Siapkan nomor seri sertifikat yang dicabut dalam format JSON:
{ "data": [ { "key": "ABC123DEF456", "value": "" }, { "key": "789XYZ012GHI", "value": "" } ] }
Unggah file JSON ini ke bucket S3, lalu buat KeyValueStore:
aws s3 cp revoked-serials.json s3://your-bucket-name/revoked-serials.json aws cloudfront create-key-value-store \ --name revoked-serials-kvs \ --import-source '{ "SourceType": "S3", "SourceARN": "arn:aws:s3:::your-bucket-name/revoked-serials.json" }'
Tunggu KeyValueStore sampai selesai penyediaan. Periksa statusnya dengan:
aws cloudfront get-key-value-store --name "revoked-serials-kvs"
Langkah 2: Buat Fungsi Koneksi Pencabutan
Buat Fungsi Koneksi yang memeriksa nomor seri sertifikat terhadap KeyValueStore:
aws cloudfront create-connection-function \ --name "revocation-control" \ --connection-function-config file://connection-function-config.json \ --connection-function-code file://connection-function-code.txt
File konfigurasi menentukan as KeyValueStore osiasi:
{ "Runtime": "cloudfront-js-2.0", "Comment": "A function that implements revocation control via KVS", "KeyValueStoreAssociations": { "Quantity": 1, "Items": [ { "KeyValueStoreArn": "arn:aws:cloudfront::account-id:key-value-store/kvs-id" } ] } }
Contoh kode fungsi koneksi:
import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // Get client serial number from client certificate const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check KVS to see if serial number exists as a key // Remove : from the clientSerialNumber if KVS entries dont have it const serialNumberExistsInKvs = await kvsHandle.exists(clientSerialNumber.replaceAll(":", "")); // Deny connection if serial number exists in KVS if (serialNumberExistsInKvs) { console.log("Connection denied — certificate revoked"); connection.logCustomData("Connection denied — certificate revoked"); return connection.deny(); } // Allow connections that don't exist in KVS console.log("Connection allowed"); return connection.allow(); }
Langkah 3: Uji fungsi pencabutan Anda
Gunakan CloudFront konsol untuk menguji Fungsi Koneksi Anda dengan sertifikat sampel. Arahkan ke Fungsi Koneksi di konsol dan gunakan tab Tes.
-
Tempelkan sertifikat sampel dalam format PEM ke antarmuka pengujian.
-
Secara opsional menentukan alamat IP klien untuk pengujian IP-based logika.
-
Pilih fungsi U ji untuk melihat hasil eksekusi.
-
Tinjau log eksekusi untuk memverifikasi logika fungsi Anda.
Uji dengan sertifikat yang valid dan yang dicabut untuk memastikan fungsi Anda menangani kedua skenario dengan benar.
Langkah 4: Mengaitkan fungsi dengan distribusi Anda
Setelah Anda menerbitkan Fungsi Koneksi Anda, kaitkan dengan TLS-enabled distribusi m Anda untuk mengaktifkan pemeriksaan pencabutan sertifikat. Arahkan ke pengaturan distribusi Anda, gulir ke bagian “Viewer mutual authentication (MTL)”, pilih Fungsi Koneksi Anda, dan simpan perubahannya.
Strategi pencabutan lanjutan
Gabungkan OCSP dengan logika Fungsi Koneksi
Anda dapat mengaktifkan OCSP untuk pemeriksaan pen CA-authoritative cabutan dan melapisi Fungsi Koneksi di atas untuk kebijakan khusus. Fungsi Koneksi menerima hasil OCSP dan dapat menerapkan logika tambahan:
-
Masa tenggang — Izinkan sertifikat yang dicabut dari jaringan internal untuk periode tertentu selama rotasi sertifikat.
-
Akses darurat — Izinkan koneksi dari IP tertentu bahkan ketika OCSP melaporkan status dicabut.
-
Logika penol akan kustom — Blokir sertifikat yang dilaporkan OCSP sebagai “baik” berdasarkan data pencabutan Anda sendiri. KeyValueStore
contoh Pencabutan gabungan OCSP + KVS
import cf from 'cloudfront'; async function connectionHandler(connection) { var kvsHandle = cf.kvs(); var revocationStatus = connection.clientCertificate.revocationStatus; var serialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check your own revocation list first (immediate revocation, no cache delay) var inKvs = await kvsHandle.exists(serialNumber.replaceAll(":", "")); if (inKvs) { connection.logCustomData("KVS_REVOKED:" + serialNumber); return connection.deny(); } // Then check OCSP result if (revocationStatus.chainValidity === 'Valid' && revocationStatus.certificates.leaf.status === "Revoked") { // OCSP says revoked — allow grace period from trusted IPs if (connection.clientIp.startsWith("10.0.")) { connection.logCustomData("GRACE_PERIOD:" + serialNumber + ":" + connection.clientIp); return connection.allow(); } connection.logCustomData("OCSP_REVOKED:" + serialNumber); return connection.deny(); } connection.allow(); }
Pola ini memberi Anda pencabutan langsung melalui KVS (tanpa penundaan cache) ditambah CA-authoritative pencabutan melalui OCSP, dengan penanganan pengecualian khusus di antaranya.