XML 暗号化の設定

Mule Runtime Engine (Mule) XML 暗号化を使用すると、XML メッセージ全体またはその特定の部分のみを暗号化できます。圧縮を組み合わせた PGP とは異なり、XML 暗号化は XML 構造内のコンテンツの保護に重点を置いています。JCE 暗号化はさまざまなデータに対してより広範な暗号化を提供しますが、XML 暗号化は XML の構造化された性質に合わせて設計されており、特定の要素またはドキュメント全体を正確に暗号化できます。これは、XML メッセージ内の社会保障番号やクレジットカードの詳細などの機密データを保護するのに役立ちます。

暗号化と復号化には、Cryptography Module XML 操作を使用します。

Anypoint Studio での XML 暗号化操作の設定

次の手順に従います。

  1. Anypoint Studio で、Cryptography Module XML 操作をキャンバスフローにドラッグします。

    暗号化フローのパスワードベースの Cryptography Module を追加するパレットメニュー
    XML 暗号化操作を追加するパレットメニュー
  2. 操作設定ウィンドウで、既存の​モジュール設定​を選択するか、​[Keystore (キーストア)]​、​[Type (種別)]​ (JKS、JCEKS、PKCS12)、および ​[Password (パスワード)]​ を設定して新しいモジュール設定を作成します。

    署名操作で使用する対称鍵または非対称鍵の情報を追加することもできます。

    暗号化 JCE のグローバル設定プロパティ
  3. モジュール設定で以前定義した ​[Key id (キー ID)]​ 値を使用して ​[Key selection (キー選択)]​ を設定するか、この操作用に新しく定義します。

    XML 署名の設定パネル
  4. [Digest Algorithm (ダイジェストアルゴリズム)]​、​[Canonicalization Algorithm (正規化アルゴリズム)]​、​[Type (種別)]​、および ​[Element path (要素のパス)]​ を選択します。

暗号化

この例では、暗号化に使用される対称鍵を格納するキーストアを設定します。

例: JCE 設定
<crypto:jce-config name="symmetricConfig" keystore="secret.jks" password="mule1234" type="JCEKS">
    <crypto:jce-key-infos>
        <crypto:jce-symmetric-key-info keyId="mySymKey" alias="aes128test" password="mule1234"/>
    </crypto:jce-key-infos>
</crypto:jce-config>

次の例では、​Xml encrypt​ 操作を使用して XML ドキュメントの特定の要素を暗号化します。

<crypto:xml-encrypt config-ref="symmetricConfig" keyId="mySymKey" algorithm="AES_CBC" elementPath="//song"/>

elementPath​ は、暗号化する要素を識別する XPath 式です。ニーズに応じて、対称鍵または非対称鍵を使用して XML ドキュメントを暗号化できます。

復号化

次の例では、復号化を設定します。

例: JCE 設定
<crypto:jce-config name="jceConfig" keystore="keystore.jks" password="mule1234">
    <crypto:jce-key-infos>
        <crypto:jce-symmetric-key-info keyId="mySymKey" alias="aes128test" password="mule1234"/>
        <crypto:jce-asymmetric-key-info keyId="myAsymKey" alias="test1" password="test1234"/>
    </crypto:jce-key-infos>
</crypto:jce-config>

次の例では、​Xml decrypt​ 操作で XML ドキュメントを復号化します。この操作では、参照されるキーストアに保存されている非対称鍵を使用します。

<crypto:xml-decrypt config-ref="jceConfig" keyId="myAsymKey"/>

ニーズに応じて、対称鍵または非対称鍵を使用して復号化できます。

署名

次の例は、署名する JCE 設定を示しています。

例: JCE 設定
<crypto:jce-config name="asymmetricConfig" keystore="keystore.jks" password="mule1234">
    <crypto:jce-key-infos>
        <crypto:jce-asymmetric-key-info keyId="myAsymKey" alias="test1" password="test1234"/>
    </crypto:jce-key-infos>
</crypto:jce-config>

