第186章 XML セキュリティーコンポーネント


XML セキュリティーコンポーネント

Camel 2.12.0 から利用可能
この Apache Camel コンポーネントを使用すると、W3C 標準 XML 署名 構文および処理で説明されているように、または後継 バージョン 1.1 で説明されているように、XML 署名を生成および 検証できます。XML 暗号化サポートについては、XML Security Data Format を参照してください。
XML 署名の概要は、を参照して ください。コンポーネントの実装は JSR 105 (W3C 標準に対応する Java API)をベースとしており、JSR 105 の Apache Santuario および JDK プロバイダーをサポートします。この実装は、最初に Apache Santuario プロバイダーの使用を試みます。Santuario プロバイダーが見つからない場合は、JDK プロバイダーを使用します。さらに、実装は DOM ベースです。
Camel 2.15.0 以降、署名側のエンドポイントに対して XAdES-BES/EPES もサポートします。「Signer エンドポイントの XAdES-BES/EPES」 を参照してください。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-xmlsecurity</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

XML 署名ラッピングモード

XML 署名は、エンベロープ、エンベロープ、および切り離された XML 署名によって異なります。エンベロープされた XML 署名の場合、XML 署名は署名済み XML ドキュメントによってラップされます。つまり、XML 署名要素は親要素の子要素で、署名された XML ドキュメントに属します。エンベロープ XML 署名の場合、XML 署名に署名されたコンテンツが含まれます。その他のケースはすべて、デタッチされた XML 署名と呼ばれます。Camel 2.14.0 以降、特定の形式の XML 署名がサポートされます
エンベロープされた XML 署名の場合、サポートされる生成された XML 署名の構造は次のとおりです(変数は [] で囲まれます)。
    <[parent element]>
       ... <!-- Signature element is added as last child of the parent element-->
       <Signature Id="generated_unique_signature_id">
           <SignedInfo>
                 <Reference URI=""> 
                       <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                       (<Transform>)* <!-- By default "http://www.w3.org/2006/12/xml-c14n11" is added to the transforms -->
                       <DigestMethod>
                       <DigestValue>
                 </Reference>
                 (<Reference URI="#[keyinfo_Id]">
                       <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                       <DigestMethod>
                       <DigestValue>
                 </Reference>)?
                 <!-- further references possible, see option 'properties' below -->
          </SignedInfo>
          <SignatureValue>
          (<KeyInfo Id="[keyinfo_id]">)?
          <!-- Object elements possible, see option 'properties' below -->
      </Signature>
    </[parent element]>
Copy to Clipboard Toggle word wrap
エンベロープ XML 署名の場合、サポートされている生成された XML 署名の構造は次のとおりです。
    <Signature Id="generated_unique_signature_id">
      <SignedInfo>
             <Reference URI="#generated_unique_object_id" type="[optional_type_value]">
                   (<Transform>)* <!-- By default "http://www.w3.org/2006/12/xml-c14n11" is added to the transforms -->
                   <DigestMethod>
                   <DigestValue>
             </Reference>
             (<Reference URI="#[keyinfo_id]">
                   <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                   <DigestMethod>
                   <DigestValue>
             </Reference>)?
              <!-- further references possible, see option 'properties' below  -->
      </SignedInfo>
      <SignatureValue>
      (<KeyInfo Id="[keyinfo_id]">)?
      <Object Id="generated_unique_object_id"/> <!-- The Object element contains the in-message body -->
      <!-- The object ID can either be generated or set by the option parameter "contentObjectId" -->
      <!-- Further Object elements possible, see option 'properties' below -->
    </Signature>
Copy to Clipboard Toggle word wrap
Camel 2.14.0 では、以下の構造を持つ分離された XML 署名がサポートされます( 「署名要素のシブリングとしての分離された XML 署名」も参照してください)。
(<[signed element] Id="[id_value]">
<!-- signed element must have an attribute of type ID -->
      ...
 
</[signed element]> 
<other sibling/>* 
<!-- between the signed element and the corresponding signature element, there can be other siblings.
 Signature element is added as last sibling. -->
<Signature Id="generated_unique_ID">
           <SignedInfo>
                <CanonicalizationMethod>
                <SignatureMethod>
                <Reference URI="#[id_value]" type="[optional_type_value]">
                <!-- reference URI contains the ID attribute value of the signed element -->
                      (<Transform>)* <!-- By default "http://www.w3.org/2006/12/xml-c14n11" is added to the transforms -->
                      <DigestMethod>
                      <DigestValue>
                </Reference>
                (<Reference URI="#[generated_keyinfo_Id]">
                      <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                      <DigestMethod>
                      <DigestValue>
                </Reference>)?
         </SignedInfo>
         <SignatureValue>
         (<KeyInfo Id="[generated_keyinfo_id]">)?
</Signature>)+
Copy to Clipboard Toggle word wrap

URI 形式

camel コンポーネントは、以下の URI 形式の 2 つのエンドポイントで設定されます。
    xmlsecurity:sign:name[?options]
    xmlsecurity:verify:name[?options]
