ADC

Komplexe Operationen an Text

Zusätzlich zum einfachen Zeichenfolgenabgleich können Sie Ausdrücke konfigurieren, die die Zeichenfolgenlänge und den Textblock auf Muster statt auf bestimmte Zeichenfolgen untersuchen.

Beachten Sie bei jeder textbasierten Operation Folgendes:

  • Für jede Operation, die ein Zeichenfolgenargument akzeptiert, darf die Zeichenfolge 255 Zeichen nicht überschreiten.
  • Sie können Leerraum einschließen, wenn Sie eine Zeichenfolge in einen Ausdruck angeben.

Operationen an der Länge einer Zeichenfolge

Die folgenden Operationen extrahieren Zeichenfolgen nach einer Zeichenanzahl.

Zeichenzähler-Operation Beschreibung
<text>.TRUNCATE(<count>) Gibt eine Zeichenfolge zurück, nachdem das Ende des Ziels um die Anzahl der Zeichen in abgeschnitten wurde <count>. Wenn die gesamte Zeichenfolge kürzer als ist <count>, wird nichts zurückgegeben.
<text>.TRUNCATE(<character>, <count>) Gibt eine Zeichenfolge zurück, nachdem der Text nach <character> um die in <count> angegebene Anzahl von Zeichen abgeschnitten wurde.
<text>.PREFIX(<character>, <count>) Wählt das längste Präfix im Ziel aus, das höchstens <count> Vorkommen von <character> hat.
<text>.SUFFIX(<character>, <count>) Wählt das längste Suffix im Ziel aus, das höchstens <count> Vorkommen von <character> hat. Betrachten Sie beispielsweise den folgenden Antworttext: peninsula. Der folgende Ausdruck gibt den Wert zurück sula: http.res.body(100).suffix('n',0). Der folgende Ausdruck wird zurückgegeben insula: http.res.body(100).suffix('n',1). Der folgende Ausdruck gibt den Wert zurück peninsula: http.res.body(100).suffix('n',2). Der folgende Ausdruck gibt den Wert zurück peninsula: http.res.body(100).suffix('n',3).
<text>.SUBSTR(<starting_offset>, <length>) Wählen Sie eine Zeichenfolge mit der <length>Anzahl von Zeichen aus dem Zielobjekt aus. Beginne mit dem Extrahieren der Zeichenfolge nach dem <starting_offset>. Wenn die Anzahl der Zeichen nach dem Offset unter dem Wert des Arguments <length> liegt, wählen Sie alle verbleibenden Zeichen aus.
<text>.SKIP(<character>, <count>) Wählen Sie eine Zeichenfolge aus dem Ziel aus, nachdem Sie das längste Präfix übersprungen haben, das höchstens <count> Vorkommen von <character> hat.

Operationen für einen Teil einer Zeichenfolge

In der Tabelle String-Operationen erfahren Sie, wie Sie eine Teilmenge einer größeren Zeichenfolge extrahieren, indem Sie eine der Operationen verwenden.

Operationen zum Vergleich der alphanumerischen Reihenfolge zweier Strings

Die COMPARE-Operation untersucht das erste nicht übereinstimmende Zeichen zweier verschiedener Zeichenfolgen. Diese Operation basiert auf der lexikografischen Reihenfolge, die bei der Bestellung von Begriffen in Wörterbüchern verwendet wird.

Diese Operation gibt die arithmetische Differenz zwischen den ASCII-Werten der ersten nicht übereinstimmenden Zeichen in den verglichenen Zeichenfolgen zurück. Die folgenden Unterschiede sind Beispiele:

  • Der Unterschied zwischen “abc” und “und” ist -1 (basierend auf dem dritten paarweisen Zeichenvergleich).
  • Der Unterschied zwischen “@” und “abc” beträgt -33.
  • Der Unterschied zwischen “1” und “abc” beträgt -47.

Es folgt die Syntax für die COMPARE-Operation.

<text>.COMPARE(<string>)

Extrahieren einer Ganzzahl aus einer Zeichenfolge von Bytes, die Text darstellen

In der Integer-Extraktionstabelle erfahren Sie, wie Sie eine Bytezeichenfolge behandeln, die Text als eine Folge von Bytes darstellt, 8 Bit, 16 Bit oder 32 Bit aus der Sequenz extrahiert und dann die extrahierten Bits in eine Ganzzahl konvertiert.

Konvertieren von Text in einen Hash-Wert

Sie können eine Textzeichenfolge mithilfe der HASH-Funktion in einen Hash-Wert konvertieren. Diese Funktion gibt als Ergebnis der Operation eine positive 31-Bit-Ganzzahl zurück. Es folgt das Format des Ausdrucks:

<text>.HASH

Diese Funktion ignoriert Groß- und Leerräume. Beispielsweise würden die beiden Zeichenfolgen Ab c und bc nach der Operation denselben Hash-Wert erzeugen.

Kodieren und dekodieren Sie Text durch Anwenden des Base64-Codierungsalgorithmus

Die folgenden beiden Funktionen codieren und dekodieren eine Textzeichenfolge, indem sie den Base64-Codierungsalgorithmus anwenden.

Funktion Beschreibung
text.B64ENCODE Kodiert die Textzeichenfolge (durch Text gekennzeichnet) durch Anwendung des Base64-Codierungsalgorithmus.
text.B64DECODE Dekodiert die Base64-codierte Zeichenfolge (durch Text gekennzeichnet) durch Anwendung des Base64-Decodierungsalgorithmus. Die Operation löst ein UNDEF aus, wenn Text nicht im B64-codierten Format vorliegt.