次の例では、​Xml sign​ 操作で非対称鍵を使用して XML ドキュメントに署名します (XML エンベロープを作成し、署名されるコンテンツ内に署名を挿入する)。

例: エンベロープ署名
<crypto:xml-sign config-ref="asymmetricConfig" keyId="myAsymKey" type="ENVELOPING" digestAlgorithm="SHA256" elementPath="/PurchaseOrder/Buyer"/>

次の例では、XML ドキュメントの要素に基づいて、分離された XML 署名が作成されます。分離された署名は、署名されるコンテンツに挿入されずに個別の XML 要素として返されます。

例: 分離された署名
<crypto:xml-sign config-ref="asymmetricConfig" keyId="myAsymKey" type="DETACHED" digestAlgorithm="SHA256" elementPath="/PurchaseOrder/Buyer"/>

署名アルゴリズムを選択する

Xml Sign​ 操作では、​digestAlgorithm​ パラメーターによって、署名前にコンテンツに適用されるハッシュアルゴリズム (SHA1、SHA256、SHA512 など) が定義されます。

ただし、最終的な XML 署名アルゴリズムは手動で選択されません。モジュールで設定されたキーの種別 (RSA、DSA、EC、HMAC) に基づいて自動的に決定されます。

署名プロセスでは、選択されたハッシュアルゴリズム ​digestAlgorithm​ とキー種別を組み合わせて、XML ドキュメントで使用される署名メソッドを生成します。

例:

  • digestAlgorithm=SHA256​ の RSA キーでは、​rsa-sha256​ 署名メソッドになります。

  • digestAlgorithm=SHA1​ の DSA キーでは、​dsa-sha1​ 署名メソッドになります。

  • digestAlgorithm=SHA256​ の EC キーでは、​ecdsa-sha256​ 署名メソッドになります。

別の署名メソッドを使用する場合は、​digestAlgorithm​ パラメーター設定でキーの種別を変更する必要があります。現在、操作内で署名メソッドを手動で選択することはできません。

署名を検証する

次の例は、署名を検証するための JCE 設定を示しています。

例: JCE 設定
<crypto:jce-config name="asymmetricConfig" keystore="keystore.jks" password="mule1234">
    <crypto:jce-key-infos>
        <crypto:jce-asymmetric-key-info keyId="myAsymKey" alias="test1" password="test1234"/>
    </crypto:jce-key-infos>
</crypto:jce-config>

次の例では、非対称鍵を使用して、​elementPath​ XPath 式で指定された XML 要素の署名を検証します。

例: Validate 操作の使用
<crypto:xml-validate config-ref="asymmetricConfig" keyId="myAsymKey" elementPath="/PurchaseOrder/Buyer"/>

ドキュメントに複数の署名が含まれる場合、​elementPath​ を設定して、検証する署名を選択します。XPath 式を使用して署名済み要素を指定して、その要素の署名を検証します。

要素パスを使用してカスタム名前空間を対象にする

カスタム名前空間内の XML 要素を署名または検証するには、XPath 関数 ( namespace-uri​ および local-name​) を使用して名前空間を指定します。

たとえば、次のドキュメントについて考えます。

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/">
    <FirstElement>
        <!-- Some content -->
    </FirstElement>
    <SecondElement>
        <!-- Additional content -->
    </SecondElement>
</soap:Envelope>

soap:Envelope​ 内の ​FirstElement​ のコンテンツを対象設定するには、​xmlns:soap​ 名前空間を指定します。​xmlns:soap​ の XML スキーマは ​http://www.w3.org/2003/05/soap-envelope/​ で定義されています。

次の例は、​FirstElement​ を署名するように設定された ​xml-sign​ 操作を示しています。

<crypto:xml-sign
    config-ref="asymmetricConfig"
    keyId="myAsymKey"
    type="DETACHED"
    digestAlgorithm="SHA256"
    elementPath="/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope/' and local-name()='Envelope']/FirstElement"/>

elementPath​ 式は ​xmlns:soap​ 名前空間を示します。