View a markdown version of this page

Widerruf von Zertifikaten - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Widerruf von Zertifikaten

Wenn Zertifikate aufgrund von Kompromittierungen, Richtlinienänderungen oder beendeten Beziehungen gesperrt werden müssen, benötigen Sie einen Mechanismus, mit dem diese Zertifikate während des mTLS-Handshakes zurückgewiesen werden können. CloudFront bietet zwei systemeigene Ansätze für den Widerruf von Zertifikaten, die Sie kombinieren können, um eine mehrstufige Kontrolle zu erreichen.

  • OCSP (Online Certificate Status Protocol) — CloudFront fragt den OCSP-Responder Ihrer Zertifizierungsstelle in Echtzeit ab, um zu überprüfen, ob ein Client-Zertifikat gesperrt wurde. Aktivieren Sie OCSP in Ihrem Trust Store und wickeln die Validierung während des CloudFront TLS-Handshakes automatisch ab. Die OCSP-Ergebnisse sind auch in den Verbindungsfunktionen sichtbar, sodass Sie programmgesteuert auf den Sperrstatus zugreifen können, um benutzerdefinierte Entscheidungen treffen zu können.

  • CloudFront Funktionen und KeyValueStore — Sie verwalten eine Liste mit den Seriennummern für gesperrte Zertifikate in einem. CloudFront KeyValueStore Eine Verbindungsfunktion fragt die KeyValueStore während des TLS-Handshakes ab und erlaubt oder verweigert die Verbindung. Auf diese Weise haben Sie die volle Kontrolle über Sperrdaten, den Zeitpunkt der Aktualisierung und benutzerdefinierte Logik wie Kulanzfristen oder IP-based Ausnahmen.

Vergleich: OCSP im Vergleich zu CloudFront Funktionen mit KeyValueStore
OCSP CloudFront Funktionen + KeyValueStore
Datenquelle Der OCSP-Responder der Zertifizierungsstelle Sie verwalten die Sperrliste
Mechanismus aktualisieren Real-time Anfrage an CA Sie übertragen Updates an KeyValueStore
Benutzerdefinierte Logik Verfügbar über Verbindungsfunktionen In Ihren Funktionscode integriert
Externe Abhängigkeit Erfordert die Verfügbarkeit des CA OCSP-Responders Keine externe Abhängigkeit
Am besten geeignet für Zertifizierungsstellen, die OCSP-Responder verwalten; Status in Echtzeit CA-authoritative Self-managed Widerruf; benutzerdefinierte Richtlinien; Zertifizierungsstellen ohne OCSP-Unterstützung

Sie können beide Ansätze zusammen verwenden. Aktivieren Sie OCSP für die CA-authoritative Sperrüberprüfung und verwenden Sie dann eine Verbindungsfunktion, um dem OCSP-Ergebnis zusätzliche Logik hinzuzufügen. So können Sie beispielsweise während einer Übergangszeit widerrufene Zertifikate aus vertrauenswürdigen IP-Bereichen zulassen.

OCSP (Online Certificate Status Protocol)

OCSP ist ein Echtzeitprotokoll, das den Sperrstatus eines Zertifikats direkt bei der Zertifizierungsstelle (CA) überprüft. Während des Signiervorgangs des Zertifikats bettet die CA eine OCSP-Responder-URL in das Zertifikat ein. Wenn ein Client sein Zertifikat während des mTLS-Handshakes vorlegt, eine OCSP-Anfrage an die eingebettete Responder-URL CloudFront sendet und auf die Antwort reagiert: Gültige Zertifikate werden fortgesetzt, widerrufene Zertifikate werden beendet.

CloudFront validiert die gesamte Zertifikatskette — das Leaf-Zertifikat und bis zu drei Zwischenzertifikate — jedes anhand der jeweiligen OCSP-Responder-URLs. Stammzertifikate im Trust Store sind von der OCSP-Validierung ausgeschlossen.

Aktivieren Sie OCSP