Verfeinern Sie die Suche in einer Rewrite-Aktion mithilfe der Funktion EXTEND

Die Funktion EXTEND wird in Rewrite-Aktionen verwendet, die Muster oder Mustersätze angeben und auf die Körper von HTTP-Paketen abzielen. Wenn eine Musterübereinstimmung gefunden wird, erweitert die Funktion EXTEND den Suchbereich um eine vordefinierte Anzahl von Byte auf beiden Seiten der übereinstimmenden Zeichenfolge. Ein regulärer Ausdruck kann dann verwendet werden, um Übereinstimmungen in dieser erweiterten Region neu zu schreiben. Rewrite-Aktionen, die mit der Funktion EXTEND konfiguriert sind, führen Rewrites schneller durch als Rewrite-Aktionen, bei denen ganze HTTP-Bodies nur mit regulären Ausdrücken ausgewertet werden.

Das Format der EXTEND-Funktion ist EXTEND (m, n), wobei m und n die Anzahl der Byte sind, um die der Umfang der Suche vor bzw. nach dem übereinstimmenden Muster erweitert wird. Wenn eine Übereinstimmung gefunden wird, umfasst der neue Suchbereich m Byte, die unmittelbar vor der übereinstimmenden Zeichenfolge stehen, die Zeichenfolge selbst und die n Byte, die der Zeichenfolge folgen. Ein regulärer Ausdruck kann dann verwendet werden, um einen Teil dieser neuen Zeichenfolge neu zu schreiben.

Die Funktion EXTEND kann nur verwendet werden, wenn die Rewrite-Aktion , in der sie verwendet wird, die folgenden Anforderungen erfüllt:

  • Die Suche erfolgt mithilfe von Mustern oder Mustersätzen (keine regulären Ausdrücke)
  • Die Rewriteaktion wertet nur die Körper von HTTP-Paketen aus.

Außerdem kann die Funktion EXTEND nur mit den folgenden Arten von Rewrite-Aktionen verwendet werden:

  • replace_all
  • insert_after_all
  • delete_all
  • insert_before_all

Beispielsweise möchten Sie möglicherweise alle Instanzen von “” undhttp://exampleurl.com/http://exampleurl.au/” in den ersten 1000 Byte des Körpers löschen. Zu diesem Zweck können Sie eine Rewriteaktion konfigurieren, um nach allen Instanzen der Zeichenfolge exampleurl zu suchen, den Suchbereich auf beiden Seiten der Zeichenfolge zu erweitern, wenn eine Übereinstimmung gefunden wird, und dann einen regulären Ausdruck verwenden, um das Rewrite in der erweiterten Region durchzuführen. Das folgende Beispiel erweitert den Umfang der Suche um 20 Byte nach links und 50 Byte rechts von der übereinstimmenden Zeichenfolge:

add rewrite action delurl_example delete_all 'HTTP.REQ.BODY(1000)' -pattern exampleurl -refineSearch 'extend(20,50).regex_select(re#http://exampleurl.(com|au)#)'

Konvertieren von Text in Hexadezimalformat

Die folgende Funktion wandelt Text in das Hexadezimalformat um und extrahiert die resultierende Zeichenfolge:

<text>.BLOB_TO_HEX(<string>)

Zum Beispiel wandelt diese Funktion die Bytezeichenfolge “abc” in “61:62:63” um.

Verschlüsseln und Entschlüsseln von Text

In Standard-Syntaxausdrücken können Sie die Funktionen ENCRYPT und DECRYPT verwenden, um Text zu ver- und entschlüsseln. Daten, die von der ENCRYPT-Funktion auf einer bestimmten Citrix ADC-Appliance oder einem Hochverfügbarkeitspaar (HA) verschlüsselt wurden, sind für die Entschlüsselung durch die DECRYPT-Funktion auf derselben Citrix ADC-Appliance oder demselben HA-Paar vorgesehen. Die Appliance unterstützt die Verschlüsselungsmethoden RC4, DES3, AES128, AES192 und AES256. Der für die Verschlüsselung erforderliche Schlüsselwert ist nicht vom Benutzer spezifizierbar. Wenn eine Verschlüsselungsmethode festgelegt ist, generiert die Appliance automatisch einen zufälligen Schlüsselwert, der für die angegebene Methode geeignet ist. Die Standardmethode ist die AES256-Verschlüsselung, die die sicherste und von Citrix empfohlene Verschlüsselungsmethode ist.

Sie müssen die Verschlüsselung nicht konfigurieren, es sei denn, Sie möchten die Verschlüsselungsmethode ändern oder die Appliance soll einen neuen Schlüsselwert für die aktuelle Verschlüsselungsmethode generieren.

Hinweis: Sie können auch XML-Nutzlasten verschlüsseln und entschlüsseln. Informationen zu den Funktionen zum Verschlüsseln und Entschlüsseln von XML-Nutzlasten finden Sie unter Verschlüsseln und Entschlüsseln von XML-Nutzlasten.

Verschlüsselung konfigurieren

