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

WSSVerification API によるシグニチャーの検証

構成用ポリシー・セットを使用しなくても、Web Services Security API (WSS API) を使用することで SOAP メッセージをセキュアにすることができます。 クライアント・サイド要求の コンシューマー・バインディング・セクションで署名情報を確認するには、 WSSVerification API を使用します。検証するアルゴリズム方式と SOAP メッセージの シグニチャー・パーツも指定する必要があります。 WSSVerification API は、com.ibm.websphere.wssecurity.wssapi.verification パッケージに 含まれています。

始める前に

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

このタスクについて

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

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

以下の表に、デジタル・シグニチャー・セキュリティー制約 (保全性) が 定義される場合の、必須およびオプションのバインディング情報を 示します。

表 1. シグニチャー検証パーツ
検証パーツ 説明
キーワード
キーワードによって、検証のターゲットとして 必要なシグニチャー・パーツを追加します。ジェネレーター側の要求のメッセージ保護には、 さまざまなメッセージ・パーツを指定できます。必須のシグニチャー検証パーツには 以下のキーワードを使用します。
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
WS-Addressing ヘッダーは暗号化されませんが、これに署名することはできます。
xpath XPath 式によって検証パーツを追加します。
part WSSVerifyPart オブジェクトを検証パーツとして追加します。
header ヘッダー (QName で指定) を検証パーツとして 追加します。

シグニチャー検証情報では、 特定のデフォルトの動作が発生します。WSSVerification API を使用する最も簡単な方法は、 デフォルトの動作を使用することです。

ダイジェスト方式、 変換方式、セキュリティー・トークン、および必須検証パーツでは、 デフォルト値は WSS API によって定義されます。

表 2. シグニチャー検証の デフォルトの動作
シグニチャー検証の決定項目 デフォルトの動作
使用するシグニチャー方式 (アルゴリズム) シグニチャー・アルゴリズム方式を設定します。データ暗号化、 シグニチャーおよび正規化の両方を指定できます。デフォルトのシグニチャー方式は RSA SHA1 です。WebSphere Application Server は、以下の事前構成されたシグニチャー方式をサポートします。
  • WSSVerification.RSA_SHA1: http://www.w3.org/2000/09/xmldsig#rsa-sha1
  • WSSVerification.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 は、 以下の事前構成の正規化方式をサポートします。
  • WSSVerification.EXC_C14N: http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSVerification.C14N: http://www.w3.org/2001/10/xml-c14n#
シグニチャー確認が必要かどうか WSSSignature API でシグニチャー確認が必要と 指定した場合は、WSSVerification API が、受信時にシグニチャー確認値が 添付されている応答メッセージでのシグニチャー確認値を 検証します。シグニチャー確認は、OASIS Web Services Security バージョン 1.1 仕様で 定義されます。

デフォルトのシグニチャー確認は false です。

指定するセキュリティー・トークン (securityToken)

securityToken オブジェクトをシグニチャー・パーツとして追加します。 WebSphere Application Server で、検証に使用するトークン情報を設定します。

WebSphere Application Server は、次の事前構成済み署名用トークンをサポートしています。

  • X.509 トークン
  • 派生鍵トークン
トークンで必要な情報には、トークンのクラス、 コールバック・ハンドラー情報、JAAS ログイン・モジュールの名前などが含まれます。

プロシージャー

  1. WSSVerification API で SOAP メッセージのシグニチャーを 検証するには、まず、WebSphere Application Server Feature Pack がインストールされていることを確認します。
  2. WSSVerification API を使用して、検証するメッセージ・パーツを設定し、 SOAP メッセージでアルゴリズムを指定します。 シグニチャー検証のための WSS API プロセスは、 以下の手順のとおりです。
    1. WSSFactory.getInstance() を使用して WSS API 実装インスタンスを取得します。
    2. WSSFactory インスタンスから WSSConsumingContext インスタンスを 作成します。
    3. WSSConsumingContext が JAX-WS プロバイダー実装クラスで呼び出されることを 確認します。 JAX-WS プログラミング・モデルの 性質上、JAX-WS プロバイダーを実装する必要があります。また、SOAP メッセージ・シグニチャーの検証には、 このプロバイダーが WSSConsumingContext を呼び出す必要があります。
    4. WSSFactory インスタンスから WSSVerification を作成します。
    5. 検証するパーツを追加します。 ダイジェスト方式 または変換方式を変更する場合は、WSSVerifyPart を作成して WSSVerification に 設定します。
    6. 正規化方式の候補を設定します (デフォルトが 適切でない場合)。
    7. シグニチャー方式の候補を設定します (デフォルトが 適切でない場合)。
    8. セキュリティー・トークンの候補を設定します (デフォルトが適切でない場合)。
    9. シグニチャー確認が適用される場合は、requireSignatureConfirmation() を 呼び出します。
    10. WSSVerification を WSSConsumingContext に追加します。
    11. SOAP メッセージ・コンテキストで WSSConsumingContext.process() を呼び出します。

