View a markdown version of this page

Pencabutan sertifikat - Amazon CloudFront

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 mTLS. CloudFront menyediakan dua pendekatan asli untuk pencabutan sertifikat, dan Anda dapat menggabungkannya untuk kontrol berlapis.

  • OCSP (Online Certificate Status Protocol) — CloudFront menanyakan responden OCSP Otoritas Sertifikat Anda secara real time untuk memeriksa apakah sertifikat klien telah dicabut. Aktifkan OCSP di toko kepercayaan Anda dan CloudFront tangani 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 file. CloudFront KeyValueStore Fungsi Koneksi menanyakan KeyValueStore selama jabat tangan TLS dan memungkinkan atau menyangkal koneksi. Ini memberi Anda kontrol penuh atas data pencabutan, waktu pembaruan, dan logika khusus seperti masa tenggang atau IP-based pengecualian.

Perbandingan: OCSP vs Fungsi CloudFront dengan KeyValueStore
OCSP CloudFront Fungsi + KeyValueStore
Sumber data Responden OCSP Otoritas Sertifikat Anda mengelola daftar pencabutan
Mekanisme pembaruan Real-time query ke CA Anda mendorong pembaruan ke KeyValueStore
Logika khusus Tersedia melalui Fungsi Koneksi Dibangun ke dalam kode fungsi Anda
Ketergantungan eksternal Membutuhkan ketersediaan responden CA OCSP Tidak ada ketergantungan eksternal
Terbaik untuk CA yang mempertahankan responden OCSP; status waktu nyata CA-authoritative Self-managed pencabutan; kebijakan khusus; CA tanpa dukungan OCSP

Anda dapat menggunakan kedua pendekatan bersama-sama. Aktifkan OCSP untuk pemeriksaan CA-authoritative 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 Certificate Authority (CA). Selama proses penandatanganan sertifikat, CA menyematkan URL responden OCSP dalam sertifikat. Ketika klien menunjukkan sertifikat mereka selama jabat tangan mTLS, CloudFront mengirimkan permintaan OCSP ke URL responder yang disematkan 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 responden OCSP masing-masing. Sertifikat root di trust store dikecualikan dari validasi OCSP.

Aktifkan OCSP

Aktifkan OCSP di toko kepercayaan Anda. Ketika 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, seluruh rantai sertifikat klien harus memiliki URL OCSP. Jika sertifikat apa pun dalam rantai sertifikat klien tidak berisi URL OCSP, tidak CloudFront akan membuat koneksi.

CloudFront menyimpan respons OCSP di tepi untuk mengurangi waktu pulang pergi dan melindungi terhadap waktu henti responden OCSP. Respons OCSP di-cache selama sekitar 30 menit, dan status pencabutan yang diperbarui dapat memakan waktu hingga 30 menit untuk tercermin.

Hasil OCSP dalam Fungsi Koneksi

Ketika Fungsi Koneksi dikonfigurasi pada distribusi yang sama, CloudFront memanggilnya 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==" }

chainValidityBidang bisaValid,Invalid, atauUnknown. statusNilai sertifikat individu dapat berupaGood,Revoked,Unknown, atauError. errorTypeBidang berisi InternalError atau OCSP response verification failed: {Type} kapan 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

errorTypeBidang hanya akan hadir jika statusnyaError.

Contoh: Penanganan OCSP khusus 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 responden OCSP tidak dapat dijangkau, mengembalikan kesalahan, atau mengembalikan “tidak dikenal” — menolak koneksi secara default. CloudFront Untuk mengimplementasikan 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 Fungsi CloudFront Koneksi dengan KeyValueStore untuk mengimplementasikan pemeriksaan pencabutan sertifikat tanpa ketergantungan eksternal. Anda menyimpan daftar nomor seri sertifikat yang dicabut di KeyValueStore, dan Fungsi Koneksi Anda memeriksa setiap sertifikat klien terhadap daftar ini selama jabat tangan TLS.

Proses pencabutan sertifikat berfungsi sebagai berikut:

  1. Simpan nomor seri sertifikat yang telah dicabut di file. CloudFront KeyValueStore

  2. Ketika klien menyajikan sertifikat, Fungsi Koneksi Anda dipanggil.

  3. Fungsi memeriksa nomor seri sertifikat terhadap KeyValueStore.

  4. Jika nomor seri ditemukan di toko, sertifikat dicabut.

  5. Fungsi Anda menolak koneksi untuk sertifikat yang dicabut.

Pendekatan ini memberikan pengecekan pencabutan hampir real-time di seluruh jaringan edge global CloudFront.

Untuk menerapkan pendekatan ini, Anda perlu:

  • Distribusi yang dikonfigurasi dengan mTL penampil

  • Sebuah KeyValueStore berisi nomor seri sertifikat yang dicabut

  • Fungsi Koneksi yang menanyakan status sertifikat KeyValueStore untuk memeriksa

Saat klien terhubung, CloudFront validasi sertifikat terhadap trust store, lalu jalankan Fungsi Koneksi Anda. Fungsi Anda memeriksa nomor seri sertifikat terhadap KeyValueStore dan mengizinkan atau menolak koneksi.

Langkah 1: Buat sertifikat KeyValueStore yang dicabut

Siapkan nomor seri sertifikat yang telah 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 hingga penyediaan selesai. 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 KeyValueStore asosiasi:

{ "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 Uji.

  • Tempelkan sertifikat sampel dalam format PEM ke antarmuka pengujian.

  • Secara opsional menentukan alamat IP klien untuk IP-based logika pengujian.

  • Pilih fungsi Uji untuk melihat hasil eksekusi.

  • Tinjau log eksekusi untuk memverifikasi logika fungsi Anda.

Uji dengan sertifikat yang valid dan dicabut untuk memastikan fungsi Anda menangani kedua skenario dengan benar.

Langkah 4: Kaitkan fungsi ke distribusi Anda

Setelah Anda mempublikasikan Fungsi Koneksi, kaitkan dengan TLS-enabled distribusi m Anda untuk mengaktifkan pemeriksaan pencabutan sertifikat. Arahkan ke pengaturan distribusi Anda, gulir ke bagian “Viewer mutual authentication (mTLS)”, pilih Fungsi Koneksi Anda, dan simpan perubahannya.

Strategi pencabutan lanjutan

Gabungkan OCSP dengan logika Fungsi Koneksi

Anda dapat mengaktifkan OCSP untuk pemeriksaan CA-authoritative pencabutan 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 jangka waktu tertentu selama rotasi sertifikat.

  • Akses darurat — Izinkan koneksi dari IP tertentu bahkan ketika OCSP melaporkan status dicabut.

  • Logika penolakan khusus - 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.