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

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

始める前に

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

  • WSSEncryption API を使用して、暗号化を構成し、暗号化方式を選択します。
  • 必要に応じて WSSEncryptPart API を使用して 暗号化パーツを構成します。

このタスクについて

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

WSSEncryption 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 メッセージを暗号化するには、 最初に、アプリケーション・サーバーがインストールされていることを確認します。
  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 Services Security を使用して保護されます。

以下の例は、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 を使用するか、または管理コンソールでポリシー・セットを構成するかして、データと鍵暗号化アルゴリズム方式を選択します。


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



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