View a markdown version of this page

Fortgeschrittene Sperrszenarien - 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.

Fortgeschrittene Sperrszenarien

Für komplexere Anforderungen an den Widerruf von Zertifikaten sollten Sie die folgenden zusätzlichen Konfigurationen in Betracht ziehen:

Konvertiert Zertifikatssperrlisten (CRL) in ein KeyValueStore Format

Wenn Sie eine CRL-Datei (Certificate Revocation List) haben, können Sie sie mit OpenSSL und jq in das KeyValueStore JSON-Format konvertieren:

CRL in ein Format konvertieren KeyValueStore

Extrahieren Sie Seriennummern aus der CRL-Datei:

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

Konvertieren Sie die Seriennummern in das KeyValueStore JSON-Format:

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

Laden Sie die formatierte Datei in S3 hoch und erstellen Sie KeyValueStore sie wie in Schritt 1 beschrieben.

Behandeln Sie mehrere Zertifizierungsstellen

Wenn Sie mehrere TrustStore Zertifizierungsstellen (CAs) haben, fügen Sie die Ausstellerinformationen in Ihre KeyValueStore Schlüssel ein, um Konflikte zwischen Zertifikaten verschiedener Zertifizierungsstellen zu vermeiden, die möglicherweise dieselbe Seriennummer haben.

Verwenden Sie für Szenarien mit mehreren Zertifizierungsstellen eine Kombination aus dem SHA1-Hash des Ausstellers und der Seriennummer als Schlüssel:

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

Wenn Sie die Emittentenkennung und die Seriennummer verwenden, werden längere Schlüssel erzeugt, wodurch sich die Gesamtzahl der Einträge, die Sie in der speichern können, verringern kann. KeyValueStore

Fügen Sie benutzerdefinierte Daten zu den Verbindungsprotokollen hinzu

Verbindungsfunktionen können mithilfe der CustomData Protokollmethode benutzerdefinierte Daten zu CloudFront Verbindungsprotokollen hinzufügen. Auf diese Weise können Sie Ergebnisse der Sperrüberprüfung, Zertifikatsinformationen oder andere relevante Daten in Ihre Protokolle aufnehmen.

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

Benutzerdefinierte Daten sind auf 800 Byte gültigen UTF-8 Textes begrenzt. Wenn Sie diesen Grenzwert überschreiten, werden die Daten bis zur nächsten gültigen UTF-8 Grenze CloudFront gekürzt.

Anmerkung

Die benutzerdefinierte Datenprotokollierung funktioniert nur, wenn Verbindungsprotokolle für Ihre Verteilung aktiviert sind. Wenn Verbindungsprotokolle nicht konfiguriert sind, ist die CustomData Protokollmethode ein No-Op.

CRL-Updates verwalten

Zertifizierungsstellen können zwei Arten von CRLs ausstellen:

  • Vollständige CRLs: Enthalten eine vollständige Liste aller widerrufenen Zertifikate

  • Delta-CRLs: Listet nur Zertifikate auf, die seit der letzten vollständigen CRL gesperrt wurden

Für vollständige CRL-Aktualisierungen erstellen Sie eine neue KeyValueStore mit den aktualisierten Daten und leiten Sie die Verknüpfung der Verbindungsfunktion auf die neue um. KeyValueStore Dieser Ansatz ist einfacher als das Berechnen von Unterschieden und das Durchführen inkrementeller Aktualisierungen.

Verwenden Sie für Delta-CRL-Aktualisierungen den Befehl update-keys, um den vorhandenen Zertifikaten neue widerrufene Zertifikate hinzuzufügen: KeyValueStore

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

Kapazität planen KeyValueStore

KeyValueStore hat eine Größenbeschränkung von 5 MB und unterstützt bis zu 10 Millionen Schlüssel-Wert-Paare. Planen Sie die Kapazität Ihrer Sperrliste auf der Grundlage Ihres Schlüsselformats und Ihrer Datengröße:

  • Nur Seriennummer: Effizienter Speicher für eine einfache Widerrufsprüfung

  • Aussteller-ID und Seriennummer: Längere Schlüssel für Umgebungen mit mehreren Zertifizierungsstellen

Bei großen Sperrlisten sollten Sie erwägen, einen abgestuften Ansatz zu implementieren, bei dem Sie KeyValueStores für verschiedene Zertifikatskategorien oder Zeiträume getrennte Zertifikate verwalten.