Citrix 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>)。input<xenc:EncryptedData>要素から復号化されたテキストを返します。これには、暗号方式と RSA 暗号化キーが含まれます。

注:この<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 -certKeyName にキー名エレメントを含めます。要素は<ds:KeyName>です。
    • 2 -証明書の RSA 公開キーを持つ KeyValue 要素を含めます。要素は<ds:KeyValue>です。
    • 4 -証明書のシリアル番号と発行者 DN を含む X509IssuerSerial エレメントを含めます。要素は<ds:X509IssuserSerial>です。
    • 8 -X509SubjectName エレメントを証明書のサブジェクト DN に含めます。要素は<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)"

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

上記の例では、書き換えアクション 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: encryptedData%)) を復号化します。これには、次の 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-encrypt を含む URL のリクエストに my-xml-encrypt-action を適用します。アクションは、Citrix ADCアプライアンスで構成されたサービスからの応答全体を暗号化します。

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

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