Während des Starts führt die Appliance den Befehl set ns EncryptionParams mit standardmäßig der AES256-Verschlüsselungsmethode aus und verwendet einen zufällig generierten Schlüsselwert, der für die AES256-Verschlüsselung geeignet ist. Die Appliance verschlüsselt auch den Schlüsselwert und speichert den Befehl mit dem verschlüsselten Schlüsselwert in der Citrix ADC-Konfigurationsdatei. Daher ist die Verschlüsselungsmethode AES256 standardmäßig für die Funktionen ENCRYPT und DECRYPT aktiviert. Der Schlüsselwert, der in der Konfigurationsdatei gespeichert wird, bleibt bei Neustarts bestehen, obwohl die Appliance den Befehl bei jedem Neustart ausführt.

Sie können den Befehl set ns EncryptionParams manuell ausführen oder das Konfigurationsdienstprogramm verwenden, wenn Sie die Verschlüsselungsmethode ändern möchten oder wenn die Appliance einen neuen Schlüsselwert für die aktuelle Verschlüsselungsmethode generieren soll. Um die CLI zum Ändern der Verschlüsselungsmethode zu verwenden, legen Sie nur den Methodenparameter fest, wie in “Beispiel 1: Ändern der Verschlüsselungsmethodegezeigt. “ Wenn Sie möchten, dass die Appliance einen neuen Schlüsselwert für die aktuelle Verschlüsselungsmethode generiert, setzen Sie den Methodenparameter auf die aktuelle Verschlüsselungsmethode und den KeyValue-Parameter auf eine leere Zeichenfolge (“”), wie in “Beispiel 2: Generieren eines neuen Schlüsselwerts für die aktuelle Verschlüsselungsmethodegezeigt. “ Nachdem Sie einen neuen Schlüsselwert generiert haben, müssen Sie die Konfiguration speichern. Wenn Sie die Konfiguration nicht speichern, verwendet die Appliance den neu generierten Schlüsselwert nur bis zum nächsten Neustart, woraufhin sie auf den Schlüsselwert in der gespeicherten Konfiguration zurückkehrt.

Konfigurieren Sie die Verschlüsselung über die GUI

  1. Navigieren Sie zu System > Einstellungen.
  2. Klicken Sie im Bereich Einstellungen auf Verschlüsselungsparameter ändern .
  3. Führen Sie im Dialogfeld Verschlüsselungsparameter ändern einen der folgenden Schritte aus:
    • Um die Verschlüsselungsmethode zu ändern, wählen Sie in der Liste Methode die gewünschte Verschlüsselungsmethode aus.
    • Um einen neuen Schlüsselwert für die aktuelle Verschlüsselungsmethode zu generieren, klicken Sie auf Neuen Schlüssel für die ausgewählte Methode generieren.
  4. Klicken Sie auf OK.

Verwenden Sie die Funktionen ENCRYPT und DECRYPT

Sie können die Funktionen ENCRYPT und DECRYPT mit jedem Ausdruck-Präfix verwenden, das Text zurückgibt. Beispielsweise können Sie die Funktionen ENCRYPT und DECRYPT in Rewriterichtlinien für die Cookie-Verschlüsselung verwenden. Im folgenden Beispiel verschlüsseln die Rewrite-Aktionen ein Cookie namens MyCookie, das von einem Back-End-Dienst gesetzt wird, und entschlüsseln dasselbe Cookie, wenn es von einem Client zurückgegeben wird:

add rewrite action my-cookie-encrypt-action replace "HTTP.RES.SET_COOKIE.COOKIE("MyCookie").VALUE(0)" "HTTP.RES.SET_COOKIE.COOKIE("MyCookie").VALUE(0).ENCRYPT" -bypassSafetyCheck YES

add rewrite action my-cookie-decrypt-action replace "HTTP.REQ.COOKIE.VALUE("MyCookie")" "HTTP.REQ.COOKIE.VALUE("MyCookie").DECRYPT" -bypassSafetyCheck YES
<!--NeedCopy-->

Nachdem Sie Richtlinien für die Verschlüsselung und Entschlüsselung konfiguriert haben, speichern Sie die Konfiguration, um die Richtlinien in Kraft zu setzen.

Konfiguration des Verschlüsselungsschlüssels für die Verschlüsselung

In Standard-Syntaxausdrücken können Sie die Funktionen ENCRYPT und DECRYPT zum Ver- und Entschlüsseln von Text in einer Anforderung oder Antwort verwenden. Die von der ENCRYPT-Funktion auf einer Appliance verschlüsselten Daten (Standalone, Hochverfügbarkeit oder Cluster) sollen von derselben Appliance durch die DECRYPT-Funktion entschlüsselt werden. Die Appliance unterstützt die Verschlüsselungsmethoden RC4, DES, Triple-DES, AES92 und AES256, und jede dieser Methoden verwendet einen geheimen Schlüssel für die Verschlüsselung und Entschlüsselung von Daten. Sie können jede dieser Methoden verwenden, um Daten auf zwei Arten zu verschlüsseln und zu entschlüsseln - Selbstverschlüsselung und Verschlüsselung durch Dritte.

