構成用ポリシー・セットを使用しなくても、Web Services Security API (WSS API) を使用することで SOAP メッセージをセキュアにすることができます。 ジェネレーター側でクライアントを要求暗号化用に構成するには、 WSSEncryption API を使用して SOAP メッセージを暗号化します。WSSEncryption API で、 クライアントを構成するときに暗号化する要求 SOAP メッセージ・パーツを指定します。
WSS API を使用するか、管理コンソールでポリシー・セットを使用するかして、 暗号化を有効にし、ジェネレーター・セキュリティー・トークンを SOAP メッセージに追加できます。 SOAP メッセージをセキュアにするには、必要に応じて WSS API を使用して以下の暗号化タスクを実行します。
ジェネレーター側の暗号化情報は、要求ジェネレーター (クライアント・サイド) バインディングの 発信 SOAP メッセージを暗号化するために使用されます。 クライアント・ジェネレーター構成は、 プロバイダー・コンシューマーの構成と一致する必要があります。
機密性設定では、生成されたメッセージに機密性の制約が適用される必要があります。 これらの制約には、暗号化する必要がある、生成メッセージ内のメッセージ・パーツを指定することと、 暗号化された Nonce エレメントおよびタイム・スタンプ・エレメントの付加先のメッセージ・パーツを指定することも含まれます。
以下の暗号化パーツを構成できます。
暗号化パーツ | 説明 |
---|---|
part | WSSEncryptPart オブジェクトを暗号化パーツのターゲットとして追加します。 |
keyword | キーワードを使用して暗号化パーツを追加します。WebSphere Application Server は以下のキーワードをサポートします。
|
xpath | XPath 式を使用して暗号化パーツを追加します。 |
シグニチャー | WSSignature コンポーネントを暗号化パーツのターゲットとして追加します。 |
header | SOAP ヘッダー (QName で指定する) を暗号化パーツのターゲットとして追加します。 |
securityToken | SecurityToken オブジェクトを暗号化パーツのターゲットとして追加します。 |
暗号化では、ある決まったデフォルトの動作が行われます。 WSSEncryption API を使用する一番簡単な方法は、デフォルトの動作を使用することです (サンプル・コードを参照)。
WSSEncryption は、鍵暗号化アルゴリズム、データ暗号化アルゴリズム、セキュリティー・トークン参照方式、および暗号化パーツ (SOAP 本体の内容、シグニチャーなど) のデフォルトを提供します。 暗号化のデフォルトの動作には、以下のものがあります。
暗号化における決定内容 | デフォルトの動作 |
---|---|
キーワードを使用して暗号化する SOAP メッセージ・パーツ | キーワードを使用して追加できる暗号化パーツを設定します。 デフォルトの暗号化パーツは、BODY_CONTENT と SIGNATURE です。 WebSphere Application Server は、以下のキーワードの使用をサポートします。
|
選択するデータ暗号化方式 (アルゴリズム) | データ暗号化方式を設定します。データ暗号化方式と鍵暗号化方式の両方を指定できます。 デフォルトのデータ暗号化アルゴリズム方式は AES 128 です。 WebSphere Application Server は、以下のデータ暗号化方式をサポートします。
|
鍵を暗号化するかどうか (isEncrypt) | 鍵を暗号化するかどうかを指定します。値は true または false です。 デフォルト値では鍵が暗号化されます (true)。 |
選択する鍵暗号化方式 (アルゴリズム) | 鍵暗号化方式を設定します。データ暗号化方式と鍵暗号化方式の両方を指定できます。 デフォルトの鍵暗号化アルゴリズム方式は、鍵ラップ RSA OAEP です。 WebSphere Application Server は、以下の鍵暗号化方式をサポートします。
|
指定するセキュリティー・トークン (securityToken) | SecurityToken を設定します。 デフォルトのセキュリティー・トークン・タイプは X509Token です。 WebSphere Application Server は、 次の事前構成済みコンシューマー・トークン・タイプを提供します。
|
使用するトークン参照 (refType) | セキュリティー・トークン参照のタイプを設定します。デフォルトの
トークン参照は SecurityToken.REF_KEYID です。WebSphere Application Server は、以下の
トークン参照タイプをサポートします。
|
MTOM を使用するかどうか (mtomOptimize) | Message Transmission Optimization Mechanism (MTOM) 最適化を暗号化パーツに設定します。 |
以下の例は、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);
選択する暗号化方式をまだ指定していない場合は、 WSS API を使用するか、または管理コンソールでポリシー・セットを構成するかして、データと鍵暗号化アルゴリズム方式を選択します。