Citrix ADC

加密和解密XML有效负载

您可以使用高级策略表达式中的XML_ENCRYPT()和XML_DECRICPT()函数分别加密和解密XML数据。这些函数符合在http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/中定义的w3c XML加密标准。XML_ENCRYPT()和XML_DECRICPT()支持XML加密规范的一个子集。在子集中,数据加密使用批量加密方法(RC4、DES3 AES128, AES192或AES256),并且使用RSA公钥加密批量密钥。

注意:如果要对有效负载中的文本进行加密和解密,则必须使用加密和解密函数。有关这些函数的更多信息,请参阅加密和解密文本

XML_CONTACT()和XML_DECLUT()函数不依赖于文本的加密/解密命令使用的加密/解密服务。密码方法被明确指定为xml_encrypt()函数的参数。XML_DECRYPT ()函数从EncryptedData > < xenc:元素中获取有关指定密码方法的信息。以下是XML加密和解密函数的概要:

  • XML_ENCRYPT (< certKeyName >、<法>,<标记>[])* *。返回一个EncryptedData > < xenc:元素,其中包含加密的输入文本和加密密钥,加密密钥本身使用rsa进行加密。
  • XML_DECRYPT (< certKeyName >)。返回来自输入EncryptedData > < xenc:元素的解密文本,其中包括密码方法和rsa加密的密钥。

注意:EncryptedData > < xenc:元素在w3c XML加密规范中定义。

以下是参数的说明:

  • 证书密钥名称:为XML_ENCRYPT()选择一个带有RSA公钥的x证书或用于XML_DECRYPT()的RSA私钥的证书。证书密钥必须是先前由添加ssl certKey命令创建的。

  • 方法:指定用于加密XML数据的密码方法。可能的值:rc4, des3, aes128, aes192, aes256。

  • 国旗:一个位掩码,用于指定要包含在由生成的EncryptedData > < xenc:元素中的以下可选关键信息 (< ds: KeyInfo >XML_ENCRYPT ()

    • 1-在CertKeyName中包含一个KeyName元素。元素是< ds: KeyName >
    • 2-使用证书中的RSA公钥包含KeyValue元素。元素是< ds: KeyValue >
    • 4-包括带有证书序列号和颁发者DN的X509issuerSerial元素。元素是< ds: X509IssuserSerial >
    • 8-在证书主题DN中包含一个X509SubjectName元素。元素是< ds: X509SubjectName >
    • 16—在整个证书中包含x509证书元素。元素是< ds: X509Certificate >

在表达式中使用xml_encrypt()和xml_decricpt()函数

XML加密功能使用SSL证书密钥对为密钥加密提供x证书(带有RSA公钥)和用于密钥解密的RSA私钥。因此,在表达式中使用xml_encrypt()函数之前,必须创建SSL证书密钥对。以下命令使用X.509证书,my-cert。Pem和私钥文件my-key。pem创建SSL证书密钥对my-certkey . pem

添加ssl certKey my-certkey -cert my-cert。Pem -key my-key。pem -passcrypt kxPeMRYnitY=

以下cli命令创建用于加密和解密XML内容的重写操作和策略。

替换“HTTP.RES.BODY(10000).XPATH_WITH_MARKUP(xp%/%)”"HTTP.RES.BODY(10000).XPATH_WITH_MARKUP(xp%/%).XML_ENCRYPT("my-certkey", AES256, 31)"添加重写动作my-xml-decrypt-action替换"HTTP.REQ.BODY(10000).XPATH_WITH_MARKUP(xp%//xenc:EncryptedData%)""HTTP.REQ.BODY(10000).XPATH_WITH_MARKUP(xp%//xenc:EncryptedData%).XML_DECRYPT("my-certkey")"添加重写策略my-xml- encryption -policy "HTTP.REQ.URL.CONTAINS("xml-encrypt")" my-xml- encryption -action添加重写策略my-xml-decrypt-policy "HTTP.REQ.BODY(10000).XPATH(xp%布尔(//xenc:EncryptedData)%)" my-xml-decrypt-action bind重写global my-xml- encryption -policy 30 bind重写global my-xml-decrypt-policy 30 

在上面的示例中,重写操作my-xmll-crypt-action通过使用aes - 256批量加密方法和my-certkey中的RSA公钥加密批量加密密钥,对请求中的整个XML文档(XPATH_WITH_MARKUP (xp % / %)进行加密。该操作将使用包含加密数据和加密密钥的EncryptedData > < xenc:元素替换文档。31 表示的标志包括所有可选< ds: KeyInfo >元素。

操作my-xml-解密操作解密响应中的第一个EncryptedData > < xenc:元素(XPATH_WITH_MARKUP(xp%//xenc:EncryptedData%))。这要求事先使用以下CLI命令添加xenc XML命名空间:

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

my-xml-decrypt-action操作使用my-certkey中RSA的私钥解密加密的密钥,然后使用元素中指定的批量加密方法解密加密的内容。最后,该操作将用解密的内容替换加密的数据元素。

重写策略xml加密策略将xml加密操作应用于对包含xml-encrypt的URL的请求。该操作会加密来自Citrix ADC设备上配置的服务的整个响应。

重写策略my-xml-解密策略将my-xml-解密操作应用于包含EncryptedData > < xenc:元素的请求(XPATH (xp%//xenc:cryptedDATA%)返回非空字符串)。操作解密为Citrix ADC设备上配置的服务绑定的请求中的加密数据。

加密和解密XML有效负载