Die Selbstverschlüsselungsfunktion in einer Appliance (Standalone, Hochverfügbarkeit oder Cluster) verschlüsselt und entschlüsselt Daten durch Auswertung des Header-Werts. Ein Beispiel, um dies zu verstehen, ist die HTTP-Cookie-Verschlüsselung. Der Ausdruck wertet den Header aus, verschlüsselt den HTTP-Cookie-Wert im Set-Cookie-Header in der ausgehenden Antwort und entschlüsselt dann den Cookie-Wert, wenn er im Cookie-Header einer nachfolgenden eingehenden Anforderung des Clients zurückgegeben wird. Der Schlüsselwert ist nicht vom Benutzer konfigurierbar. Wenn stattdessen eine Verschlüsselungsmethode im Befehl set ns EncryptionParams konfiguriert ist, generiert die Appliance automatisch einen zufälligen Schlüsselwert für die konfigurierte Methode. Standardmäßig verwendet der Befehl die Verschlüsselungsmethode AES256, die die hochsichere Methode ist, und Citrix empfiehlt diese Methode.

Die Verschlüsselungsfunktion eines Drittanbieters verschlüsselt oder entschlüsselt Daten mit einer Drittanbieteranwendung. Beispielsweise kann ein Client Daten in einer Anforderung verschlüsseln und die Appliance entschlüsselt die Daten, bevor sie an den Back-End-Server gesendet werden oder umgekehrt. Um dies durchzuführen, müssen die Appliance und die Drittanbieteranwendung einen geheimen Schlüssel gemeinsam nutzen. Auf der Appliance können Sie den geheimen Schlüssel direkt mithilfe eines Verschlüsselungsschlüsselobjekts konfigurieren, und der Schlüsselwert wird automatisch von der Appliance für eine stärkere Verschlüsselung generiert. Derselbe Schlüssel wird manuell auf der Appliance eines Drittanbieters konfiguriert, sodass sowohl Appliance als auch Drittanbieteranwendungen denselben Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwenden können.

Hinweis: Mithilfe der Verschlüsselung von Drittanbietern können Sie auch XML-Nutzdaten verschlüsseln und entschlüsseln. Informationen zu den Funktionen zum Verschlüsseln und Entschlüsseln von XML-Nutzdaten finden Sie unter “Verschlüsseln und Entschlüsseln von XML-Nutzlasten.

Verschlüsselungsmethoden

Eine Verschlüsselungsmethode bietet zwei Funktionen: eine Verschlüsselungsfunktion, die eine Klartext-Bytesequenz in eine Chiffretext-Bytesequenz umwandelt, und eine Entschlüsselungsfunktion, die den Chiffretext zurück in den Klartext umwandelt. Verschlüsselungsmethoden verwenden Bytesequenzen, die als Schlüssel bezeichnet werden, um Verschlüsselung und Entschlüsselung durchzuführen. Verschlüsselungsmethoden, die denselben Schlüssel für die Verschlüsselung und Entschlüsselung verwenden, werden als symmetrisch bezeichnet. Verschlüsselungsmethoden, die unterschiedliche Schlüssel für die Verschlüsselung und Entschlüsselung verwenden, sind asymmetrisch. Die bemerkenswertesten Beispiele für asymmetrische Verschlüsselungen sind die Kryptographie mit öffentlichen Schlüsseln, bei der ein öffentlicher Schlüssel verwendet wird, der jedem zur Verschlüsselung zur Verfügung steht, und einen privaten Schlüssel, der nur dem Entschlüsseler bekannt ist.

Eine gute Verschlüsselungsmethode macht es unmöglich, Chiffretext zu entschlüsseln (“knacken”), wenn Sie den Schlüssel nicht besitzen. “Unmachbar” bedeutet wirklich, dass das Knacken des Verschlüsselungstextes mehr Zeit und Rechenressourcen in Anspruch nehmen würde, als es wert ist. Wenn Computer leistungsfähiger und billiger werden, werden Verschlüsselungen, die früher nicht geknackt werden konnten, praktikabler. Im Laufe der Zeit werden auch Fehler in Verschlüsselungsmethoden (oder deren Implementierungen) festgestellt, die das Knacken erleichtern. Neuere Verschlüsselungsmethoden werden daher älteren vorgezogen. Im Allgemeinen bieten Schlüssel mit längerer Länge eine bessere Sicherheit als kürzere Schlüssel, auf Kosten längerer Verschlüsselungs- und Entschlüsselungszeiten.

Eine Verschlüsselungsmethode kann Stream-Chiffren oder Blockchiffren verwenden. RC4 ist die meist gesicherte Stream-Chiffrers und wird nur für Legacy-Anwendungen verwendet. Blockchiffren können Polsterung enthalten.

Stream-Chiffren

Eine Stream-Verschlüsselungsmethode arbeitet mit einzelnen Bytes. Auf Citrix ADC -Appliances ist nur eine Stream-Verschlüsselung verfügbar: RC4, das eine Schlüssellänge von 128 Bit (16 Byte) verwendet. Für einen bestimmten Schlüssel generiert RC4 eine pseudozufällige Bytefolge, rufen Sie einen Keystream auf, der mit dem Klartext X-ored ist, um den Chiffretext zu erzeugen. RC4 gilt nicht mehr als sicher und sollte nur verwendet werden, wenn dies von älteren Anwendungen erforderlich ist.

Blockchiffren

Eine Blockchiffrierungsmethode arbeitet mit einem festen Byte-Block. Eine Citrix ADC-Appliance bietet zwei Blockchiffren: Data Encryption Standard (DES) und den Advanced Encryption Standard (AES). DES verwendet eine Blockgröße von 8 Byte und (auf einer Citrix ADC-Appliance) zwei Optionen für die Schlüssellänge: 64 Bit (8 Byte), von denen 56 Bit Daten und 8 Bit Parität sind, und Triple-DES, eine Schlüssellänge von 192 Bit (24 Byte). AES hat eine Blockgröße von 16 Byte und (auf Citrix ADC) drei Möglichkeiten für die Schlüssellänge: 128 Bit (16 Byte), 192 Bit (24 Byte) und 256 Bit (32 Byte).

