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

WSSEncryption API を使用した SOAP メッセージの暗号化

構成用ポリシー・セットを使用しなくても、Web Services Security API (WSS API) を使用することで SOAP メッセージをセキュアにすることができます。 ジェネレーター側でクライアントを要求暗号化用に構成するには、 WSSEncryption API を使用して SOAP メッセージを暗号化します。WSSEncryption API で、 クライアントを構成するときに暗号化する要求 SOAP メッセージ・パーツを指定します。

始める前に

WSS API を使用するか、管理コンソールでポリシー・セットを使用するかして、 暗号化を有効にし、ジェネレーター・セキュリティー・トークンを SOAP メッセージに追加できます。 SOAP メッセージをセキュアにするには、必要に応じて WSS API を使用して以下の暗号化タスクを実行します。

このタスクについて

ジェネレーター側の暗号化情報は、要求ジェネレーター (クライアント・サイド) バインディングの 発信 SOAP メッセージを暗号化するために使用されます。 クライアント・ジェネレーター構成は、 プロバイダー・コンシューマーの構成と一致する必要があります。

機密性設定では、生成されたメッセージに機密性の制約が適用される必要があります。 これらの制約には、暗号化する必要がある、生成メッセージ内のメッセージ・パーツを指定することと、 暗号化された Nonce エレメントおよびタイム・スタンプ・エレメントの付加先のメッセージ・パーツを指定することも含まれます。

以下の暗号化パーツを構成できます。

表 1. 暗号化パーツ
暗号化パーツ 説明
part WSSEncryptPart オブジェクトを暗号化パーツのターゲットとして追加します。
keyword キーワードを使用して暗号化パーツを追加します。WebSphere Application Server は以下のキーワードをサポートします。
  • BODY_CONTENT
  • SIGNATURE
xpath XPath 式を使用して暗号化パーツを追加します。
シグニチャー WSSignature コンポーネントを暗号化パーツのターゲットとして追加します。
header SOAP ヘッダー (QName で指定する) を暗号化パーツのターゲットとして追加します。
securityToken SecurityToken オブジェクトを暗号化パーツのターゲットとして追加します。

暗号化では、ある決まったデフォルトの動作が行われます。 WSSEncryption API を使用する一番簡単な方法は、デフォルトの動作を使用することです (サンプル・コードを参照)。

WSSEncryption は、鍵暗号化アルゴリズム、データ暗号化アルゴリズム、セキュリティー・トークン参照方式、および暗号化パーツ (SOAP 本体の内容、シグニチャーなど) のデフォルトを提供します。 暗号化のデフォルトの動作には、以下のものがあります。

表 2. 暗号化における決定内容
暗号化における決定内容 デフォルトの動作
キーワードを使用して暗号化する SOAP メッセージ・パーツ

キーワードを使用して追加できる暗号化パーツを設定します。 デフォルトの暗号化パーツは、BODY_CONTENT と SIGNATURE です。 WebSphere Application Server は、以下のキーワードの使用をサポートします。

  • WSSEncryption.BODY_CONTENT
  • WSSEncryption.SIGNATURE
選択するデータ暗号化方式 (アルゴリズム)

データ暗号化方式を設定します。データ暗号化方式と鍵暗号化方式の両方を指定できます。 デフォルトのデータ暗号化アルゴリズム方式は AES 128 です。 WebSphere Application Server は、以下のデータ暗号化方式をサポートします。

  • WSSEncryption.AES128: http://www.w3.org/2001/04/xmlenc#aes128-cbc
  • WSSEncryption.AES192: http://www.w3.org/2001/04/xmlenc#aes192-cbc
  • WSSEncryption.AES256: http://www.w3.org/2001/04/xmlenc#aes256-cbc
  • WSSEncryption.TRIPLE_DES: http://www.w3.org.2001/04/xmlenc#tripledes-cbc
鍵を暗号化するかどうか (isEncrypt)

鍵を暗号化するかどうかを指定します。値は true または false です。 デフォルト値では鍵が暗号化されます (true)。

選択する鍵暗号化方式 (アルゴリズム)

鍵暗号化方式を設定します。データ暗号化方式と鍵暗号化方式の両方を指定できます。 デフォルトの鍵暗号化アルゴリズム方式は、鍵ラップ RSA OAEP です。 WebSphere Application Server は、以下の鍵暗号化方式をサポートします。

  • WSSEncryption.KW_AES128: http://www.w3.org/2001/04/xmlenc#kw-aes128
  • WSSEncryption.KW_AES192: http://www.w3.org/2001/04/xmlenc#kw-aes192
  • WSSEncryption.KW_AES256: http://www.w3.org/2001/04/xmlenc#kw-aes256
  • WSSEncryption.KW_RSA_OAEP: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
  • WSSEncryption.KW_RSA15: http://www.w3.org/2001/04/xmlenc#rsa-1_5
  • WSSEncryption.KW_TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#kw-tripledes