Aktivieren Sie OCSP in Ihrem Trust Store. Wenn diese Option aktiviert ist, CloudFront wird automatisch die OCSP-Validierung für jedes Client-Zertifikat durchgeführt, das in der Erweiterung Authority Information Access (AIA) eine OCSP-Responder-URL enthält. Sobald OCSP aktiviert ist, muss die gesamte Client-Zertifikatskette über eine OCSP-URL verfügen. Wenn ein Zertifikat in der Client-Zertifikatskette keine OCSP-URL enthält, CloudFront wird die Verbindung nicht hergestellt.

CloudFront speichert OCSP-Antworten am Edge im Cache, um die Round-Trip-Zeit zu reduzieren und vor Ausfallzeiten des OCSP-Responders zu schützen. OCSP-Antworten werden etwa 30 Minuten lang zwischengespeichert, und es kann bis zu 30 Minuten dauern, bis der aktualisierte Sperrstatus übernommen wird.

OCSP führt zu Verbindungsfunktionen

Wenn eine Verbindungsfunktion auf derselben Distribution konfiguriert ist, wird sie nach Abschluss der OCSP-Validierung CloudFront aufgerufen. Das Verbindungsobjekt enthält den OCSP-Status für die Blatt- und Zwischenzertifikate:

{ "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==" }

Das chainValidity Feld kann ValidInvalid, oder Unknown sein. Einzelne status Zertifikatswerte könnenGood, RevokedUnknown, oder seinError. Das errorType Feld enthält InternalError oderOCSP response verification failed: {Type}, wenn der Status lautetError.

Die Verbindungsfunktion kann das OCSP-Ergebnis außer Kraft setzen. Sie kann beispielsweise ein widerrufenes Zertifikat aus einem vertrauenswürdigen IP-Bereich zulassen oder ein Zertifikat verweigern, das OCSP aufgrund zusätzlicher Geschäftslogik als „gut“ meldet.

Anmerkung

Das errorType Feld ist nur vorhanden, wenn der Status lautet. Error

Beispiel: Benutzerdefinierte OCSP-Behandlung mit vertrauenswürdiger IP-Ausnahme

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

OCSP-Fehlerverhalten

Wenn der Sperrstatus eines Zertifikats CloudFront nicht ermittelt werden kann — weil der OCSP-Responder nicht erreichbar ist, einen Fehler zurückgibt oder „unbekannt“ zurückgibt — wird die Verbindung standardmäßig CloudFront verweigert. Verwenden Sie eine Verbindungsfunktion, um ein Soft-Fail-Verhalten zu implementieren. Verbindungsfunktionen werden nicht ausgeführt, wenn OCSP aktiviert ist und die OCSP-URL in den Client-Zertifikaten fehlt. Das OCSP-Ergebnis ist im Verbindungsobjekt verfügbar, und Ihre Funktion kann Verbindungen zulassen, wenn der OCSP-Status unbestimmt ist:

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

Widerruf von Zertifikaten mit Funktionen und CloudFront KeyValueStore

Sie können CloudFront Verbindungsfunktionen mit verwenden KeyValueStore , um die Überprüfung des Zertifikatswiderrufs ohne externe Abhängigkeit zu implementieren. Sie verwalten eine Liste mit Seriennummern für gesperrte Zertifikate in a KeyValueStore, und Ihre Verbindungsfunktion überprüft jedes Client-Zertifikat während des TLS-Handshakes anhand dieser Liste.

Der Prozess zum Widerruf von Zertifikaten funktioniert wie folgt:

  1. Speichern Sie die Seriennummern widerrufener Zertifikate in einem CloudFront KeyValueStore.

  2. Wenn ein Client ein Zertifikat vorlegt, wird Ihre Verbindungsfunktion aufgerufen.

  3. Die Funktion vergleicht die Seriennummer des Zertifikats mit der KeyValueStore.

  4. Wenn die Seriennummer im Speicher gefunden wird, wird das Zertifikat gesperrt.

  5. Ihre Funktion verweigert die Verbindung für gesperrte Zertifikate.

Dieser Ansatz ermöglicht eine Sperrüberprüfung nahezu in Echtzeit im gesamten globalen Edge-Netzwerk CloudFront.

