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 Kompromissen, Richtlinienänderungen oder beendeten Beziehungen gesperrt werden müssen, benötigen Sie einen Mechanismus, um diese Zertifikate während des mTLS-Handshakes abzulehnen. CloudFront bietet zwei systemeigene Ansätze für den Widerruf von Zertifikaten, die Sie für eine mehrschichtige Steuerung kombinieren können.

  • 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 führt die Validierung automatisch während des CloudFront TLS-Handshakes durch. Die OCSP-Ergebnisse sind auch in den Verbindungsfunktionen sichtbar, sodass Sie programmatisch auf den Sperrstatus zugreifen können, um benutzerdefinierte Entscheidungen zu treffen.

  • CloudFront Funktionen und KeyValueStore — Sie verwalten eine Liste der Seriennummern für widerrufene Zertifikate in einem. CloudFront KeyValueStore Eine Verbindungsfunktion fragt KeyValueStore während des TLS-Handshakes ab und erlaubt oder verweigert die Verbindung. Dadurch haben Sie die volle Kontrolle über Sperrdaten, den Aktualisierungszeitpunkt und benutzerdefinierte Logik wie Übergangsfristen oder IP-based Ausnahmen.

Vergleich: OCSP und CloudFront Funktionen mit KeyValueStore
OCSP CloudFront Funktionen + KeyValueStore
Datenquelle OCSP-Responder der Zertifizierungsstelle Sie verwalten die Sperrliste
Aktualisierungsmechanismus Real-time Anfrage an CA Sie senden Updates an KeyValueStore
Benutzerdefinierte Logik Verfügbar über Connection Functions In Ihren Funktionscode eingebaut
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 das OCSP-Ergebnis mit zusätzlicher Logik zu versehen. So können Sie beispielsweise widerrufene Zertifikate aus vertrauenswürdigen IP-Bereichen während einer Kulanzzeit 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 Zertifikatsigniervorgangs bettet die CA eine OCSP-Responder-URL in das Zertifikat ein. Wenn ein Client während des mTLS-Handshakes sein Zertifikat vorlegt, eine OCSP-Anforderung 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 — jeweils anhand der jeweiligen OCSP-Responder-URLs. Zertifikate im Trust Store werden als Vertrauensanker behandelt und sind von der OCSP-Validierung ausgeschlossen. Dies gilt für jedes Zertifikat im Vertrauensspeicher, unabhängig davon, ob es sich um eine Stammzertifizierungsstelle oder eine Zwischenzertifikate handelt. Wenn Sie eine Zwischenzertifizierungsstelle in Ihrem Vertrauensspeicher platzieren, wird sie zu einem Vertrauensanker und die Kettenvalidierung endet an diesem Zertifikat. Nur die Zertifikate, die sich in der Kette darunter befinden, sind OCSP-validated es.

Aktivieren Sie OCSP

Aktivieren Sie OCSP in Ihrem Trust Store. Wenn diese Option aktiviert ist, führt es CloudFront automatisch eine OCSP-Validierung für jedes Client-Zertifikat durch, das eine OCSP-Responder-URL in der Erweiterung Authority Information Access (AIA) enthält. Sobald OCSP aktiviert ist, muss jedes Zertifikat in der Client-Zertifikatskette unter dem Vertrauensanker eine OCSP-URL haben. Wenn ein Zertifikat unter dem Vertrauensanker keine OCSP-URL enthält, CloudFront wird die Verbindung nicht hergestellt. Zertifikate im Vertrauensspeicher (Vertrauensanker) sind von dieser Anforderung ausgenommen.

CloudFront speichert OCSP-Antworten am Edge, 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 angezeigt wird.

OCSP führt zu Verbindungsfunktionen

Wenn eine Verbindungsfunktion für dieselbe Distribution konfiguriert ist, wird sie nach Abschluss CloudFront der OCSP-Validierung aufgerufen. Das Verbindungsobjekt enthält den OCSP-Status für das Leaf- und das Zwischenzertifikat:

{ "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, indem sie beispielsweise ein gesperrtes Zertifikat aus einem vertrauenswürdigen IP-Bereich zulässt oder ein Zertifikat verweigert, 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 einer Ausnahme für vertrauenswürdige IP-Adressen

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 des Zertifikats mit Funktionen und CloudFront KeyValueStore

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

Der Vorgang zum Widerruf von Zertifikaten funktioniert wie folgt:

  1. Speichern Sie die Seriennummern des widerrufenen Zertifikats 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 Geschäft gefunden wird, wird das Zertifikat gesperrt.

  5. Ihre Funktion verweigert die Verbindung für widerrufene 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, KeyValueStore das die Seriennummern eines widerrufenen Zertifikats enthält

  • Eine Verbindungsfunktion, die das 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 ein Formular KeyValueStore für widerrufene Zertifikate

Bereiten Sie die Seriennummern Ihres widerrufenen Zertifikats 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 des Zertifikats mit folgenden Daten vergleicht 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 Widerrufsfunktion

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 zum Testen der IP-based Logik 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 widerrufenen Zertifikaten, um sicherzustellen, dass Ihre Funktion beide Szenarien korrekt verarbeitet.

Schritt 4: Ordnen Sie die Funktion Ihrer Distribution zu

Nachdem Sie Ihre Verbindungsfunktion veröffentlicht haben, verknüpfen Sie sie mit Ihrer TLS-enabled M-Distribution, um die Überprüfung der Zertifikatssperrung zu aktivieren. Navigieren Sie zu Ihren Verteilungseinstellungen, scrollen Sie zum Abschnitt „Gegenseitige Viewer-Authentifizierung (mTLS)“, wählen Sie Ihre Verbindungsfunktion aus und speichern Sie die Änderungen.

Fortgeschrittene Sperrstrategien

Kombinieren Sie OCSP mit der Verbindungsfunktionslogik

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

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

  • Notfallzugriff — Erlauben Sie Verbindungen von bestimmten IP-Adressen aus, auch wenn OCSP den Status gesperrt meldet.

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

Beispiel Kombinierter Widerruf mit 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 eine sofortige Sperrung per KVS (keine Cacheverzögerung) sowie eine CA-authoritative Sperrung über OCSP mit benutzerdefinierter Ausnahmebehandlung dazwischen.