結果

これで、バインディングのコンシューマー・セクションの署名を 検証するためのステップが完了しました。エラー条件がある場合は、WSSException が発生します。正常に完了した場合は WSSConsumingContext.process() が呼び出され、 SOAP メッセージに Web サービス・セキュリティーが適用されます。

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

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

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

// Generate the WSSConsumingContext instance (step: b)
   WSSConsumingContext concont = factory.newWSSConsumingContext();


// Generate the certificate list
	 String certpath = "c:/WebSphere/AppServer/etc/ws-security/samples/intca2.cer";
// The location of the X509 certificate file
	 X509Certificate x509cert = null;
	 try {
		    InputStream is = new FileInputStream(certpath);
		    CertificateFactory cf = CertificateFactory.getInstance("X.509");
		    x509cert = (X509Certificate)cf.generateCertificate(is);
	      } catch(FileNotFoundException e1){
		      throw new WSSException(e1);
	      } catch (CertificateException e2) {
		      throw new WSSException(e2);
	      }
      Set<Object> eeCerts = new HashSet<Object>();
	      eeCerts.add(x509cert);  
// Create the certificate store
	  java.util.List<CertStore> certList = new java.util.ArrayList<CertStore>();
	  CollectionCertStoreParameters certparam = new CollectionCertStoreParameters(eeCerts);
	  CertStore cert = null;
	 try {
		  cert = CertStore.getInstance("Collection", certparam, "IBMCertPath");
	  } catch (NoSuchProviderException e1) {
		  throw new WSSException(e1);
	  } catch (InvalidAlgorithmParameterException e2) {
		  throw new WSSException(e2);
	  } catch (NoSuchAlgorithmException e3) {
		  throw new WSSException (e3);
	  }
	  if(certList != null ){
		  certList.add(cert);
	  }
// Generate the callback handler
	  X509ConsumeCallbackHandler callbackHandler = new X509ConsumeCallbackHandler(
			  "dsig-receiver.ks", 
			  "jks",
			  "server".toCharArray(), 
			  certList, 
			  java.security.Security.getProvider("IBMCertPath")
	  );

// Generate the WSSVerification instance (step: d)
	 WSSVerification ver = factory.newWSSVerification(X509Token.class, callbackHandler);

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

// Set the part in the SOAP header to be specified by QName (step: e)
	    ver.addRequiredVerifyHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));

// Set the part to be specified by the keyword (step: e)
	    ver.addRequiredVerifyPart(WSSVerification.BODY);

// Set the part to be specified by WSSVerifyPart (step: e)
	 WSSVerifyPart verPart = factory.newWSSVerifyPart();
	    verPart.setRequiredVerifyPart(WSSVerification.BODY);
	    verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
	    ver.addRequiredVerifyPart(verPart);

// 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']");		
	    ver.addRequiredVerifyPartByXPath(sb.toString());


// Set one or more canonicalization method candidates for verification (step: f)
// DEFAULT : WSSVerification.EXC_C14N
	   ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
	   ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);

// Set one or more signature method candidates for verification (step: g)
// DEFAULT : WSSVerification.RSA_SHA1
	   ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);

// Set the candidate security token to used for the verification (step: h)
	 X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
	   ver.addToken(X509Token.class, callbackHandler2);


// Set the flag to require the signature confirmation (step: i)
	  ver.requireSignatureConfirmation();

// Add the WSSVerification to the WSSConsumingContext (step: j)
	 concont.add(ver);

//Validate the WS-Security header (step: k)
concont.process(msgcontext);

次の作業

シグニチャーの検証と SOAP メッセージに対するアルゴリズム方式の設定を 終えると、ダイジェスト方式や変換方式を設定できるようになります。 これらの方式を設定するには、WSSVerifyPart API を使用するか、 管理コンソールからポリシー・セットを構成します。




関連タスク
WSSVerifyPart API を使用した署名済みパーツの検証
WSS API を使用したコンシューマー・セキュリティー・トークンの構成
ポリシー・セットを使用したメッセージ・パーツの署名と暗号化
WSSSignature API を使用したシグニチャー情報の構成
WSS API を使用した応答コンシューマーでのメッセージの保護
関連資料
WSSVerification 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_confsignaturecon.html