Padding

Wenn der Klartext für eine Blockchiffre keine ganzzahlige Anzahl von Blöcken ist, kann das Auffüllen mit mehr Bytes erforderlich sein. Angenommen, der Klartext lautet “xyzzy” (Hex 78797a7a79). Für einen 8-Byte-Triple-DES-Block müsste dieser Wert aufgefüllt werden, um 8 Byte zu erzeugen. Das Füllschema muss es der Entschlüsselungsfunktion ermöglichen, die Länge des ursprünglichen Klartextes nach der Entschlüsselung zu bestimmen. Im Folgenden sind einige derzeit verwendete Füllschemata aufgeführt (n ist die Anzahl der hinzugefügten Byte):

  • PKCS7: Addiert jeweils n Byte Wert. Zum Beispiel 78797a7a79030303. Dies ist das Füllschema, das von der Richtlinienfunktion OpenSSL und ENCRYPT () verwendet wird. Das PKCS5-Polsterschema ist dasselbe wie bei PKCS7.
  • ANSI X.923: Addiert n-1 Nullbyte und ein letztes Byte des Wertes n. Zum Beispiel 78797a7a79000003.
  • ISO 10126: Addiert n-1 zufällige Byte und ein letztes Byte des Wertes n. Zum Beispiel 78797a7a79xxxx03, wobei xx ein beliebiger Bytewert sein kann. Die Richtlinienfunktion DECRYPT () akzeptiert dieses Füllschema, das es ihr auch ermöglicht, die Schemata PKCS7 und ANSI X.923 zu akzeptieren.
  • ISO/IEC 7816-4: Fügt ein 0x80 Byte und n-1 Nullbyte hinzu. Zum Beispiel 78797a7a79800000. Dies wird auch OneAndZeros-Polsterung genannt.
  • Null: Fügt n Nullbyte hinzu. Beispiel: 78797a7a79000000. Dies kann nur mit Klartext verwendet werden, der keine NUL-Bytes enthält.

Wenn eine Füllung verwendet wird und der Klartext eine ganzzahlige Anzahl von Blöcken ist, wird normalerweise ein zusätzlicher Block hinzugefügt, damit die Entschlüsselungsfunktion die ursprüngliche Klartext-Länge eindeutig bestimmen kann. Für PCKS7 und 8-Byte-Block wäre dies 0808080808080808.

Betriebsmodi

Es gibt eine Reihe verschiedener Betriebsmodi für Blockchiffren, die angeben, wie mehrere Klartext-Blöcke verschlüsselt werden. Einige Modi verwenden einen Initialisierungsvektor (IV), einen Datenblock außer dem Klartext, der zum Starten des Verschlüsselungsprozesses verwendet wird. Es empfiehlt sich, für jede Verschlüsselung eine andere IV zu verwenden, damit derselbe Klartext einen anderen Chiffretext erzeugt. Die IV muss nicht geheim sein und wird daher dem Chiffretext vorangestellt. Zu den Modi gehören:

  • Elektronisches Codebuch (EZB): Jeder Klartext-Block wird unabhängig verschlüsselt. Eine IV wird nicht verwendet. Das Auffüllen ist erforderlich, wenn der Klartext kein Vielfaches der Verschlüsselungsblockgröße ist. Derselbe Klartext und Schlüssel erzeugen immer denselben Chiffretext. Aus diesem Grund gilt die EZB als weniger sicher als andere Modi und sollte nur für Legacy-Anwendungen verwendet werden.
  • Cipher Block Chaining (CBC): Jeder Klartextblock wird mit dem vorherigen Chiffretext-Block oder der IV für den ersten Block xored, bevor er verschlüsselt wird. Das Auffüllen ist erforderlich, wenn der Klartext kein Vielfaches der Verschlüsselungsblockgröße ist. Dies ist der Modus, der mit der Citrix ADC EncryptionParams-Methode verwendet wird.
  • Verschlüsselungsfeedback (CFB): Der vorherige Chiffretextblock oder die IV für den ersten Block wird verschlüsselt und die Ausgabe wird mit dem aktuellen Klartext-Block XORed, um den aktuellen Chiffretext-Block zu erstellen. Die Rückkopplung kann 1 Bit, 8 Bit oder 128 Bit betragen. Da der Klartext mit dem Chiffretext XORed ist, ist kein Auffüllen erforderlich.
  • Ausgabe-Feedback (OFB): Ein Keystream wird generiert, indem die Chiffre nacheinander auf die IV angewendet wird und die Keystream-Blöcke mit dem Klartext XORing. Eine Polsterung ist nicht erforderlich.

Konfigurieren von Verschlüsselungsschlüsseln für die Verschlüsselung

