ADC

Verschlüsseln und Entschlüsseln von XML-Nutzdaten

Sie können die Funktionen XML_ENCRYPT () und XML_DECRYPT () in erweiterten Richtlinienausdrücken verwenden, um XML-Daten zu verschlüsseln bzw. zu entschlüsseln. Diese Funktionen entsprechen dem unter “definierten W3C-XML-Verschlüsselungsstandardhttp://www.w3.org/TR/2001/PR-xmldsig-core-20010820/. “ XML_ENCRYPT () und XML_DECRYPT () unterstützen eine Teilmenge der XML Encryption Spezifikation. In der Teilmenge verwendet die Datenverschlüsselung eine Massenverschlüsselungsmethode (RC4, DES3, AES128, AES192 oder AES256), und ein öffentlicher RSA-Schlüssel wird verwendet, um den Massenverschlüsselungsschlüssel zu verschlüsseln.

Hinweis: Wenn Sie Text in einer Nutzlast verschlüsseln und entschlüsseln möchten, müssen Sie die Funktionen ENCRYPT und DECRYPT verwenden. Weitere Informationen zu diesen Funktionen finden Sie unter Verschlüsseln und Entschlüsseln von Text.

Die Funktionen XML_ENCRYPT() und XML_DECRYPT() sind nicht abhängig vom Verschlüsselungs- und Entschlüsselungsdienst, der von den Befehlen ENCRYPT und DECRYPT für Text verwendet wird. Die Verschlüsselungsmethode wird explizit als Argument für die Funktion XML_ENCRYPT () angegeben. Die Funktion XML_DECRYPT() erhält die Informationen über die angegebene Verschlüsselungsmethode aus dem Element <xenc:EncryptedData>. Im Folgenden finden Sie eine Zusammenfassung der XML-Verschlüsselungs- und Entschlüsselungsfunktionen:

  • Das Element XML_ENCRYPT(<certKeyName>, <method> [, <flags>])**. Returns an <xenc:EncryptedData>, das den verschlüsselten Eingabetext und den Verschlüsselungsschlüssel enthält, der selbst wiederum mit RSA verschlüsselt wird.
  • XML_DECRYPT(<certKeyName>). Gibt den entschlüsselten Text aus dem Eingabeelement <xenc:EncryptedData> zurück, das die Verschlüsselungsmethode und den RSA-verschlüsselten Schlüssel enthält.

Hinweis: Das Element <xenc:EncryptedData> ist in der W3C XML Encryption Spezifikation definiert.

Es folgen Beschreibungen der Argumente:

  • certKeyName: Wählt ein X.509-Zertifikat mit einem öffentlichen RSA-Schlüssel für XML_ENCRYPT () oder einen privaten RSA-Schlüssel für XML_DECRYPT (). Der Zertifikatschlüssel muss zuvor durch den Befehl add ssl certKey erstellt worden sein.

  • Methode: Gibt an, welche Verschlüsselungsmethode für die Verschlüsselung der XML-Daten verwendet werden soll. Mögliche Werte: RC4, DES3, AES128, AES192, AES256.

  • flags: Eine Bitmaske, die die folgenden optionalen Schlüsselinformationen (<ds:KeyInfo>) angibt, die in das Element <xenc:EncryptedData> aufgenommen werden sollen, das von XML_ENCRYPT() generiert wird:

    • 1 - Fügen Sie ein KeyName-Element in den certKeyName ein. Das Element ist <ds:KeyName>.
    • 2 - Fügen Sie ein KeyValue-Element mit dem öffentlichen RSA-Schlüssel aus dem Zertifikat ein. Das Element ist <ds:KeyValue>.
    • 4 - Fügen Sie ein X509IssuerSerial-Element mit der Seriennummer des Zertifikats und dem Aussteller-DN hinzu. Das Element ist <ds:X509IssuserSerial>.
    • 8 - Fügen Sie ein x509SubjectName-Element mit dem Betreff-DN des Zertifikats ein. Das Element ist <ds:X509SubjectName>.
    • 16 - Fügen Sie dem gesamten Zertifikat ein X509Certificate-Element bei. Das Element ist <ds:X509Certificate>.

Verwenden Sie die Funktionen XML_ENCRYPT () und XML_DECRYPT () in Ausdrücken

