WebSphere Application Server Version 6.1 Feature Pack for Web Services   
             オペレーティング・システム: AIX , HP-UX, i5/OS, Linux, Solaris, Windows, Windows Vista, z/OS

             目次と検索結果のパーソナライズ化
             New or updated topic for this feature pack

WSSSignature API を使用したシグニチャー情報の構成

構成用ポリシー・セットを使用しなくても、Web Services Security API (WSS API) を使用することで SOAP メッセージをセキュアにすることができます。 クライアント・サイド要求の ジェネレーター・バインディング・セクションでシグニチャー情報を構成するには、 WSSSignature API を使用します。WSSSignature API は、com.ibm.websphere.wssecurity.wssapi.signature パッケージに 含まれています。

始める前に

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

このタスクについて

WebSphere Application Server は、デフォルト・ジェネレーターの 署名情報を使用してメッセージ・パーツに署名し、RSA-SHA1、HMAC-SHA1 など既存の アルゴリズムで XML デジタル・シグニチャーを使用します。

XML Signature は、鍵情報を記述するための多くのメソッドを定義し、 新規メソッドの定義を使用可能にします。XML Signature を 使用するときには、たいていの場合、XML 正規化 (C14N) が必要になります。情報は、シリアライズされた XML 文書内で、さまざまな方法で表すことができます。 C14N プロセスは、XML 情報を正規化するために使用されます。正規化される情報が このアルゴリズムに依存するため、該当する C14N アルゴリズムを 選択します。

署名情報は、生成されるメッセージに適用する 保全性制約を指定します。この制約には、 生成メッセージ内のどのメッセージ・パーツにデジタル署名を入れる必要があるのかを指定すること、 デジタル署名済みの Nonce およびタイム・スタンプ・エレメントが付加されるメッセージ・パーツを 指定することが含まれます。以下のシグニチャーおよび関連のあるシグニチャー・パーツ情報が 構成されます。

表 1. シグニチャー・パーツ情報
シグニチャー・パーツ 説明
keyword
キーワードを使用してシグニチャー・パーツを追加します。シグニチャー・パーツには 次のキーワードを使用します。
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
WS-Addressing ヘッダーは暗号化されませんが、これに署名することはできます。
xpath XPath 式によってシグニチャー・パーツを追加します。
part WSSSignPart オブジェクトをシグニチャー・パーツのターゲットとして 追加します。
timestamp WSSTimestamp オブジェクトをシグニチャー・パーツのターゲットとして 追加します。タイム・スタンプ情報を指定すると、メッセージの生成日時とその有効期限も 指定されます。
header ヘッダー (QName で指定) をシグニチャー・パーツのターゲットとして 追加します。
securityToken SecurityToken オブジェクトをシグニチャー・パーツのターゲットとして 追加します。

署名情報については、特定のデフォルトの動作が発生します。WSSSignature API を 使用する最も簡単な方法は、デフォルトの動作を使用することです (コード例を 参照してください)。署名方式、正規化方式、セキュリティー・トークン参照、 およびシグニチャー・パーツでは、デフォルト値は WSS API によって 定義されます。

表 2. シグニチャーのデフォルトの動作
シグニチャーの決定項目 デフォルトの動作
使用するキーワード キーワードを設定します。WebSphere Application Server は デフォルトで以下のキーワードをサポートします。
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
使用するシグニチャー方式 シグニチャー・アルゴリズムを設定します。デフォルトのシグニチャー方式は RSA SHA1 です。WebSphere Application Server は、以下の事前構成されたシグニチャー方式をサポートします。
  • WSSSignature.RSA_SHA1: http://www.w3.org/2000/09/xmldsig#rsa-sha1
  • WSSSignature.HMAC_SHA1: http://www.w3.org/2000/09/xmldsig#hmac-sha1