Im Folgenden werden die Konfigurationsaufgaben aufgeführt, die bei der Konfiguration des Verschlüsselungsschlüssels ausgeführt

  1. Hinzufügen eines Verschlüsselungsschlüssels. Konfiguriert einen Verschlüsselungsschlüssel für eine angegebene Verschlüsselungsmethode mit einem bestimmten Schlüsselwert.
  2. Änderung eines Verschlüsselungsschlüssels. Sie können Parameter für einen konfigurierten Verschlüsselungsschlüssel bearbeiten.
  3. Einen Verschlüsselungsschlüssel aufheben. Setzt Parameter für einen konfigurierten Verschlüsselungsschlüssel auf ihre Standardwerte. Ein EncryptionKey-Wert mit dem Namen muss existieren. Setzt das Auffüllen auf DEFAULT (bestimmt durch die Methode), Löscht eine vorhandene IV, wodurch ENCRYPT () eine zufällige IV generiert. Löscht einen vorhandenen Kommentar. Die Methode und der Schlüsselwert können nicht zurückgesetzt werden.
  4. Einen Verschlüsselungsschlüssel entfernen. Löscht einen konfigurierten Verschlüsselungsschlüssel. Der Schlüssel kann keine Referenzen haben.
  5. Zeigt einen Verschlüsselungsschlüssel an. Zeigt Parameter für den konfigurierten Verschlüsselungsschlüssel oder alle konfigurierten Schlüssel an. Wenn der Name weggelassen wird, wird der Schlüsselwert nicht angezeigt.

Fügen Sie über die CLI einen Verschlüsselungsschlüssel hinzu

Geben Sie an der Eingabeaufforderung Folgendes ein:

add ns encryptionKey <name> -method <method> [-keyValue <keyvalue>][-padding (OFF | ON)] [-iv <hexstring>] -keyValue <keyvalue> [-comment <string>]

Hierbei gilt:

<method> = ( NONE | RC4 | DES3 | AES128 | AES192 | AES256 | DES | DES-CBC | DES-CFB | DES-OFB | DES-ECB | DES3-CBC | DES3-CFB | DES3-OFB | DES3-ECB | AES128-CBC | AES128-CFB | AES128-OFB | AES128-ECB | AES192-CBC | AES192-CFB | AES192-OFB | AES192-ECB | AES256-CBC | AES256-CFB | AES256-OFB | AES256-ECB ) <hexstring> = hex-encoded byte sequence
<!--NeedCopy-->

Die obigen Verschlüsselungsmethoden spezifizieren den Betriebsmodus mit CBC als Standardbetriebsmodus. Daher entsprechen die Methoden DES, DES2, AES128, AES192 und AES256 den Methoden DES-CBC, DES3-CBC, AES128-CBC, AES192-CBC und AES256-CBC.

Ändern eines Verschlüsselungsschlüssels über die CLI

Geben Sie an der Eingabeaufforderung Folgendes ein:

set ns encryptionKey <name> [-method <method>] [-keyValue <keyvalue>] [-padding ( OFF | ON )] [-iv <string>] [-comment <string>]

Einen Verschlüsselungsschlüssel über die CLI aufheben

Geben Sie an der Eingabeaufforderung Folgendes ein:

unset ns encryptionKey <name> [-padding] [-iv] [-comment]

Entfernen Sie einen Verschlüsselungsschlüssel über die CLI

Geben Sie an der Eingabeaufforderung Folgendes ein:

rm ns encryptionKey <name>

Zeigen Sie einen Verschlüsselungsschlüssel über die CLI an

Geben Sie an der Eingabeaufforderung Folgendes ein:

Beispiel:

show ns encryptionKey [<name>]

add ns encryptionKey my_key -method aes256 -keyValue 26ea5537b7e0746089476e5658f9327c0b10c3b4778c673a5b38cee182874711 –iv c2bf0b2e15c15004d6b14bcdc7e5e365
set ns encryptionKey my_key -keyValue b8742b163abcf62d639837bbee3cef9fb5842d82d00dfe6548831d2bd1d93476
unset ns encryptionKey my_key -iv
rm ns encryptionKey my_key
show ns encryptionKey my_key
Name: my_key
Method: AES256
Padding: DEFAULT
Key Value: (not disclosed)
<!--NeedCopy-->

Fügen Sie über die GUI einen Verschlüsselungsschlüssel hinzu

Navigieren Sie zu System > Verschlüsselungsschlüssel und klicken Sie auf Hinzufügen, um einen Verschlüsselungsschlüssel zu erstellen.

Ändern Sie einen Verschlüsselungsschlüssel über die GUI

Navigieren Sie zu System > Encryption Keys und klicken Sie auf Bearbeiten, um Parameter für einen konfigurierten Verschlüsselungsschlüssel zu ändern.

Entfernen Sie einen Verschlüsselungsschlüssel über die GUI

Navigieren Sie zu System > Verschlüsselungsschlüssel und klicken Sie auf Löschen.

ENCRYPT- und DECRYPT-Funktionen für die Verschlüsselung von Drittanbietern

Es folgt die ENCRYPT-Funktion, die für die Verschlüsselung von Drittanbietern verwendet wird.

ENCRYPT (encryptionKey, out_encoding)

Hierbei gilt:

Eingabedaten für die Appliance sind der zu verschlüsselnde Text

EncryptionKey: Ein optionaler Zeichenfolgenparameter, der das konfigurierte Verschlüsselungsschlüsselobjekt zur Bereitstellung der Verschlüsselungsmethode, des geheimen Schlüsselwerts und anderer Verschlüsselungsparameter angibt. Wenn diese nicht angegeben wird, verwendet die Methode den automatisch generierten Schlüsselwert, der mit dem Befehl set ns EncryptionParams verknüpft ist.

out_encoding: Dieser Wert gibt an, wie die Ausgabe codiert wird. Wenn weggelassen, wird die BASE64-Codierung verwendet.

