

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.

# Erweiterte Sperrszenarien
<a name="advanced-revocation-scenarios"></a>

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

**Topics**
+ [Konvertiert Zertifikatssperrlisten (CRL) in ein KeyValueStore Format](#convert-crl-kvs-format)
+ [Behandeln Sie mehrere Zertifizierungsstellen](#handle-multiple-cas)
+ [Fügen Sie benutzerdefinierte Daten zu Verbindungsprotokollen hinzu](#add-custom-data-logs)
+ [CRL-Updates verwalten](#manage-crl-updates)
+ [Kapazität planen KeyValueStore](#plan-kvs-capacity)

## Konvertiert Zertifikatssperrlisten (CRL) in ein KeyValueStore Format
<a name="convert-crl-kvs-format"></a>

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 umwandeln 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
```

Konvertiere 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 auf S3 hoch und erstellen Sie KeyValueStore sie wie in Schritt 1 beschrieben.

## Behandeln Sie mehrere Zertifizierungsstellen
<a name="handle-multiple-cas"></a>

Wenn Sie TrustStore mehrere Zertifizierungsstellen (CAs) haben, nehmen Sie die Ausstellerinformationen in Ihre KeyValueStore Schlüssel auf, um Konflikte zwischen Zertifikaten verschiedener Hersteller zu vermeiden CAs , 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**  
Durch die Verwendung von Issuer Identifier \$1 Seriennummer werden längere Schlüssel erzeugt, wodurch sich die Gesamtzahl der Einträge, die Sie darin speichern können, verringern kann. KeyValueStore

## Fügen Sie benutzerdefinierte Daten zu Verbindungsprotokollen hinzu
<a name="add-custom-data-logs"></a>

Verbindungsfunktionen können mithilfe logCustomData dieser Methode benutzerdefinierte Daten zu CloudFront Verbindungsprotokollen hinzufügen. Auf diese Weise können Sie Ergebnisse der Sperrprü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 an gültigem UTF-8-Text begrenzt. Wenn Sie diese Grenze überschreiten, werden die Daten bis zur nächsten CloudFront gültigen UTF-8-Grenze gekürzt.

**Anmerkung**  
Die benutzerdefinierte Datenprotokollierung funktioniert nur, wenn Verbindungsprotokolle für Ihre Distribution aktiviert sind. Wenn Verbindungsprotokolle nicht konfiguriert sind, ist die logCustomData Methode ein No-Op.

## CRL-Updates verwalten
<a name="manage-crl-updates"></a>

Zertifizierungsstellen können zwei Arten von CRLs ausstellen:
+ ** CRLsVollständig**: Enthält eine vollständige Liste aller widerrufenen Zertifikate
+ **Delta CRLs**: Listet nur Zertifikate auf, die seit der letzten vollständigen Zertifikatsperrliste gesperrt wurden

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

Verwenden Sie für Delta-CRL-Updates 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
<a name="plan-kvs-capacity"></a>

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 einfache Sperrprüfungen
+ **Aussteller-ID \$1 Seriennummer**: Längere Schlüssel für Umgebungen mit mehreren Zertifizierungsstellen

Bei umfangreichen Sperrlisten sollten Sie die Implementierung eines mehrstufigen Ansatzes in Betracht ziehen, bei dem Sie unterschiedliche KeyValueStores Zertifikatskategorien oder Zeiträume verwalten.