ADC

XML ペイロードの暗号化と復号化

高度なポリシー式で XML_ENCRYPT () 関数と XML_DECRYPT () 関数を使用して、XML データを暗号化および復号化できます。これらの関数は、http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/で定義されている W3C XML 暗号化標準に準拠しています。XML_ENCRYPT () および XML_DECRYPT () は、XML 暗号化仕様のサブセットをサポートします。サブセットでは、データ暗号化はバルク暗号方式 (RC4、DES3、AES128、AES192、または AES256) を使用し、RSA 公開キーを使用してバルク暗号キーを暗号化します。

注: ペイロード内のテキストを暗号化および復号化する場合は、ENCRYPT 関数と DECRYPT 関数を使用する必要があります。これらの関数の詳細については、 テキストの暗号化と復号化を参照してください

XML_ENCRYPT () 関数と XML_DECRYPT () 関数は、テキストの ENCRYPT コマンドおよび DECRYPT コマンドで使用される暗号化/復号化サービスに依存しません。暗号方式は、XML_ENCRYPT () 関数の引数として明示的に指定されています。このXML_DECRYPT() 関数は、<xenc:EncryptedData> 要素から指定された暗号メソッドに関する情報を取得します。次に、XML 暗号化および復号化関数の概要を示します。

  • XML_ENCRYPT(<certKeyName>, <method> [, <flags>])**. Returns an <xenc:EncryptedData>要素には、暗号化された入力テキストと暗号化キーが含まれています。暗号化キー自体は RSA を使用して暗号化されます。
  • XML_DECRYPT(<certKeyName>)。暗号方式と RSA 暗号化キーを含む入力<xenc:EncryptedData> 要素から復号化されたテキストを返します。

注: <xenc:EncryptedData>要素は、W3C XML 暗号化仕様で定義されています。

次に、引数の説明を示します。

  • certKeyName: XML_ENCRYPT()の場合は RSA パブリックキー、またはXML_DECRYPT()の場合は RSA プライベートキーを含む X.509 証明書を選択します。証明書キーは、 add ssl certKey コマンドで事前に作成されている必要があります。

  • method: XML データの暗号化に使用する暗号化方法を指定します。可能な値:RC4, DES3, AES128, AES192, AES256.

  • flags :XML_ENCRYPT()によって生成される<xenc:EncryptedData> 要素に含まれる次のオプションのキー情報 (<ds:KeyInfo>) を指定するビットマスク。

    • 1 -証明書キー名を持つキー名要素を含めます。エレメントは<ds:KeyName>です。
    • 2 -証明書からの RSA 公開キーとともに KeyValue 要素を含めます。エレメントは<ds:KeyValue>です。
    • 4 -証明書のシリアル番号と発行者 DN とともに X509IssuerSerial 要素を含めます。エレメントは<ds:X509IssuserSerial>です。
    • 8 -証明書のサブジェクト名 DN とともに X509サブジェクト名要素を含めます。エレメントは<ds:X509SubjectName>です。
    • 16 -証明書全体に X509Certificate 要素を含めます。エレメントは<ds:X509Certificate>です。

式で XML_ENCRYPT () 関数と XML_DECRYPT () 関数を使用します

XML 暗号化機能では、SSL 証明書とキーのペアを使用して、キーの暗号化に X.509 証明書(RSA 公開キー付き)、キーの復号化に RSA 秘密キーを提供します。したがって、式で XML_ENCRYPT () 関数を使用する前に、SSL 証明書とキーのペアを作成する必要があります。次のコマンドは、X.509 証明書 my-cert.pem、プライベートキーファイル my-key.pem を使用して、SSL 証明書とキーのペアである my-certkey を作成します。

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

上記の例では、書き換えアクション my-xml-encrypt-action は、AES-256 バルク暗号化方式と my-certkey からの RSA 公開キーを使用して、リクエストの XML ドキュメント全体 (XPATH_WITH_MARKUP (xp%/%)) を暗号化します。アクションは、暗号化されたデータと暗号化されたキーを含む<xenc:EncryptedData> エレメントで文書を置き換えます。31 で表されるフラグには、すべてのオプション<ds:KeyInfo> 要素が含まれます。

アクション my-xml-decrypt-action は、応答の最初の<xenc:EncryptedData> 要素を復号化します (XPATH_WITH_MARKUP (xp%//xenc:暗号化データ%))。これには、次の CLI コマンドを使用して、xenc XML 名前空間を事前に追加する必要があります。

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

my-xml-decrypt-action アクションは、my-certkey の RSA 秘密キーを使用して暗号化されたキーを復号化し、要素で指定された一括暗号化方式を使用して暗号化された内容を復号化します。最後に、アクションによって、暗号化されたデータ要素が復号化されたコンテンツに置き換えられます。

書き換えポリシー my-xml-encrypt-policy は、xml 暗号化を含む URL のリクエストに my-xml-encrypt-action を適用します。アクションは、Citrix ADCアプライアンスで構成されたサービスからの応答全体を暗号化します。

書き換えポリシー my-xml-decrypt-policy は、<xenc:EncryptedData> 要素を含むリクエストに my-xml-decrypt-アクションを適用します ((XPATH (xp%//xenc:EncryptedData%) は空でない文字列を返します)。アクションは、Citrix ADCアプライアンスで構成されたサービスにバインドされた要求内の暗号化されたデータを復号化します。

XML ペイロードの暗号化と復号化