Eingabe:

BASE64: original PEM base64-encoding: 6 bits (0..63) encoded as one ASCII character:
                  0..23 = 'A'..'Z', 24..51 = 'a'..'z', 52..61 = '0'..'9', 62 = '+', 63 = '/', '=' = pad byte.
      BASE64URL:  URL and Filename safe base64-encoding: same as BASE64 except 62 = '-', 63 = '_'
      HEX_UPPER:  Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'A'..'F'.
      HEX_LOWER:  Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'a'..'f'.
      HEX_COLONS: Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'A'..'F'; ':' between each hex byte. Matches BLOB_TO_HEX() output format
      HEX:  For input, accepts HEX_UPPER, HEX_LOWER, and HEX_COLONS format. For output, produces HEX_LOWER format
<!--NeedCopy-->

Ausgabe: Die Ausgabe ist ein Text, der mit der angegebenen Methode und dem angegebenen Schlüssel verschlüsselt und mit einer bestimmten Ausgabecodierung codiert wurde. Es fügt eine generierte IV vor dem verschlüsselten Text für Blockmethoden und -modi ein, die eine IV erfordern, und entweder wird keine IV für den EncryptionKey angegeben oder der EncryptionKey wird weggelassen.

Es folgt die DECRYPT-Funktion, die für die Entschlüsselung durch Dritte verwendet wird.

DECRYPT(encryptionKey, in_encoding)

Hierbei gilt:

Eingabedaten sind ein verschlüsselter Text mit der angegebenen Methode und Schlüssel, der mit der angegebenen Eingabecodierung codiert ist. Es wird erwartet, dass dieser Text eine generierte IV enthält, bevor der verschlüsselte Text für Blockmethoden und -modi, die eine IV erfordern, und entweder wird keine IV für den EncryptionKey angegeben oder der EncryptionKey weggelassen wird.

encryptionKey — Ein optionaler Zeichenfolgenparameter, der das konfigurierte EncryptionKey-Objekt zur Bereitstellung der Verschlüsselungsmethode, des geheimen Schlüssels und anderer Verschlüsselungsparameter angibt. Wenn nicht angegeben, werden die Methode und der automatisch generierte Schlüssel verwendet, die mit der EncryptionParams-Einstellung verknüpft sind.

in_encoding — Ein optionaler Aufzählungsparameter, der angibt, wie die Eingabe voraussichtlich codiert wird. Die Werte entsprechen der out_encoding von ENCRYPT. Wenn es weggelassen wird, wird die BASE64-Codierung erwartet.

Die Ausgabedaten sind ein uncodierter entschlüsselter Text.

Varianten und optionale Parameter

Im Folgenden sind die Varianten dieser Funktionen mit den optionalen Parametern aufgeführt:

Variante Beschreibung
ENCRYPT Verwenden Sie den Befehl EncryptionParams und den Ausgabecodierungsparameter BASE64.
ENCRYPT(out_encoding) Verwenden Sie EncryptionParams und den angegebenen Ausgabe-Kodierungsparameter.
ENCRYPT(encryptionKey) Verwenden Sie den angegebenen EncryptionKey- und BASE64-Ausgabecodierungsparameter.
ENCRYPT(encryptionKey, out_encoding) Verwenden Sie den angegebenen EncryptionKey und den Ausgabecodierungsparameter.
DECRYPT Verwenden Sie den Befehl EncryptionParams und den BASE64-Eingabecodierungsparameter
DECRYPT(out_encoding) Verwenden Sie den EncryptionParams-Befehl und den angegebenen Eingabecodierungsparameter.
DECRYPT(encryptionKey) Verwenden Sie den angegebenen EncryptionKey- und BASE64-Eingabecodierungsparameter
DECRYPT(encryptionKey, out_encoding) Verwenden Sie den angegebenen EncryptionKey und den Eingabecodierungsparameter

Konfigurieren Sie HMAC-Schlüssel

Citrix ADC-Appliances unterstützen eine Funktion Hashed Message Authentication Code (HMAC), die eine Digest-Methode oder einen Hash von Eingabetext mithilfe eines geheimen Schlüssels berechnet, der zwischen einem Nachrichtenabsender und einem Nachrichtenempfänger gemeinsam genutzt wird. Die Digest-Methode (abgeleitet von einer RFC 2104-Technik) authentifiziert den Absender und stellt sicher, dass der Nachrichteninhalt nicht verändert wurde. Wenn ein Client beispielsweise eine Nachricht mit dem freigegebenen HMAC-Schlüssel an eine Citrix ADC-Appliance sendet, verwenden erweiterte Richtlinienausdrücke (PI) die HMAC-Funktion, um den Hash-basierten Code für den ausgewählten Text zu berechnen. Wenn der Empfänger die Nachricht dann mit dem geheimen Schlüssel erhält, berechnet er den HMAC neu, indem er ihn mit dem ursprünglichen HMAC vergleicht, um festzustellen, ob die Nachricht geändert wurde. Die HMAC-Funktion wird von Standalone-Appliances und von Appliances in einer Hochverfügbarkeitskonfiguration oder in einem Cluster unterstützt. Die Verwendung ähnelt der Konfiguration eines Verschlüsselungsschlüssels.

Die Befehle add ns hmackey und set ns hmackey enthalten einen Parameter, der die Digest-Methode und den gemeinsamen geheimen Schlüssel angibt, die für die HMAC-Berechnung verwendet werden sollen.

