構成用ポリシー・セットを使用しなくても、Web Services Security API (WSS API) を使用することで SOAP メッセージをセキュアにすることができます。 署名するパーツを 要求ジェネレーター (クライアント・サイド) バインディング用に構成するには、 WSSSignPart API を使用してメッセージの保全性を保護し、ダイジェスト・アルゴリズム方式と 変換アルゴリズム方式を構成します。WSSSignPart API は、 com.ibm.websphere.wssecurity.wssapi.signature パッケージに含まれています。
署名情報を構成するには、WSS API を使用するか、管理コンソールから ポリシー・セットを構成します。署名情報を使用して SOAP メッセージを保護するには、 以下のタスクのいずれかを実行する必要があります。
WebSphere Application Server は、デフォルトのジェネレーターの 署名情報を使用してメッセージ・パーツに署名し、既存のダイジェストおよび 変換アルゴリズム (SHA1、TRANSFORM_EXC_C14N など) で XML デジタル・シグニチャーを使用します。
署名情報は、生成されるメッセージに適用する保全性制約を 指定します。署名済みパーツは、メッセージの保全性確保のために 使用されます。メッセージ保全性の保護を強化する署名済みパーツを指定できます。
以下の表に、デジタル・シグニチャー・セキュリティー制約 (保全性) が定義される場合に 必須の署名済みパーツを示します。
署名済みパーツ | 説明 |
---|---|
keyword | キーワードを使用して署名済みパーツを追加します。WebSphere Application Server は
署名済みパーツ用の以下のキーワードをサポートします。
|
xpath | XPath 式によって、必要な署名済みパーツを追加します。 |
header | ヘッダー (QName で指定) を署名済みパーツとして追加します。 |
timestamp | WSSTimestamp オブジェクトを署名済みパーツとして追加します。タイム・スタンプ情報を 指定すると、メッセージの生成日時とその有効期限が 指定されます。 |
ジェネレーター側の要求のメッセージ保護には、 さまざまなメッセージ・パーツを指定できます。WSSSignPart では、変換アルゴリズムの追加、ダイジェスト方式の設定、 ターゲットとしてのオブジェクトの設定、エレメントおよび署名済みパーツ (SOAP 本体、 WS-Addressing ヘッダー、タイム・スタンプ情報など) の指定が可能です。
署名情報については、特定のデフォルトの動作が発生します。WSSSignPart API を 使用する最も簡単な方法は、デフォルトの動作を使用することです (コード例を 参照してください)。署名済みパーツのデフォルトの動作には以下のようなものがあります。
シグニチャーの決定項目 | デフォルトの動作 |
---|---|
署名する SOAP メッセージ・パーツ | WebSphere Application Server は、 署名してメッセージ保護に使用する以下の SOAP メッセージ・パーツをサポートしています。
|
使用するダイジェスト方式 | ダイジェスト・アルゴリズム方式を設定します。 <DigestMethod> エレメント内で指定されるダイジェスト方式アルゴリズムは、 <SigningInfo> エレメントで使用されます。 WebSphere Application Server は、以下の事前構成ダイジェスト方式をサポートします。
|
使用する変換アルゴリズム | 変換方式を追加します。変換アルゴリズムは、
<Transform> エレメント内で指定され、シグニチャーの変換アルゴリズムを
指定します。 WebSphere Application Server は、 以下の事前構成済み変換アルゴリズムをサポートします。
|
次の例は、WSSSignPart API で定義されるすべてのメソッドを 使用したサンプル・コードです。
// Get the message context Object msgcontext = getMessageContext(); // Generate the WSSFactory instance (step: a) WSSFactory factory = WSSFactory.getInstance(); // Generate WSSGenerationContext instance (step: b) WSSGenerationContext gencont = factory.newWSSGenerationContext(); // Generate 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 used to the signature (step: c) SecurityToken token = factory.newSecurityToken(X509Token.class, callbackHandler); // Generate WSSSignature instance (step: d) WSSSignature sig = factory.newWSSSignature(token); // Set the part specified by WSSSignPart (step: e) WSSSignPart sigPart = factory.newWSSSignPart(); // Set the part specified by WSSSignPart (step: f) sigPart.setSignPart(WSSSignature.BODY); // Set the digest method specified by WSSSignPart (step: g) sigPart.setDigestMethod(WSSSignPart.SHA256); // Set the transform method specified by WSSSignPart (step: h) sigPart.setTransformMethod(WSSSignPart.TRANSFORM_STRT10); // Add the part specified by WSSSignPart (step: i) sig.addSignPart(sigPart); // Add the WSSSignature to the WSSGenerationContext (step: j) gencont.add(sig); // Generate the WS-Security header (step: k) gencont.process(msgcontext);
WSSVerifyPart API を使用するか、管理コンソールからポリシー・セットを構成して、 コンシューマー側で署名済みパーツを検証します。