指定するセキュリティー・トークン (securityToken)

SecurityToken を設定します。 デフォルトのセキュリティー・トークン・タイプは X509Token です。 WebSphere Application Server は、 次の事前構成済みコンシューマー・トークン・タイプを提供します。

  • 派生鍵トークン
  • X.509 トークン
使用するトークン参照 (refType) セキュリティー・トークン参照のタイプを設定します。デフォルトの トークン参照は SecurityToken.REF_KEYID です。WebSphere Application Server は、以下の トークン参照タイプをサポートします。
  • SecurityToken.REF_KEYID
  • SecurityToken.REF_STR
  • SecurityToken.REF_EMBEDDED
  • SecurityToken.REF_THUMBPRINT
MTOM を使用するかどうか (mtomOptimize) Message Transmission Optimization Mechanism (MTOM) 最適化を暗号化パーツに設定します。

プロシージャー

  1. WSSEncryption API を使用して SOAP メッセージを暗号化するには、 初めに、WebSphere Application Server Feature Pack がインストール済みであることを確認します。
  2. 暗号化の WSS API プロセスでは、以下の処理ステップを実行します。
    1. WSSFactory.getInstance() を使用して WSS API 実装インスタンスを取得します。
    2. WSSFactory インスタンスから WSSGenerationContext インスタンスを作成します。
    3. 暗号化に使用された WSSFactory から SecurityToken を作成します。
    4. SecurityToken を使用して WSSFactory インスタンスから WSSEncryption を作成します。 WSSEncryption のデフォルトの動作は、本体の内容とシグニチャーを暗号化することです。
    5. 既存パーツが適切でない場合は、暗号化する新規パーツを WSSEncryption に追加します。 addEncryptPart()、addEncryptHeader()、 または addEncryptPartByXPath() を呼び出した後、デフォルト・パーツはクリアされます。
    6. 鍵を暗号化しない場合は、encryptKey(false) を呼び出します。
    7. デフォルトの方式が適切でない場合は、データ暗号化方式を設定します。
    8. デフォルトの方式が適切でない場合は、鍵暗号化方式を設定します。
    9. デフォルトのトークン参照が適切でない場合は、トークン参照を設定します。
    10. WSSEncryption を WSSConsumingContext に追加します。
    11. SOAPMessageContext を使用して WSSGenerationContext.process() を呼び出します。

結果

暗号化時にエラー条件が生じると、WSSException が発生します。 正常な場合、 API が WSSGenerationContext.process() を呼び出し、WS-Security ヘッダーが生成されて、 SOAP メッセージが Web サービス・セキュリティーを使用して保護されます。

以下の例は、WSSEncryption に定義されている方式を使用するサンプル・コードです。

// 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(
			  "",
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"bob",
			  null, 
"CN=Bob, O=IBM, C=US",
null);

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

// Generate WSSEncryption instance (step: d)
WSSEncryption enc = factory.newWSSEncryption(token);

// Set the part to be encrypted (step: e)
// DEFAULT: WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE

// Set the part specified by the keyword (step: e)
   enc.addEncryptPart(WSSEncryption.BODY_CONTENT);

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

// Set the part specified by WSSSignature (step: e)
   SecurityToken sigToken = getSecurityToken();
      WSSSignature sig = factory.newWSSSignature(sigToken);
   enc.addEncryptPart(sig);

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

// sSt 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']");
   enc.addEncryptPartByXPath(sb.toString());

// Set whether the key is encrypted (step: f)
// DEFAULT: true
   enc.encryptKey(true);

// Set the data encryption method (step: g)
// DEFAULT: WSSEncryption.AES128
   enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);

// Set the key encryption method (step: h)
// DEFAULT: WSSEncryption.KW_RSA_OAEP
   enc.setEncryptionMethod(WSSEncryption.KW_RSA15);

// Set the token reference (step: i)
// DEFAULT: SecurityToken.REF_KEYID 
	 enc.setTokenReference(SecurityToken.REF_STR);

// Add the WSSEncryption to the WSSGenerationContext (step: j)
  gencont.add(enc);
// Process the WS-Security header (step: k)
gencont.process(msgcontext);
注: X509GenerationCallbackHandler は、 暗号化に公開鍵を使用しているので、鍵パスワードを必要としません。 Java 鍵ストアから公開鍵を取得する場合、パスワードは不要です。

次の作業

選択する暗号化方式をまだ指定していない場合は、 WSS API を使用するか、または管理コンソールでポリシー・セットを構成するかして、データと鍵暗号化アルゴリズム方式を選択します。




関連概念
cwbs_wssencryptedheader.html
関連タスク
ジェネレーター・バインディング向け暗号化方式の選択
管理コンソールを使用したメッセージ・パーツの保護
twbs_confwssdecryption.html
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_confwssencryption.html