Um einen HMAC-Schlüssel zu konfigurieren, müssen Sie Folgendes ausführen:

  1. Hinzufügen eines HMAC-Schlüssels. Konfiguriert einen HMAC-Schlüssel mit einem bestimmten Schlüsselwert.
  2. Ändern eines HMAC-Schlüssels. Ändert Parameter für einen konfigurierten HMAC-Schlüssel. Die Digest-Methode kann geändert werden, ohne den Schlüsselwert zu ändern, da die Länge des Schlüsselwerts nicht durch den Digest bestimmt wird. Es ist jedoch ratsam, beim Ändern des Digest einen neuen Schlüssel anzugeben.
  3. Einen HMAC-Schlüssel aufheben. Setzt Parameter für einen konfigurierten HMAC-Schlüssel auf ihre Standardwerte. Ein HMacKey Objekt mit dem Namen muss existieren. Der einzige Parameter, der nicht gesetzt werden kann, ist der Kommentar, der gelöscht wird.
  4. Einen HMAC-Schlüssel entfernen. Löscht einen konfigurierten Schlüssel. Der Schlüssel kann keine Referenzen haben.
  5. Zeigen Sie einen HMAC-Schlüssel an. Zeigt Parameter für den konfigurierten HMAC-Wechselstromschlüssel oder alle konfigurierten Tasten an. Wenn der Name weggelassen wird, wird der Schlüsselwert nicht angezeigt.

Konfigurieren Sie einen eindeutigen und zufälligen HMAC-Schlüssel

Sie können automatisch einen eindeutigen HMAC-Schlüssel generieren. Wenn es sich bei Ihrer Appliance um eine Clusterkonfiguration handelt, wird der HMAC-Schlüssel zu Beginn des Prozesses generiert und an alle Knoten und Paket-Engines verteilt. Dadurch wird sichergestellt, dass der HMAC-Schlüssel für alle Paket-Engines und alle Knoten im Cluster gleich ist.

Geben Sie an der Eingabeaufforderung Folgendes ein:

add ns hmacKey <your_key> -digest <digest> -keyValue <keyvalue>

Beispiel:

add ns hmacKey <name> -digest sha1 -keyValue AUTO

Hierbei gilt:

  • Die Namenssyntax ist korrekt und dupliziert nicht den Namen eines vorhandenen Schlüssels.
  • Der “AUTO” KeyValue kann in den set-Befehlen verwendet werden, um neue Schlüssel für bestehende EncrytionKey- und HMacKey-Objekte zu generieren.

Hinweis:

Die automatische Schlüsselgenerierung ist nützlich, wenn die Citrix ADC-Appliance Daten mit dem Schlüssel verschlüsselt und entschlüsselt oder einen HMAC-Schlüssel generiert und überprüft. Da der Schlüsselwert selbst bei der Anzeige bereits verschlüsselt ist, können Sie den generierten Schlüsselwert nicht zur Verwendung durch eine andere Partei abrufen.

Beispiel:

add ns hmacKey my_hmac_key -digest sha1 -keyValue 0c753c6c5ef859189cacdf95b506d02c1797407d

Die obigen Verschlüsselungsmethoden spezifizieren den Betriebsmodus mit CBC als Standardbetriebsmodus. Daher entsprechen die Methoden DES, DES2, AES128, AES192 und AES256 den Methoden DES-CBC, DES3-CBC, AES128-CBC, AES192-CBC und AES256-CBC.

Ändern eines HMAC-Schlüssels über die CLI

Dieser Befehl ändert die für einen HMAC-Schlüssel konfigurierten Parameter. Sie können den Digest ändern, ohne den Schlüsselwert zu ändern, da die Länge des Schlüsselwerts nicht durch den Digest bestimmt wird. Es ist jedoch ratsam, beim Ändern des Digest einen neuen Schlüssel anzugeben. Geben Sie an der Eingabeaufforderung Folgendes ein:

set ns hmacKey <name> [-digst <digest>] [-keyValue <keyvalue>]
[-comment <string>]

<!--NeedCopy-->

HMAC-Schlüssel über die CLI aufheben

Mit diesem Befehl werden für einen HMAC-Schlüssel konfigurierte Parameter mit ihren Standardwerten festgelegt. Ein HMacKey Objekt mit dem Namen muss existieren. Der einzige Parameter, den Sie aufheben können, ist die Kommentaroption, die gelöscht wird. Geben Sie an der Eingabeaufforderung Folgendes ein:

unset ns hmacKey <name> -comment

Entfernen Sie einen HMAC-Schlüssel über die CLI

Dieser Befehl löscht den konfigurierten Hmac-Schlüssel. Der Schlüssel kann keine Referenzen haben. Geben Sie an der Eingabeaufforderung Folgendes ein:

rm ns hmacKey <name>

Zeigen Sie einen HMAC-Schlüssel über die CLI

Geben Sie an der Eingabeaufforderung Folgendes ein:

show ns encryptionKey [<name>]

add ns hmacKey my_hmac_key -digest sha1 -keyValue 0c753c6c5ef859189cacdf95b506d02c1797407d
set ns hmacKey my_hmac_key -keyValue f348c594341a840a1f641a1cf24aa24c15eb1317
rm ns hmacKey my_hmac_key
show ns hmacKey my_hmac_key
          Name: my_hmac_key
    Digest: SHA1
    Key Value: (not disclosed)
<!--NeedCopy-->