XML-Nutzlasten verschlüsseln und entschlüsseln

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 W3C XML Encryption Standard, der unter http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/ definiert ist. XML_ENCRYPT () und XML_DECRYPT () unterstützen eine Teilmenge der XML-Verschlüsselungsspezifikation. In der Teilmenge verwendet die Datenverschlüsselung eine Massenverschlüsselungsmethode (RC4, DES3, AES128, AES192 oder AES256), und ein öffentlicher RSA-Schlüssel wird zum Verschlüsseln des Bulk-Chiffrierschlüssels verwendet.

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

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 Synopsen der XML-Verschlüsselungs- und Entschlüsselungsfunktionen:

  • Element XML_ENCRYPT(<certKeyName>, <method> [, <flags>])**. Returns an<xenc:EncryptedData>, das den verschlüsselten Eingabetext und den Verschlüsselungsschlüssel enthält, der selbst mithilfe von 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.

Im Folgenden sind 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 mit dem 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 mit dem CertKeyName. 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 Zertifikatsseriennummer und dem Aussteller-DN ein. Das Element ist <ds:X509IssuserSerial>.
    • 8 - Fügen Sie ein X509SubjectName-Element mit dem Zertifikat-Subjekt-DN ein. Das Element ist <ds:X509SubjectName>.
    • 16 - Fügen Sie ein X509Certificate-Element in das gesamte Zertifikat ein. Das Element ist <ds:X509Certificate>.

Verwenden der 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. Mit dem folgenden Befehl wird das SSL-Zertifikatschlüsselpaar my-certkey mit dem X.509-Zertifikat my-cert.pem und der privaten Schlüsseldatei my-key.pem erstellt.

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

Die folgenden CLI-Befehle erstellen Umschreibaktionen 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)" -bypassSafetyCheck YES

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")" -bypassSafetyCheck YES

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

Im obigen Beispiel verschlüsselt die Rewrite-Aktion my-xml-encrypt-action das gesamte XML-Dokument (XPATH_WITH_MARKUP (xp%/%)) in der Anforderung mit der AES-256-Massenverschlüsselungsmethode und des öffentlichen RSA-Schlüssels von my-certkey zum Verschlüsseln des Massenverschlüsselungsschlüssels. Die Aktion ersetzt das Dokument durch ein<xenc:EncryptedData> Element, das die verschlüsselten Daten und einen verschlüsselten Schlüssel enthält. Die Flags, die durch 31 dargestellt werden, 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 Rewrite-Richtlinie my-xml-encrypt-policy wendet my-xml-encrypt-action auf Anfragen für URLs an, die xml-encrypt enthalten. Die Aktion verschlüsselt die gesamte Antwort eines auf der Citrix ADC Appliance konfigurierten Dienstes.

Die Rewrite-Richtlinie my-xml-decrypt-policy wendet my-xml-decrypt-action auf Anforderungen 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 Citrix ADC Appliance konfiguriert ist.

XML-Nutzlasten verschlüsseln und entschlüsseln