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 メッセージの署名情報を構成するには、 最初に、アプリケーション・サーバーがインストールされていることを確認します。
  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 Services Security が適用されます。

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

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

// Generate the com.ibm.websphere.wssecurity.wssapi.WSSFactory instance  (step: a)
   WSSFactory factory = com.ibm.websphere.wssecurity.wssapi.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 は、 応答コンシューマー (クライアント・サイド) でしかサポートされていません。


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



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