Copy to Clipboard Toggle word wrap
  • 署名側のエンドポイントでは、インメッセージの本文の XML 署名を生成できます。これは、XML ドキュメントまたはプレーンテキストのいずれかになります。エンベロープされたエンベロープ( Camel 12.14より)の XML 署名は、out-message のボディーに設定されます。
  • ベリファイアのエンドポイントでは、エンベロープまたはエンベロープ XML 署名、またはインメッセージの本文に含まれるエンベロープまたはエンベロープ( Camel 2.14.0の) XML 署名を複数検証できます。検証に成功すると、元のコンテンツが XML 署名から抽出され、アウトメッセージの本文に設定されます。
  • URI の name 部分をユーザーが選択して、Camel コンテキスト内の異なる署名/検証エンドポイントを区別できます。

基本的な例

以下の例は、コンポーネントの基本的な使用方法を示しています。
    from("direct:enveloping").to("xmlsecurity:sign://enveloping?keyAccessor=#accessor",
                                 "xmlsecurity:verify://enveloping?keySelector=#selector","mock:result")
Copy to Clipboard Toggle word wrap
Spring XML の場合:
    <from uri="direct:enveloping" />
      <to uri="xmlsecurity:sign://enveloping?keyAccessor=#accessor" />
      <to uri="xmlsecurity:verify://enveloping?keySelector=#selector" />
    <to uri="mock:result" />
Copy to Clipboard Toggle word wrap
署名プロセスには、秘密鍵が必要です。この秘密鍵を提供するキーアクセサー Bean を指定します。検証には、対応する公開鍵が必要です。この公開鍵を提供するキーセレクター Bean を指定します。
キーアクセサー Bean は KeyAccessor インターフェイスを実装する必要があります。パッケージ org.apache.camel.component.xmlsecurity.api には、Java キーストアから秘密鍵を読み取るデフォルトの実装クラス DefaultKeyAccessor が含まれます。
キーセレクター Bean は javax.xml.crypto.KeySelector インターフェイスを実装する必要があります。パッケージ org.apache.camel.component.xmlsecurity.api には、キーストアから公開鍵を読み取るデフォルトの実装クラス DefaultKeySelector が含まれます。
この例では、デフォルトの署名アルゴリズム http://www.w3.org/2000/09/xmldsig#rsa-sha1 が使用されます。選択した署名アルゴリズムは、オプション signatureAlgorithm (以下を参照)で設定できます。署名側のエンドポイントは、エンベロープ XML 署名を作成します。エンベロープされた XML 署名を作成する場合は、Signature 要素の親要素を指定する必要があります。詳細は、options parentLocalName を参照してください。
デタッチされた XML 署名の作成については、「署名要素のシブリングとしての分離された XML 署名」 を参照してください。

一般的な署名およびオプションの検証

エンドポイント(signer および verifier)の両方に使用できるオプションもあります。
Expand
名前 タイプ デフォルト 説明
uriDereferencer javax.xml.crypto.URIDereferencer null URI dereferencer。逆参照を制限する場合や、逆参照に特別な要件がある場合は、ここでは独自の URI 逆参照を指定します。
baseUri String null URI 逆参照で使用されるベース URI。相対 URI はベース URI と連結されます。
cryptoContextProperties Map<String, ? extends Object> null 暗号コンテキストのプロパティー。See javax.xml.crypto.XMLCryptoContext.setProperty(String, Object).プロパティーはプロバイダーによって異なります。たとえば、JDK プロバイダー XMLDSig には、マニフェストの検証を有効にするためのプロパティー org.jcp.xml.dsig.validateManifests があります。XML ベリファイアでは、デフォルトでは Boolean.TRUE, org.jcp.xml.dsig.validateManifests の値に設定されています。javax.xml.crypto.dsig.cacheReferencesecureValidation オプションが true の場合、さらに XML ベリファイアに対してプロパティー org.apache.jcp.xml.dsig.secureValidationorg.jcp.xml.dsig.secureValidation が splunk に設定されます。Boolean.TRUEこれらの機能をオフにする場合は、プロパティーの値を Boolean.FALSE に設定する必要があります。
disallowDoctypeDecl Boolean Boolean.TRUE 受信 XML メッセージで DTD DOCTYPE 宣言を拒否するかどうかを示します。
omitXmlDeclaration Boolean Boolean.FALSE XML 宣言ヘッダーを出力 XML メッセージで省略する必要があるかどうかを示します。
clearHeaders Boolean Boolean.TRUE XmlSignatureConstants で定義された XML 署名メッセージヘッダーが署名者または検証者処理の最後に削除されるべきかどうかを示します。
schemaResourceUri String null Camel 2.14.0 以降XML スキーマファイルへのクラスパス。設定されている場合、XML ドキュメントは XML スキーマに対して検証されます。タイプ ID の属性を判断するには、デタッチされた署名の場合に設定する必要があります。この値はヘッダー CamelXmlSignatureSchemaResourceUri で上書きできます。詳細は、「署名要素のシブリングとしての分離された XML 署名」 を参照してください。ID 属性への参照 URI を持つエンベロープ署名の場合、スキーマも必要になります(署名オプション contentReferenceUriを参照してください)。
outputXmlEncoding String null Camel 2.15.0 以降出力 XML ドキュメントの文字エンコーディング。null の場合、UTF-8 が使用されます。