DSA-SHA1 デジタル署名方式 (http://www.w3.org/2000/09/xmldsig#dsa-sha1) は サポートしていません。
使用する正規化方式 正規化アルゴリズムを設定します。デフォルトの 正規化方式は EXC C14N です。WebSphere Application Server は、 以下の事前構成の正規化方式をサポートします。
  • WSSSignature.EXC_C14N; http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSSignature.C14N: http://www.w3.org/2001/10/xml-c14n#
シグニチャー確認が必要かどうか シグニチャーの確認が必要かどうかを設定します。デフォルト値は false です。シグニチャー確認は、 OASIS Web Services Security バージョン 1.1 仕様で定義されます。必要な場合、 シグニチャー確認の値は保管され、応答メッセージでシグニチャー確認を生成した メッセージを受信した後で、シグニチャー確認の検証を行う際に 使用されます。この方式は要求側のためのものです。
使用するセキュリティー・トークン

SecurityToken を設定します。トークン・タイプで、メッセージの署名および妥当性検査に使用するトークンのタイプを指定します。 デフォルトの トークン・タイプは X.509 トークンです。

WebSphere Application Server は、 次の事前構成済みコンシューマー・トークン・タイプを提供します。

  • 派生鍵トークン
  • X509 トークン

必要に応じてカスタム・トークン・タイプを作成することもできます。

設定するトークン参照 refType を設定します。トークン参照のタイプのデフォルト値は SecurityToken.REF_STR です。WebSphere Application Server は、 以下の事前構成済みトークン参照タイプをサポートしています。
  • SecurityToken.REF_STR
  • SecurityToken.REF_KEYID
  • SecurityToken.REF_EMBEDDED
  • SecurityToken.REF_THUMBPRINT

WSSSignature.requireSignatureConfirmation() が呼び出されると、 WSSSignature API は、応答メッセージにシグニチャー確認が組み込まれていると 予想します。

プロシージャー

  1. WSS API で SOAP メッセージの署名情報を構成するには、 まず、WebSphere Application Server Feature Pack がインストールされていることを 確認します。
  2. WSSSignature API を使用してメッセージ・パーツに署名し、 SOAP メッセージでアルゴリズムを指定します。 シグニチャーの WSS API プロセスは、 以下の手順のとおりです。
    1. WSSFactory.getInstance() を使用して WSS API 実装インスタンスを取得します。
    2. WSSFactory インスタンスから WSSGenerationContext インスタンスを 作成します。 WSSGenerationContext は、JAX-WS クライアント・アプリケーションで 呼び出す必要があります。
    3. WSSFactory から SecurityToken を作成して、 署名用の鍵を構成します。
    4. SecurityToken を使用して、WSSFactory インスタンスから WSSSignature を 作成します。 WSSSignature のデフォルトの動作は、 シグニチャー・パーツ BODY、ADDRESSING_HEADERS、TIMESTAMP に署名することです。
    5. デフォルトのパーツが該当しない場合は、署名するパーツを追加します。 ダイジェスト方式または変換方式を変更する場合は、WSSSignPart を 作成して WSSSignature に追加してください。
    6. WSSSignaturePart を WSSSignature に追加します。 シグニチャー確認が 適用される場合は、requiredSignatureConfirmation() を 呼び出します。
    7. 正規化方式を設定します (デフォルトが適切でない場合)。
    8. シグニチャー方式を設定します (デフォルトが適切でない場合)。
    9. トークン参照を設定します (デフォルトが適切でない場合)。
    10. WSSSignature を WSSGenerationContext に追加します。
    11. SOAPMessageContext を使用して WSSGenerationContext.process() を呼び出します。

結果

これで、バインディングのジェネレーター・セクションの署名を 構成するためのステップが完了しました。メッセージ・パーツへの署名時にエラー条件が生じると、 WSSException が提供されます。正常に完了した場合は WSSGenerationContext.process() が呼び出され、 SOAP メッセージに Web サービス・セキュリティーが適用されます。

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

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

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

// Generate the WSSGenerationContext instance  (step: b)
   WSSGenerationContext gencont = factory.newWSSGenerationContext();

// Generate the 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 to be used for the signature  (step: c)
   SecurityToken token = factory.newSecurityToken(X509Token.class,
                                                  callbackHandler);

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

// Set the part to be signed  (step: e)
// DEFAULT: WSSSignature.BODY, WSSSignature.ADDRESSING_HEADERS,
//          and WSSSignature.TIMESTAMP.

// Set the part in the SOAP Header specified by QName  (step: e)
      sig.addSignHeader(new
                        QName("http://www.w3.org/2005/08/addressing", 
                        "MessageID"));

// Set the part specified by the keyword  (step: e)
      sig.addSignPart(WSSSignature.BODY);

// Set the part specified by SecurityToken  (step: e)
   UNTGenerateCallbackHandler untCallbackHandler = new 
      UNTGenerateCallbackHandler("Chris", "sirhC");
      SecurityToken unt = factory.newSecurityToken(UsernameToken.class, 
                                                   untCallbackHandler);
      sig.addSignPart(unt);

// Set the part specified by WSSSignPart  (step: e)
   WSSSignPart sigPart = factory.newWSSSignPart();
      sigPart.setSignPart(WSSSignature.TIMESTAMP);
      sigPart.setDigestMethod(WSSSignPart.SHA256);
      sig.addSignPart(sigPart);

// Set the part specified by WSSTimestamp  (step: e)
   WSSTimestamp timestamp = factory.newWSSTimestamp();
      sig.addSignPart(timestamp);

// Set the part specified by XPath expression (step: e)
   		StringBuffer sb = new StringBuffer();
      sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
         and local-name()='Envelope']");
      sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' 
         and local-name()='Body']");
      sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping' 
         and local-name()='Ping']");
      sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
         and local-name()='Text']");		
      sig.addSignPartByXPath(sb.toString());

// Set to apply the signature confirmation  (step: f)
      sig.requireSignatureConfirmation();

// Set the canonicalization method  (step: g)
// DEFAULT: WSSSignature.EXC_C14N
      sig.setCanonicalizationMethod(WSSSignature.C14N);

// Set the signature method  (step: h)
// DEFAULT: WSSSignature.RSA_SHA1
      sig.setSignatureMethod(WSSSignature.HMAC_SHA1);

// Set the token reference  (step: i)
// DEFAULT: SecurityToken.REF_STR
      sig.setTokenReference(SecurityToken.REF_KEYID);
	
// Add the WSSSignature to WSSGenerationContext  (step: j)
   gencont.add(sig);

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

次の作業

デフォルト値とは別のアルゴリズム方式を使用する場合は、 次にアルゴリズム方式を選択します。アルゴリズム方式を変更する 必要がない場合は、次に WSSVerification API を使用してシグニチャーを検証し、 バインディングのコンシューマー・セクションでアルゴリズム方式を指定します。WSSVerification API は、 応答コンシューマー (クライアント・サイド) でしかサポートされていません。




関連概念
XML デジタル・シグニチャー
シグニチャーの確認
関連タスク
WSS API を使用したジェネレーター・セキュリティー・トークンの構成
WSSVerification API によるシグニチャーの検証
WSS API を使用してメッセージの保全性を保護するための、 ジェネレーター署名情報の構成
関連資料
WSSSignature API を使用したデジタル署名方式
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 4:10:06 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/ae/twbs_confsignaturegen.html