加密和解密 XML 有效负载

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

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

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

  • XML_ENCRYPT(<certKeyName>, <method> [, <flags>])**. Returns an <xenc:EncryptedData> 元素,该元素包含加密的输入文本和加密密钥,加密密钥本身是通过使用 RSA 加密的。
  • XML_DECRYPT(<certKeyName>)。返回来自输入<xenc:EncryptedData> 元素的解密文本,其中包括密码方法和 RSA 加密密钥。

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

下面是参数的描述:

  • certkeyName: 选择一个 XML_CONTACT () 的具有 RSA 公钥的 X.509 证书,或者选择 XML_DACT () 的 RSA 私钥。证书密钥必须先前由添加 ssl CertKey 命令创建。

  • 方法: 指定用于加密 XML 数据的密码方法。可能的值:RC4、DES3、AES128、AES192、AES256。

  • 标志: 一个位掩码,指定以下可选密钥信息 (<ds:KeyInfo>) 将包含在由 XML_ENATECT() 生成的 <xenc:EncryptedData> 元素中:

    • 1 -包含带 certkeyName 的 KeyName 元素。元素是 <ds:KeyName>
    • 2 -包含证书中的 RSA 公钥的密钥值元素。元素是 <ds:KeyValue>
    • 4 -包含具有证书序列号和颁发者 DN 的 X509颁发者序列元素。元素是 <ds:X509IssuserSerial>
    • 8 -在证书使用者 DN 中包含 X509 主题名称元素。元素是 <ds:X509SubjectName>
    • 16 -在整个证书中包含 X509 证书元素。元素是 <ds:X509Certificate>

在表达式中使用 XML_ENT () 和 XML_解密 () 函数

XML 加密功能使用 SSL 证书密钥对为密钥加密提供 X.509 证书(带 RSA 公钥),并为密钥解密提供 RSA 私钥。因此,在表达式中使用 XML_CONTACT () 函数之前,必须创建 SSL 证书密钥对。以下命令创建一个 SSL 证书密钥对,即我的证书密钥,其中包含 X.509 证书和私钥文件 my-key.pem。

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

以下 CLI 命令创建用于加密和解密 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

在上面的示例中,重写操作 my-xml-加密操作通过使用 AES-256 批量加密方法和我的证书密钥中的 RSA 公钥加密请求中的整个 XML 文档 (XPATH_WITH_GRAD (xp%/%)) 来加密批量加密密钥。操作将文档替换为包含加密数据和加密密钥的 <xenc:EncryptedData> 元素。31 表示的标志包含所有可选 <ds:KeyInfo> 元素。

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

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

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

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

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

加密和解密 XML 有效负载