AppExpert

Chiffrer et déchiffrer les charges utiles XML

Vous pouvez utiliser les fonctions XML_ENCRYPT () et XML_DECRYPT () des expressions de stratégie avancées pour chiffrer et déchiffrer respectivement les données XML. Ces fonctions sont conformes à la norme W3C XML Encryption définie à “http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/.” XML_ENCRYPT () et XML_DECRYPT () prennent en charge un sous-ensemble de la spécification de chiffrement XML. Dans le sous-ensemble, le chiffrement des données utilise une méthode de chiffrement en bloc (RC4, DES3, AES128, AES192 ou AES256), et une clé publique RSA est utilisée pour chiffrer la clé de chiffrement en bloc.

Remarque : Si vous souhaitez chiffrer et déchiffrer du texte dans une charge utile, vous devez utiliser les fonctions ENCRYPT et DECRYPT. Pour plus d’informations sur ces fonctions, reportez-vous à la sectionChiffrer et déchiffrer le texte.

Les fonctions XML_ENCRYPT () et XML_DECRYPT () ne dépendent pas du service de chiffrement et de déchiffrement utilisé par les commandes ENCRYPT et DECRYPT pour le texte. La méthode de chiffrement est spécifiée explicitement en tant qu’argument de la fonction XML_ENCRYPT (). LaXML_DECRYPT() fonction obtient les informations sur la méthode de chiffrement spécifiée à partir de l’<xenc:EncryptedData>élément. Voici les synopses des fonctions de chiffrement et de déchiffrement XML :

  • qui contient le texte d’entrée chiffré et la clé de chiffrement, qui est elle-même cryptée à l’aide de RSA.XML_ENCRYPT(<certKeyName>, <method> [, <flags>])**. Returns an````
  • XML_DECRYPT(<certKeyName>). Renvoie le texte déchiffré de l’<xenc:EncryptedData>élément d’entrée, qui inclut la méthode de chiffrement et la clé chiffrée RSA.

Remarque : L’<xenc:EncryptedData>élément est défini dans la spécification W3C XML Encryption.

Voici une description des arguments :

  • CertKeyName : Sélectionne un certificat X.509 avec une clé publique RSA pour XML_ENCRYPT () ou une clé privée RSA pour XML_DECRYPT (). La clé de certificat doit avoir été précédemment créée par une commande add ssl CertKey.

  • method : Spécifie la méthode de chiffrement à utiliser pour chiffrer les données XML. Valeurs possibles : RC4, DES3, AES128, AES192, AES256.

  • flags : masque de bits spécifiant les informations de clé facultatives suivantes (<ds:KeyInfo>) à inclure dans l’élément <xenc:EncryptedData> généré par XML_ENCRYPT() :

    • 1 - Inclure un élément KeyName avec le CertKeyName. L’élément est <ds:KeyName>.
    • 2 - Inclure un élément KeyValue avec la clé publique RSA du certificat. L’élément est <ds:KeyValue>.
    • 4 - Inclure un élément X509IssuerSerial avec le numéro de série du certificat et le DN de l’émetteur. L’élément est <ds:X509IssuserSerial>.
    • 8 - Inclure un élément X509SubjectName avec le DN du sujet du certificat. L’élément est <ds:X509SubjectName>.
    • 16 - Inclure un élément X509Certificate avec le certificat entier. L’élément est <ds:X509Certificate>.

Utiliser les fonctions XML_ENCRYPT () et XML_DECRYPT () dans les expressions

La fonctionnalité de chiffrement XML utilise des paires de clés de certificat SSL pour fournir des certificats X.509 (avec des clés publiques RSA) pour le chiffrement des clés et des clés privées RSA pour le déchiffrement des clés. Par conséquent, avant d’utiliser la fonction XML_ENCRYPT () dans une expression, vous devez créer une paire de clés de certificat SSL. La commande suivante crée une paire de clés de certificat SSL, my-certkey, avec le certificat X.509, my-cert.pem, et le fichier de clé privée, my-key.pem.

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

Les commandes CLI suivantes créent des actions et des stratégies de réécriture pour chiffrer et déchiffrer le contenu XML.

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

Dans l’exemple ci-dessus, l’action de réécriture my-xml-encrypt-action chiffre l’ensemble du document XML (XPATH_WITH_MARKUP (xp%/%)) dans la requête en utilisant la méthode de chiffrement en bloc AES-256 et la clé publique RSA de my-certkey pour chiffrer la clé de chiffrement en bloc. L’action remplace le document par un élément <xenc:EncryptedData> contenant les données chiffrées et une clé chiffrée. Les drapeaux représentés par 31 incluent tous les éléments <ds:KeyInfo> optionnels.

L’action my-xml-decrypt-action déchiffre le premier élément <xenc:EncryptedData> de la réponse (XPATH_WITH_MARKUP(xp%//xenc:EncryptedData%)). Cela nécessite l’ajout préalable de l’espace de noms XML xenc à l’aide de la commande CLI suivante :

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

L’action my-xml-decrypt-action utilise la clé privée RSA dans my-certkey pour déchiffrer la clé chiffrée, puis utilise la méthode de chiffrement en bloc spécifiée dans l’élément pour déchiffrer le contenu chiffré. Enfin, l’action remplace l’élément de données chiffré par le contenu déchiffré.

La stratégie de réécriture my-xml-encrypt-policy applique my-xml-encrypt-action aux requêtes d’URL contenant xml-encrypt. L’action chiffre l’intégralité de la réponse à partir d’un service configuré sur l’appliance Citrix ADC.

La stratégie de réécriture my-xml-decrypt-policy applique my-xml-decrypt-action aux requêtes qui contiennent un élément <xenc:EncryptedData> ((XPATH (XP%//Xenc:encryptedData%) renvoie une chaîne non vide). L’action déchiffre les données chiffrées dans les demandes liées à un service configuré sur l’appliance Citrix ADC.

Chiffrer et déchiffrer les charges utiles XML