Um diesen Ansatz zu implementieren, benötigen Sie:

  • Eine mit Viewer-MTLS konfigurierte Distribution

  • A, das KeyValueStore die Seriennummern des gesperrten Zertifikats enthält

  • Eine Verbindungsfunktion, die abfragt, KeyValueStore um den Zertifikatsstatus zu überprüfen

Wenn ein Client eine Verbindung herstellt, CloudFront validiert er das Zertifikat anhand des Vertrauensspeichers und führt dann Ihre Verbindungsfunktion aus. Ihre Funktion vergleicht die Seriennummer des Zertifikats mit der KeyValueStore und erlaubt oder verweigert die Verbindung.

Schritt 1: Erstellen Sie eine KeyValueStore für widerrufene Zertifikate

Bereiten Sie die Seriennummern Ihrer widerrufenen Zertifikate im JSON-Format vor:

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

Laden Sie diese JSON-Datei in einen S3-Bucket hoch und erstellen Sie dann: 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" }'

Warten Sie KeyValueStore , bis die Bereitstellung abgeschlossen ist. Überprüfen Sie den Status mit:

aws cloudfront get-key-value-store --name "revoked-serials-kvs"

Schritt 2: Erstellen Sie die Sperrverbindungsfunktion

Erstellen Sie eine Verbindungsfunktion, die die Seriennummern von Zertifikaten anhand folgender Werte überprüft 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

Die Konfigurationsdatei spezifiziert die KeyValueStore Zuordnung:

{ "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" } ] } }

Beispiel für einen Verbindungsfunktionscode:

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

Schritt 3: Testen Sie Ihre Sperrfunktion

Verwenden Sie die CloudFront Konsole, um Ihre Verbindungsfunktion mit Beispielzertifikaten zu testen. Navigieren Sie in der Konsole zur Verbindungsfunktion und verwenden Sie die Registerkarte Test.

  • Fügen Sie ein Beispielzertifikat im PEM-Format in die Testoberfläche ein.

  • Geben Sie optional eine Client-IP-Adresse für die IP-based Testlogik an.

  • Wählen Sie Testfunktion, um die Ausführungsergebnisse zu sehen.

  • Überprüfen Sie die Ausführungsprotokolle, um Ihre Funktionslogik zu überprüfen.

Testen Sie sowohl mit gültigen als auch mit gesperrten Zertifikaten, um sicherzustellen, dass Ihre Funktion beide Szenarien korrekt verarbeitet.

Schritt 4: Ordnen Sie die Funktion Ihrer Distribution zu

Sobald Sie Ihre Verbindungsfunktion veröffentlicht haben, verknüpfen Sie sie mit Ihrer TLS-enabled M-Distribution, um die Überprüfung des Zertifikatswiderrufs zu aktivieren. Navigieren Sie zu Ihren Vertriebseinstellungen, scrollen Sie zum Abschnitt „Viewer Mutual Authentication (mTLS)“, wählen Sie Ihre Verbindungsfunktion aus und speichern Sie die Änderungen.

Fortgeschrittene Widerrufsstrategien

Kombinieren Sie OCSP mit der Logik der Verbindungsfunktionen

Sie können OCSP für die CA-authoritative Sperrprüfung aktivieren und eine Verbindungsfunktion für benutzerdefinierte Richtlinien hinzufügen. Die Verbindungsfunktion empfängt das OCSP-Ergebnis und kann zusätzliche Logik anwenden:

  • Übergangsfristen — Erlauben Sie während der Zertifikatsrotation für einen bestimmten Zeitraum widerrufene Zertifikate aus internen Netzwerken.

  • Notfallzugriff — Erlaubt Verbindungen von bestimmten IP-Adressen aus, auch wenn OCSP den Status „Widerrufen“ meldet.

  • Benutzerdefinierte Ablehnungslogik — Blockieren Sie Zertifikate, die OCSP auf der Grundlage Ihrer eigenen Sperrdaten in als „gut“ meldet. KeyValueStore

Beispiel Kombinierter Widerruf durch OCSP und 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(); }

Dieses Muster ermöglicht den sofortigen Widerruf über KVS (ohne Cache-Verzögerung) sowie den CA-authoritative Widerruf über OCSP, mit einer benutzerdefinierten Ausnahmebehandlung dazwischen.