署名オプション

署名側のエンドポイントには以下のオプションがあります。
Expand
名前 タイプ デフォルト 説明
keyAccessor KeyAccessor null 署名キーと KeyInfo インスタンスを提供します。キーストアを使用する実装の例は、DefaultKeyAccessorを参照してください。
addKeyInfoReference Boolean Boolean.TRUE キーアクセサーが提供する KeyInfo 要素を参照する Reference 要素を XML 署名に追加するかどうかを示します。
signatureAlgorithm String http://www.w3.org/2000/09/xmldsig#rsa-sha1 ダイジェストおよび暗号化アルゴリズムで設定される署名アルゴリズム。ダイジェストアルゴリズムは SignedInfo 要素のダイジェストを計算するために使用され、暗号化アルゴリズムはこのダイジェストに署名するために使用されます。設定可能な値: http://www.w3.org/2000/09/xmldsig#dsa-sha1, http://www.w3.org/2000/09/xmldsig#rsa-sha1, http://www.w3.org/2001/04/xmldsig-more#rsa-sha256, http://www.w3.org/2001/04/xmldsig-more#rsa-sha384, http://www.w3.org/2001/04/xmldsig-more#rsa-sha512
digestAlgorithm String 説明 を参照してください。 メッセージ内ボディーのダイジェストを計算するダイジェストアルゴリズム。指定のない場合は、署名アルゴリズムのダイジェストアルゴリズムが使用されます。使用できる値は http://www.w3.org/2000/09/xmldsig#sha1http://www.w3.org/2001/04/xmlenc#sha256http://www.w3.org/2001/04/xmldsig-more#sha384、および http://www.w3.org/2001/04/xmlenc#sha512 です。
parentLocalName String null Signature 要素の親のローカル名。Signature 要素は、親の子の最後に追加されます。エンベロープされた XML 署名に必要です。このオプションと parentXpath オプションが null の場合は、エンベロープ XML 署名が作成されます。parentNamespace も参照してください。または、parentXpath オプションを使用して親を指定することもできます。
parentNamespace String null Signature 要素の親の名前空間。オプション parentLocalNameを参照してください。
parentXpath XPathFilterParameterSpec null Camel 2.15.0 以降XPath を Signature 要素の親に追加します。Signature 要素は、親の子の最後に追加されます。エンベロープされた XML 署名に必要です。このオプションと parentLocalName オプションが null の場合は、エンベロープ XML 署名が作成されます。または、parentLocalName オプションを使用して親を指定することもできます。例: /p1:root/SecurityItem[last()]この例では、SecurityItem という名前の最後のシブリングを選択します。このような選択は、parentLocalName オプションではできません。
canonicalizationMethod javax.xml.crypto.AlgorithmMethod C14n ダイジェストの計算前に SignedInfo 要素の正規化に使用される正規化メソッド。ヘルパーメソッド XmlSignatureHelper.getCanonicalizationMethod (String algorithm)または getCanonicalizationMethod (String algorithm, List<String> inclusiveNamespacePrefixes)を使用して正規化メソッドを作成できます。
transformMethods List<javax.xml.crypto.AlgorithmMethod> 説明 を参照してください。
ダイジェストが計算される前にメッセージボディーで実行される変換。デフォルトでは、C14n が追加され、エンベロープ署名の場合は( parentLocalNameを参照)、http://www.w3.org/2000/09/xmldsig#enveloped-signature もリストの位置 0 に追加されます。XmlSignatureHelper のメソッドを使用して変換メソッドを作成します。
Camel ヘッダー CamelXmlSignatureTransformMethods はこのオプションを上書きします( Camel 2.17.0 以降)。ヘッダーの値は String タイプである必要があります。変換アルゴリズムをコンマ区切りリストで指定します(例: http://www.w3.org/2000/09/xmldsig#enveloped-signature,http://www.w3.org/TR/2001/REC-xml-c14n-20010315 )。ヘッダーでは、http://www.w3.org/TR/1999/REC-xslt-19991116http://www.w3.org/2002/06/xmldsig-filter2http://www.w3.org/TR/1999/REC-xpath-19991116 などのパラメーターが必要な変換アルゴリズムを指定できません。
prefixForXmlSignatureNamespace String ds XML 署名名前空間の接頭辞。null が指定されているか、空の文字列の場合は、署名名前空間に接頭辞は使用されません。
contentReferenceUri String 説明 を参照してください。 署名されたコンテンツ(メッセージ本文)への参照の URI。null でエンベロープされた XML 署名の場合、URI は空の文字列に設定されます。null でエンベロープ XML 署名の場合、URI は generated_object_id に設定されます。これは、参照が in-message ボディーが含まれる Object 要素を参照することを意味します。メッセージ内ボディーに署名する必要がない場合は、このオプションを使用して in-message ボディーの特定部分を参照できます。この値はヘッダー CamelXmlSignatureContentReferenceUri で上書きできます。XML ID 属性の値(例: #ID_value)を使用する場合は、入力 XML ドキュメントに含まれる doctype 定義を使用するか、オプション schemaResourceUri で指定できる XML スキーマドキュメントを介して ID 属性に関する情報を提供する必要があります。schemaResourceURi オプションを使用した XML スキーマによる ID 属性の定義は、エンベロープ署名ケースでのみ機能します。このオプションが xpathsToIdAttributes に設定されている場合、このオプションはデタッチされた署名の場合は無視されます。
contentReferenceType String null コンテンツ参照の type 属性の値。この値はヘッダー CamelXmlSignatureContentReferenceType で上書きできます。
plainText Boolean Boolean.FALSE メッセージ内の本文にプレーンテキストが含まれているかどうかを示します。通常、署名ジェネレーターは受信メッセージのボディーを XML として扱います。メッセージ本文がプレーンテキストの場合は、このオプションを true に設定する必要があります。値はヘッダー CamelXmlSignatureMessageIsPlainText で上書きできます。
plainTextEncoding String null plainText オプションが true に設定されている場合にのみ使用されます。次に、プレーンテキストのエンコーディングを指定できます。null の場合、UTF-8 が使用されます。値はヘッダー CamelXmlSignatureMessageIsPlainTextEncoding で上書きできます。
properties XmlSignatureProperties null 追加のプロパティーが含まれる XML 署名に参照およびオブジェクトを追加するには、XmlSignatureProperties インターフェイスを実装する Bean を指定できます。
contentObjectId String null Object 要素の Id 属性の値。エンベロープ XML 署名ケースでのみ使用されます。null の場合、一意の値が生成されます。2.12.2 から利用可能
xpathsToIdAttributes
List<XPathFilterParameterSpec>
空のリスト
2.14.0 以降署名する要素の ID 属性に対する XPATH 式のリスト。デタッチされた XML 署名に使用されます。は、オプションと組み合わせてのみ使用できます。schemaResourceUri値はヘッダーCamelXmlSignatureXpathsToIdAttributesで上書きできます。オプション parentLocalNamが同時 設定されている場合、例外が発生します。クラス XPathFilterParameterSpec にはパッケージ javax.xml.crypto.dsig.spec があります。詳細は、サブ章のデタッチされた XML 署名(署名要素 のシブリングとしての XML 署名)を参照してください。
signatureId
String
null
2.14.0 以降Signature 要素の Id 属性の値。null の場合は、一意の ID が生成されます。値が空の文字列("")の場合、Signature 要素に Id 属性は追加されません。

オプションの検証

verifier エンドポイントには以下のオプションがあります。
Expand
名前 タイプ デフォルト 説明
keySelector javax.xml.crypto.KeySelector null XML 署名を検証するためのキーを提供します。キーストアを使用する実装の例は、DefaultKeySelector を参照してください。
xmlSignatureChecker XmlSignatureChecker null このインターフェイスを使用すると、検証の実行前にアプリケーションが XML 署名を確認できます。この手順は、http://www.w3.org/TR/xmldsig-bestpractices/#check-what-is-signedで推奨されます。
validationFailedHandler ValidationFailedHandler DefaultValidationFailedHandler さまざまな検証に失敗した状況を処理します。デフォルトの実装は、さまざまな状況で特定の例外を出力します(すべての例外には org.apache.camel.component.xmlsecurity.api のパッケージ名があり、XmlSignatureInvalidException のサブクラスです)。署名値の検証に失敗すると、XmlSignatureInvalidValueException が出力されます。参照検証に失敗すると、XmlSignatureInvalidContentHashException が出力されます。詳細は、JavaDoc を参照してください。
xmlSignature2Message XmlSignature2Message DefaultXmlSignature2Message 検証後に XML 署名を ouput-message にマップする Bean。このマッピングは、outputNodeSearchType オプション、outputNodeSearch オプション、および removeSignatureElements オプションを使用して設定できます。デフォルトの実装では、3 つの出力ノード検索タイプ Default、ElementName、および XPath に関連する 3 つの可能性が提供されます。デフォルトの実装はシリアライズされ、ouput メッセージのボディーに設定されるノードを決定します。検索タイプが "ElementName" の場合、ouput ノード(この場合は要素でなければならない)は、検索値で定義されたローカル名と名前空間によって決定されます(オプション outputNodeSearchを参照)。検索タイプが XPath の場合、出力ノードは検索値で指定された XPath で決定されます(この場合、ouput ノードは "Element"、"TextNode"、または "Document")のタイプになります)。出力ノード検索タイプが Default の場合、以下のルールが適用されます。エンベロープされた XML 署名の場合(URI="" の参照で、"http://www.w3.org/2000/09/xmldsig#enveloped-signature")は、Signature 要素のない受信 XML ドキュメントが出力メッセージボディーに設定されます。非承認の XML 署名の場合、メッセージボディーは参照されるオブジェクトから決定されます。詳細は、Enveloping XML Signature Case のOutput Node Determination の章を参照してください。
outputNodeSearchType String Default 出力ノードの検索タイプを決定します。オプション xmlSignature2Message を参照してください。デフォルトの実装 DefaultXmlSignature2Message は、Default、ElementName、および XPath の 3 つの検索タイプをサポートします。
outputNodeSearch Object null 出力ノード検索の値を検索します。タイプは検索タイプによって異なります。デフォルトの検索実装 DefaultXmlSignature2Message の場合、以下の値を指定できます。検索タイプが Default の場合、検索値は使用されません。検索タイプが "ElementName" の場合、検索値には出力要素の名前空間とローカル名が含まれます。名前空間は括弧内に置く必要があります。検索タイプが XPath の場合、検索値には XPath を表す javax.xml.crypto.dsig.spec.XPathFilterParameterSpec のインスタンスが含まれます。このようなインスタンスは XmlSignatureHelper メソッド .getXpathFilter (String xpath, Map<String, String> namespaceMap)を使用し て作成できます。XPath は、タイプ Element、TextNode、または Document で使用できる出力ノードを決定します。
removeSignatureElements Boolean Boolean.FALSE エンベロープされた XML 署名ケースの出力メッセージの署名要素を削除するインジケーター。XmlSignature2Message インスタンスで使用されます。デフォルトの実装では、このインジケーターを使用して 2 つの検索タイプElementName と XPath を使用します。
secureValidation Boolean Boolean.TRUE セキュアな検証を有効にします。true の場合、セキュアな検証が有効になります。詳細は こちら を参照してください。

Enveloping XML 署名ケースの出力ノードの決定

検証後、ノードは XML 署名ドキュメントから抽出され、最終的に output-message ボディーに返されます。XML 署名の場合、デフォルトの実装 Default XmlSignature2Message は、次の方法でノード検索タイプ Default に対してこれを行います(オプション xmlSignature2Messageを参照)。
まず、オブジェクト参照が決定されます。
  • 同じドキュメント参照のみが考慮されます(URI は # で始まる必要があります)。
  • また、マニフェストを使用したオブジェクトへの間接的なドキュメント参照も考慮されます。
  • 結果のオブジェクト参照数は 1 である必要があります。
次に、オブジェクトは逆参照され、オブジェクトには XML 要素が 1 つだけ含まれる必要があります。この要素は、出力ノードとして返されます。
これは、エンベロープ XML 署名の構造が必要であることを意味します。
    <Signature>
          <SignedInfo>
             <Reference URI="#object"/>       
             <!-- further references possible but they must not point to an Object or Manifest containing an object reference -->
             ...
          </SignedInfo>
      
          <Object Id="object">
               <!-- contains one XML element which is extracted to the message body -->
          <Object>
          <!-- further object elements possible which are not referenced-->
          ...
          (<KeyInfo>)?
    </Signature>
Copy to Clipboard Toggle word wrap
または構造です。
    <Signature>
          <SignedInfo>
             <Reference URI="#manifest"/>       
             <!-- further references  are possible but they must not point to an Object or other manifest containing an object reference -->
             ...
          </SignedInfo>
      
          <Object >
             <Manifest Id="manifest">
                <Reference URI=#object/>
             </Manifest>
          </Objet>
          <Object Id="object">
              <!-- contains the DOM node which is extracted to the message body -->
          </Object>
           <!-- further object elements possible which are not referenced -->
          ...
          (<KeyInfo>)?
    </Signature>
Copy to Clipboard Toggle word wrap

署名要素のシブリングとしての分離された XML 署名

2.14.0 以降
署名が署名された要素のシブリングであるデタッチされた署名を作成できます。以下の例には、2 つの分離署名が含まれます。最初の署名は要素 C 用で、2 つ目の署名は要素 A 用です。署名は ネスト化され ます。2 つ目の署名は、最初の署名が含まれる要素 A の です。

例186.1 デタッチされた XML 署名の例

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <A ID="IDforA">
        <B>
            <C ID="IDforC">
                <D>dvalue</D>
            </C>
            <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                Id="_6bf13099-0568-4d76-8649-faf5dcb313c0">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod
                        Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                    <ds:SignatureMethod
                        Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
                    <ds:Reference URI="#IDforC">
                        ...
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>aUDFmiG71</ds:SignatureValue>
            </ds:Signature>
        </B>
    </A>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"Id="_6b02fb8a-30df-42c6-ba25-76eba02c8214">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod
                Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
            <ds:SignatureMethod
                Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <ds:Reference URI="#IDforA">
                ...
            </ds:Reference>         
        </ds:SignedInfo>
        <ds:SignatureValue>q3tvRoGgc8cMUqUSzP6C21zb7tt04riPnDuk=</ds:SignatureValue>
    </ds:Signature>
<root>
Copy to Clipboard Toggle word wrap
この例では、複数の要素に署名でき、その要素ごとに署名がシブリングとして作成されます。署名する要素には、タイプ ID の属性が必要です。属性の ID タイプは XML スキーマで定義する必要があります(オプション schemaResourceUriを参照)。タイプ ID の属性を参照する XPATH 式の一覧を指定します(オプション xpathsToIdAttributesを参照してください)。これらの属性は、署名する要素を決定します。要素は、keyAccessor Bean によって指定された同じキーで署名されます。より高い(=deeper)階層レベルの Ements が最初に署名されます。この例では、要素 "C" は要素 A の前に署名されています。

例186.2 Java DSL の例

from("direct:detached")
  .to("xmlsecurity:sign://detached?keyAccessor=#keyAccessorBeant&xpathsToIdAttributes=#xpathsToIdAttributesBean&schemaResourceUri=Test.xsd")
  .to("xmlsecurity:verify://detached?keySelector=#keySelectorBean&schemaResourceUri=org/apache/camel/component/xmlsecurity/Test.xsd")
  .to("mock:result");
Copy to Clipboard Toggle word wrap

例186.3 Spring の例

   
  <bean id="xpathsToIdAttributesBean" class="java.util.ArrayList">
        <constructor-arg type="java.util.Collection">
            <list>
                <bean
                    class="org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper"
                    factory-method="getXpathFilter">
                    <constructor-arg type="java.lang.String"
                        value="/ns:root/a/@ID" />
                    <constructor-arg>
                        <map key-type="java.lang.String" value-type="java.lang.String">
                            <entry key="ns" value="http://test" />
                        </map>
                    </constructor-arg>
                </bean>
            </list>
        </constructor-arg>
    </bean>
...
       <from uri="direct:detached" />
            <to
                uri="xmlsecurity:sign://detached?keyAccessor=#keyAccessorBean&amp;xpathsToIdAttributes=#xpathsToIdAttributesBean&amp;schemaResourceUri=Test.xsd" />
            <to
                uri="xmlsecurity:verify://detached?keySelector=#keySelectorBean&amp;schemaResourceUri=Test.xsd" />
            <to uri="mock:result" />
Copy to Clipboard Toggle word wrap

Signer エンドポイントの XAdES-BES/EPES

Camel 2.15.0 NORMAL XML Advanced Electronic Signatures (XAdES) では、XML Signature への 拡張機能を定義します。この標準は ヨーロッパの Telecomunication Standards Institute によって定義され、電子署名のコミュニティーフレームワークで European Union Directive (1999/93/EC)に準拠する署名を 作成できます。XAdES は、署名フォームと呼ばれるさまざまな署名プロパティーのセットを定義します。Signer Endpoint の署名フォーム Basic Electronic Signature (XAdES-BES)および Explicit Policy Based Electronic Signature (XAdES-EPES)をサポートします。Validation Data XAdES-T および XAdES-C を使用した Electronic Signature 形式はサポートされません。XAdES-EPES フォームの以下のプロパティーをサポートします("?" はゼロまたは 1 回を意味します)。
Expand
        <QualifyingProperties Target>
            <SignedProperties>
                <SignedSignatureProperties>
                    (SigningTime)?
                    (SigningCertificate)?
                    (SignaturePolicyIdentifier)
                    (SignatureProductionPlace)?
                    (SignerRole)?
                </SignedSignatureProperties>
                <SignedDataObjectProperties>
                    (DataObjectFormat)?
                    (CommitmentTypeIndication)?
                </SignedDataObjectProperties>
            </SignedProperties>
        </QualifyingProperties>
Copy to Clipboard Toggle word wrap
XAdES-BES フォームのプロパティーは、SignaturePolicyIdentifier プロパティーが XAdES-BES の一部ではない点以外は同じです。
XAdES-BES/EPES プロパティーは Bean org.apache.camel.component.xmlsecurity.api.XAdESSignatureProperties で設定でき、org.apache.camel.component.xmlsecurity.api.DefaultXAdESSignatureProperties. XAdESSignatureProperties は、SigningCertificate プロパティーを除くすべてのプロパティーをサポートします。SigningCertificate プロパティーを取得するには、XAdESSignatureProperties.getSigningCertificate() or XAdESSignatureProperties.getSigningCertificateChain(). The class DefaultXAdESSignatureProperties メソッドを上書きする必要があります。また、キーストアとエイリアスを介して署名証明書を指定できるようにする必要があります。getSigningCertificate()以下の例は、指定できるすべてのパラメーターを示しています。特定のパラメーターが必要ない場合は、それらを省略できます。
Expand
        Keystore keystore = ... // load a keystore
        DefaultKeyAccessor accessor = new DefaultKeyAccessor();
        accessor.setKeyStore(keystore);
        accessor.setPassword("password");
        accessor.setAlias("cert_alias"); // signer key alias
 
        DefaultXAdESSignatureProperties props = new DefaultXAdESSignatureProperties();
        props.setNamespace("http://uri.etsi.org/01903/v1.3.2#"); // sets the namespace for the XAdES elements; the namspace is related to the XAdES version, default value is "http://uri.etsi.org/01903/v1.3.2#", other possible values are "http://uri.etsi.org/01903/v1.1.1#" and "http://uri.etsi.org/01903/v1.2.2#"
        props.setPrefix("etsi"); // sets the prefix for the XAdES elements, default value is "etsi"
        
        // signing certificate
        props.setKeystore(keystore));
        props.setAlias("cert_alias"); // specify the alias of the signing certificate in the keystore = signer key alias
        props.setDigestAlgorithmForSigningCertificate(DigestMethod.SHA256); // possible values for the algorithm are "http://www.w3.org/2000/09/xmldsig#sha1", "http://www.w3.org/2001/04/xmlenc#sha256", "http://www.w3.org/2001/04/xmldsig-more#sha384", "http://www.w3.org/2001/04/xmlenc#sha512", default value is "http://www.w3.org/2001/04/xmlenc#sha256"
        props.setSigningCertificateURIs(Collections.singletonList("http://certuri"));
 
        // signing time
        props.setAddSigningTime(true);
 
        // policy
        props.setSignaturePolicy(XAdESSignatureProperties.SIG_POLICY_EXPLICIT_ID);
        // also the values XAdESSignatureProperties.SIG_POLICY_NONE ("None"), and XAdESSignatureProperties.SIG_POLICY_IMPLIED ("Implied")are possible, default value is XAdESSignatureProperties.SIG_POLICY_EXPLICIT_ID ("ExplicitId")
        // For "None" and "Implied" you must not specify any further policy parameters
        props.setSigPolicyId("urn:oid:1.2.840.113549.1.9.16.6.1");
        props.setSigPolicyIdQualifier("OIDAsURN"); //allowed values are empty string, "OIDAsURI", "OIDAsURN"; default value is empty string
        props.setSigPolicyIdDescription("invoice version 3.1");
        props.setSignaturePolicyDigestAlgorithm(DigestMethod.SHA256);// possible values for the algorithm are "http://www.w3.org/2000/09/xmldsig#sha1", http://www.w3.org/2001/04/xmlenc#sha256", "http://www.w3.org/2001/04/xmldsig-more#sha384", "http://www.w3.org/2001/04/xmlenc#sha512", default value is http://www.w3.org/2001/04/xmlenc#sha256"
        props.setSignaturePolicyDigestValue("Ohixl6upD6av8N7pEvDABhEL6hM=");
        // you can add  qualifiers for the signature policy either by specifying text or an XML fragment with the root element "SigPolicyQualifier" 
        props.setSigPolicyQualifiers(Arrays
            .asList(new String[] {
                "<SigPolicyQualifier xmlns=\"http://uri.etsi.org/01903/v1.3.2#\"><SPURI>http://test.com/sig.policy.pdf</SPURI><SPUserNotice><ExplicitText>display text</ExplicitText>"
                    + "</SPUserNotice></SigPolicyQualifier>", "category B" }));
        props.setSigPolicyIdDocumentationReferences(Arrays.asList(new String[] {"http://test.com/policy.doc.ref1.txt",
            "http://test.com/policy.doc.ref2.txt" }));
 
        // production place
        props.setSignatureProductionPlaceCity("Munich");
        props.setSignatureProductionPlaceCountryName("Germany");
        props.setSignatureProductionPlacePostalCode("80331");
        props.setSignatureProductionPlaceStateOrProvince("Bavaria");
 
        //role
        // you can add claimed roles either by specifying text or an XML fragment with the root element "ClaimedRole" 
        props.setSignerClaimedRoles(Arrays.asList(new String[] {"test",
            "<a:ClaimedRole xmlns:a=\"http://uri.etsi.org/01903/v1.3.2#\"><TestRole>TestRole</TestRole></a:ClaimedRole>" }));
        props.setSignerCertifiedRoles(Collections.singletonList(new XAdESEncapsulatedPKIData("Ahixl6upD6av8N7pEvDABhEL6hM=",
            "http://uri.etsi.org/01903/v1.2.2#DER", "IdCertifiedRole")));
 
        // data object format
        props.setDataObjectFormatDescription("invoice");
        props.setDataObjectFormatMimeType("text/xml");
        props.setDataObjectFormatIdentifier("urn:oid:1.2.840.113549.1.9.16.6.2");
        props.setDataObjectFormatIdentifierQualifier("OIDAsURN"); //allowed values are empty string, "OIDAsURI", "OIDAsURN"; default value is empty string
        props.setDataObjectFormatIdentifierDescription("identifier desc");
        props.setDataObjectFormatIdentifierDocumentationReferences(Arrays.asList(new String[] {
            "http://test.com/dataobject.format.doc.ref1.txt", "http://test.com/dataobject.format.doc.ref2.txt" }));
 
        //commitment
        props.setCommitmentTypeId("urn:oid:1.2.840.113549.1.9.16.6.4");
        props.setCommitmentTypeIdQualifier("OIDAsURN"); //allowed values are empty string, "OIDAsURI", "OIDAsURN"; default value is empty string
        props.setCommitmentTypeIdDescription("description for commitment type ID");
        props.setCommitmentTypeIdDocumentationReferences(Arrays.asList(new String[] {"http://test.com/commitment.ref1.txt",
            "http://test.com/commitment.ref2.txt" }));
        // you can specify a commitment type qualifier either by simple text or an XML fragment with root element "CommitmentTypeQualifier"
        props.setCommitmentTypeQualifiers(Arrays.asList(new String[] {"commitment qualifier",
            "<c:CommitmentTypeQualifier xmlns:c=\"http://uri.etsi.org/01903/v1.3.2#\"><C>c</C></c:CommitmentTypeQualifier>" }));
 
 beanRegistry.bind("xmlSignatureProperties",props);
 beanRegistry.bind("keyAccessorDefault",keyAccessor);
 
 // you must reference the properties bean in the "xmlsecurity" URI
 from("direct:xades").to("xmlsecurity:sign://xades?keyAccessor=#keyAccessorDefault&properties=#xmlSignatureProperties")
                     .to("mock:result");

Copy to Clipboard Toggle word wrap
Expand
   ...
   <from uri="direct:xades" />
            <to
                uri="xmlsecurity:sign://xades?keyAccessor=#accessorRsa&amp;properties=#xadesProperties" />
            <to uri="mock:result" />
   ...
   <bean id="xadesProperties"
        class="org.apache.camel.component.xmlsecurity.api.XAdESSignatureProperties">
        <!-- For more properties see the the previous Java DSL example. 
             If you want to have a signing certificate then use the bean class DefaultXAdESSignatureProperties (see the previous Java DSL example). -->
        <property name="signaturePolicy" value="ExplicitId" />
        <property name="sigPolicyId" value="http://www.test.com/policy.pdf" />
        <property name="sigPolicyIdDescription" value="factura" />
        <property name="signaturePolicyDigestAlgorithm" value="http://www.w3.org/2000/09/xmldsig#sha1" />
        <property name="signaturePolicyDigestValue" value="Ohixl6upD6av8N7pEvDABhEL1hM=" />
        <property name="signerClaimedRoles" ref="signerClaimedRoles_XMLSigner" />
        <property name="dataObjectFormatDescription" value="Factura electrónica" />
        <property name="dataObjectFormatMimeType" value="text/xml" />
    </bean>
    <bean class="java.util.ArrayList" id="signerClaimedRoles_XMLSigner">
        <constructor-arg>
            <list>
                <value>Emisor</value>
                <value>&lt;ClaimedRole
                    xmlns=&quot;http://uri.etsi.org/01903/v1.3.2#&quot;&gt;&lt;test
                    xmlns=&quot;http://test.com/&quot;&gt;test&lt;/test&gt;&lt;/ClaimedRole&gt;</value>
            </list>
        </constructor-arg>
    </bean>
Copy to Clipboard Toggle word wrap

Headers

Expand
ヘッダー タイプ 説明
CamelXmlSignatureXAdESQualifyingPropertiesId
文字列 QualifyingProperties 要素の 'Id' 属性値の場合
CamelXmlSignatureXAdESSignedDataObjectPropertiesId
文字列 SignedDataObjectProperties 要素の 'Id' 属性値の場合
CamelXmlSignatureXAdESSignedSignaturePropertiesId
文字列 SignedSignatureProperties 要素の 'Id' 属性値の場合
CamelXmlSignatureXAdESDataObjectFormatEncoding
文字列 DataObjectFormat 要素の Encoding 要素の値
CamelXmlSignatureXAdESNamespace 文字列 XAdES 名前空間パラメーターの値を上書きします。
CamelXmlSignatureXAdESPrefix
文字列 XAdES 接頭辞パラメーターの値を上書きします。

XAdES バージョン 1.4.2 に関する制限

  • XAdES-T および XAdES-C の署名形式はサポートされません。
  • 署名側の部分のみが実装されます。検証用の部分は現在利用できません。
  • 'QualifyingPropertiesReference' 要素はサポートされません(仕様のセクション 6.3.2 を参照)。
  • SignaturePolicyId 要素に含まれる Transforms 要素のサポートはありません: SignaturePolicyIdentifier element
  • CounterSignature 要素のサポートなし --> UnsignedProperties 要素のサポートなし
  • 最大 1 つの DataObjectFormat 要素。署名されるデータオブジェクトが 1 つしかないため、複数の DataObjectFormat 要素は意味を持ちません(これは XML 署名エンドポイントへの受信メッセージボディーです)。
  • 最大 1 つの CommitmentTypeIndication 要素。署名されるデータオブジェクトが 1 つしかないため、複数の CommitmentTypeIndication要素は意味を持ちません(これは XML 署名エンドポイントへの受信メッセージボディーです)。
  • CommitmentTypeIndication 要素には、常に AllSignedDataObjects 要素が含まれます。CommitmentTypeIndication 要素内の ObjectReference 要素はサポートされません。
  • AllDataObjectsTimeStamp 要素はサポートされません。
  • IndividualDataObjectsTimeStamp 要素はサポートされません。

関連項目

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat