WSSSignPart API を使用した署名済みパーツの追加

構成用ポリシー・セットを使用しなくても、Web Services Security API (WSS API) を使用することで SOAP メッセージをセキュアにすることができます。 署名するパーツを 要求生成プログラム (クライアント・サイド) バインディング用に構成するには、 WSSSignPart API を使用してメッセージの保全性を保護し、ダイジェスト・アルゴリズム方式と 変換アルゴリズム方式を構成します。WSSSignPart API は、 com.ibm.websphere.wssecurity.wssapi.signature パッケージに含まれています。

始める前に

署名情報を構成するには、WSS API を使用するか、管理コンソールから ポリシー・セットを構成します。署名情報を使用して SOAP メッセージを保護するには、 以下のタスクのいずれかを実行する必要があります。

  • シグニチャー情報の構成。
  • 署名済みパーツの構成 (必要な場合)。

このタスクについて

WebSphere® Application Server は、デフォルトのジェネレーターの 署名情報を使用してメッセージ・パーツに署名し、既存のダイジェストおよび 変換アルゴリズム (SHA1、TRANSFORM_EXC_C14N など) で XML デジタル署名を使用します。

署名情報は、生成されるメッセージに適用する保全性制約を 指定します。署名済みパーツは、メッセージの保全性確保のために 使用されます。メッセージ保全性の保護を強化する署名済みパーツを指定できます。

以下の表に、デジタル署名セキュリティー制約 (保全性) が定義される場合に 必須の署名済みパーツを示します。

表 1. 署名済みパーツ 情報. これらの署名済みパーツを使用して、メッセージを保護します。
署名済みパーツ 説明
keyword キーワードを使用して署名済みパーツを追加します。WebSphere Application Server は、署名済みパーツ用の以下のキーワードをサポートしています。
  • BODY
  • ADDRESSING_HEADERS
  • TIMESTAMP
WS-Addressing ヘッダーは暗号化されませんが、これに署名することはできます。
xpath XPath 式によって、必要な署名済みパーツを追加します。
header ヘッダー (QName で指定) を署名済みパーツとして追加します。
timestamp WSSTimestamp オブジェクトを署名済みパーツとして追加します。タイム・スタンプ情報を 指定すると、メッセージの生成日時とその有効期限が 指定されます。

ジェネレーター側の要求のメッセージ保護には、 さまざまなメッセージ・パーツを指定できます。WSSSignPart では、変換アルゴリズムの追加、ダイジェスト方式の設定、 ターゲットとしてのオブジェクトの設定、エレメントおよび署名済みパーツ (SOAP 本体、 WS-Addressing ヘッダー、タイム・スタンプ情報など) の指定が可能です。

署名情報については、特定のデフォルトの動作が発生します。WSSSignPart API を 使用する最も簡単な方法は、デフォルトの動作を使用することです (コード例を 参照してください)。署名済みパーツのデフォルトの動作には以下のようなものがあります。

表 2. 署名済みパーツのデフォルトの動作. いくつかの署名済みパーツの特性は、デフォルトで構成されます。
シグニチャーの決定項目 デフォルトの動作
署名する SOAP メッセージ・パーツ

WebSphere Application Server は、 署名してメッセージ保護に使用する以下の SOAP メッセージ・パーツをサポートしています。

  • WSSSignature.BODY
  • WSSSignature.ADDRESSING_HEADERS
  • WSSSignature.TIMESTAMP
使用するダイジェスト方式

ダイジェスト・アルゴリズム方式を設定します。<SigningInfo> エレメントで使用される <DigestMethod> エレメント内で指定されるダイジェスト方式アルゴリズム。

WebSphere Application Server は、 以下の事前構成済みダイジェスト・メソッドをサポートしています。
  • WSSSignPart.SHA1 (デフォルト値): http://www.w3.org/2000/09/xmldsig#sha1
  • WSSSignPart.SHA256: http://www.w3.org/2001/04/xmlenc#sha256
  • WSSSignPart.SHA512: http://www.w3.org/2001/04/xmlenc#sha512
使用する変換アルゴリズム 変換方式を追加します。変換アルゴリズムは、 <Transform> エレメント内で指定され、シグニチャーの変換アルゴリズムを 指定します。

WebSphere Application Server は、 以下の事前構成済み変換アルゴリズムをサポートしています。

  • WSSSignPart.TRANSFORM_EXC_C14N (デフォルト値): http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSSignPart.TRANSFORM_XPATH2_FILTER: http://www.w3.org/2002/06/xmldsig-filter2

    この変換方式を使用すると、Basic Security Profile (BSP) への準拠が 保証されます。

  • WSSSignPart.TRANSFORM_STRT10: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform
  • WSSSignPart.TRANSFORM_ENVELOPED_SIGNATURE: http://www.w3.org/2000/09/xmldsig#enveloped-signature

手順

  1. WSS API (WSSSignPart) で Web Services Security を使用可能にするには、最初に、アプリケーション・サーバーがインストールされていることを確認します。
  2. WSSSignPart API を使用してメッセージ・パーツに署名し、 SOAP メッセージでアルゴリズムを指定します。 署名済みパーツの WSS API プロセスは、 以下の手順のとおりです。
    1. WSSFactory.getInstance() を使用して WSS API 実装インスタンスを取得します。
    2. WSSFactory インスタンスから WSSGenerationContext インスタンスを作成します。
    3. WSSFactory から SecurityToken を作成して、 署名用の鍵を構成します。
    4. SecurityToken を使用して、WSSFactory インスタンスから WSSSignature を 作成します。
    5. WSSFactory インスタンスから WSSSignPart を作成します。
    6. デフォルトが該当しない場合は、署名するパーツと、 ステップ g またはステップ h で指定したダイジェスト方式または変換方式を設定します。
    7. ダイジェスト方式を設定します (デフォルトが該当しない場合)。
    8. 変換方式を設定します (デフォルトが該当しない場合)。
    9. WSSSignPart を WSSSignature に追加します。 WSSSignPart を WSSSignature に設定した後は、WSSSignature で指定するデフォルトの署名対象パーツは 無視されます。
    10. WSSSignature を WSSGenerationContext に追加します。
    11. SOAPMessageContext を使用して WSSGenerationContext.process() を呼び出します。

タスクの結果

これで、バインディング・ファイルのジェネレーター・セクションの署名済みパーツを 構成するためのステップが完了しました。エラー条件がある場合は、WSSException が発生します。正常に完了した場合は WSSGenerationContext.process() が呼び出され、 SOAP メッセージに Web Services Security が適用されます。

次の例は、WSSSignPart API で定義されるすべてのメソッドを 使用したサンプル・コードです。

// Get the message context
   Object msgcontext = getMessageContext();

// Generate the WSSFactory instance (step: a)
   WSSFactory factory = WSSFactory.getInstance();

// Generate WSSGenerationContext instance  (step: b)
   WSSGenerationContext gencont = factory.newWSSGenerationContext();
		
// Generate callback handler
   X509GenerateCallbackHandler callbackHandler = new 
      X509GenerateCallbackHandler
      "",
      "dsig-sender.ks",
      "jks",
      "client".toCharArray(),
      "soaprequester",
      "client".toCharArray(),
      "CN=SOAPRequester, OU=TRL, O=IBM, ST=Kanagawa, C=JP", null);

// Generate the security token used to the signature  (step: c)
   SecurityToken token = factory.newSecurityToken(X509Token.class, callbackHandler);

// Generate WSSSignature instance (step: d)
   WSSSignature sig = factory.newWSSSignature(token);

// Set the part specified by WSSSignPart  (step: e)
   WSSSignPart sigPart = factory.newWSSSignPart();

// Set the part specified by WSSSignPart  (step: f)
   sigPart.setSignPart(WSSSignature.BODY);

// Set the digest method specified by WSSSignPart  (step: g)
   sigPart.setDigestMethod(WSSSignPart.SHA256);

// Set the transform method specified by WSSSignPart  (step: h)
   sigPart.setTransformMethod(WSSSignPart.TRANSFORM_STRT10);

// Add the part specified by WSSSignPart  (step: i)
   sig.addSignPart(sigPart);

// Add the WSSSignature to the WSSGenerationContext  (step: j)
   gencont.add(sig);
		
// Generate the WS-Security header  (step: k)
gencont.process(msgcontext);
注: 署名には秘密鍵が使用されるため、 X509GenerationCallbackHandler には鍵パスワードが必要です。

次のタスク

WSSVerifyPart API を使用するか、管理コンソールからポリシー・セットを構成して、 コンシューマー側で署名済みパーツを検証します。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_confsignaturepartgen
ファイル名:twbs_confsignaturepartgen.html