ADC

Crypter et décrypter les charges utiles XML

Vous pouvez utiliser les fonctions XML_ENCRYPT () et XML_DECRYPT () dans les 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 à l’adresse “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 XML Encryption. 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, voir Chiffrer et déchiffrer du 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 (). La XML_DECRYPT() fonction obtient les informations relatives à la méthode de chiffrement spécifiée à partir de l’ <xenc:EncryptedData> élément. Voici des synopsis des fonctions de chiffrement et de déchiffrement XML :

  • XML_ENCRYPT(<certKeyName>, <method> [, <flags>])**. Returns an <xenc:EncryptedData> qui contient le texte d’entrée chiffré et la clé de chiffrement, qui est elle-même chiffrée à l’aide de RSA.
  • 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é créée au préalable par une add ssl certKey commande.

  • 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 clés facultatives suivantes (<ds:KeyInfo>) à inclure dans l’ <xenc:EncryptedData> élément généré par XML_ENCRYPT() :

    • 1 - Incluez un élément KeyName avec le CertKeyName. L’élément est <ds:KeyName>.
    • 2 - Incluez un élément KeyValue avec la clé publique RSA du certificat. L’élément est <ds:KeyValue>.
    • 4 - Incluez un élément X509IssuerSerial avec le numéro de série du certificat et le nom unique de l’émetteur. L’élément est <ds:X509IssuserSerial>.
    • 8 - Inclut un élément X509SubjectName avec le nom unique de l’objet du certificat. L’élément est <ds:X509SubjectName>.
    • 16 - Incluez un élément X509Certificate avec l’intégralité du certificat. L’élément est <ds:X509Certificate>.

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

La fonctionnalité de cryptage 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 de réécriture et des stratégies de chiffrement et de déchiffrement du 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)"

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

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

L’action my-xml-decrypt-action déchiffre le premier <xenc:EncryptedData> élément 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 demandes d’URL contenant xml-encrypt. L’action chiffre l’intégralité de la réponse à partir d’un service configuré sur l’appliance NetScaler.

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

Crypter et décrypter les charges utiles XML