Die XML-Verschlüsselungsfunktion verwendet SSL-Zertifikatschlüsselpaare, um X.509-Zertifikate (mit öffentlichen RSA-Schlüsseln) für die Schlüsselverschlüsselung und private RSA-Schlüssel für die Schlüsselentschlüsselung bereitzustellen. Bevor Sie die Funktion XML_ENCRYPT () in einem Ausdruck verwenden, müssen Sie daher ein SSL-Zertifikatschlüsselpaar erstellen. Der folgende Befehl erstellt ein SSL-Zertifikatschlüsselpaar, mein-certkey, mit dem X.509-Zertifikat, my-cert.pem, und der privaten Schlüsseldatei my-key.pem.

add ssl certKey my-certkey -cert my-cert.pem -key my-key.pem -passcrypt kxPeMRYnitY=

Die folgenden CLI-Befehle erstellen Rewrite-Aktionen und Richtlinien zum Verschlüsseln und Entschlüsseln von XML-Inhalten.

add rewrite action my-xml-encrypt-action replace "HTTP.RES.BODY(10000).XPATH_WITH_MARKUP(xp%/%)" "HTTP.RES.BODY(10000).XPATH_WITH_MARKUP(xp%/%).XML_ENCRYPT("my-certkey", AES256, 31)"

add rewrite action my-xml-decrypt-action replace "HTTP.REQ.BODY(10000).XPATH_WITH_MARKUP(xp%//xenc:EncryptedData%)" "HTTP.REQ.BODY(10000).XPATH_WITH_MARKUP(xp%//xenc:EncryptedData%).XML_DECRYPT("my-certkey")"

add rewrite policy my-xml-encrypt-policy "HTTP.REQ.URL.CONTAINS("xml-encrypt")" my-xml-encrypt-action

add rewrite policy my-xml-decrypt-policy "HTTP.REQ.BODY(10000).XPATH(xp%boolean(//xenc:EncryptedData)%)" my-xml-decrypt-action

bind rewrite global my-xml-encrypt-policy 30

bind rewrite global my-xml-decrypt-policy 30
<!--NeedCopy-->

Im obigen Beispiel verschlüsselt die Rewriteaktion my-xml-encrypt-action das gesamte XML-Dokument (XPATH_WITH_MARKUP (xp%/%)) in der Anforderung, indem die Massenverschlüsselungsmethode AES-256 und der öffentliche RSA-Schlüssel von my-certkey verwendet werden, um den Massenverschlüsselungsschlüssel zu verschlüsseln. Die Aktion ersetzt das Dokument durch ein <xenc:EncryptedData> Element, das die verschlüsselten Daten und einen verschlüsselten Schlüssel enthält. Die durch 31 dargestellten Flaggen enthalten alle optionalen <ds:KeyInfo> Elemente.

Die Aktion my-xml-decrypt-action entschlüsselt das erste <xenc:EncryptedData> Element in der Antwort (XPATH_WITH_MARKUP (xp%//XENC:EncryptedData%)). Dies erfordert das vorherige Hinzufügen des XENC-XML-Namespace mithilfe des folgenden CLI-Befehls:

add ns xmlnamespace xenc http://www.w3.org/2001/04/xmlenc#

Die Aktion my-xml-decrypt-action verwendet den privaten RSA-Schlüssel in my-certkey, um den verschlüsselten Schlüssel zu entschlüsseln, und verwendet dann die im Element angegebene Massenverschlüsselungsmethode, um den verschlüsselten Inhalt zu entschlüsseln. Schließlich ersetzt die Aktion das verschlüsselte Datenelement durch den entschlüsselten Inhalt.

Die Rewriterichtlinie von my-xml-encrypt-policy wendet meine-xml-encrypt-action auf Anfragen nach URLs an, die xml-encrypt enthalten. Die Aktion verschlüsselt die gesamte Antwort eines auf der NetScaler-Appliance konfigurierten Dienstes.

Die Rewriterichtlinie my-xml-decrypt-policy wendet my-xml-decrypt-action auf Anfragen an, die ein <xenc:EncryptedData> Element enthalten (XPATH (xp%//xenc:EncryptedData%) gibt eine nicht leere Zeichenfolge zurück). Die Aktion entschlüsselt die verschlüsselten Daten in Anforderungen, die für einen Dienst gebunden sind, der auf der NetScaler-Appliance konfiguriert ist.

Verschlüsseln und Entschlüsseln von XML-Nutzdaten