クライアント・サイドの要求ジェネレーター (送信側) バインディングで
署名情報を構成することができます。署名情報は、SOAP 本体、
タイム・スタンプ情報、およびユーザー名トークンなど、メッセージの各パーツの
署名および検証に使用されます。要求署名用クライアントを構成するには、クライアントを構成するときにデジタル署名するメッセージ・パーツを指定します。
始める前に
WebSphere Application Server は、既存のアルゴリズム (RSA、HMAC、
および SHA1 など) を使用した XML デジタル・シグニチャーを使用します。
XML Signature は、鍵情報を記述するための多くのメソッドを定義し、
新規メソッドの定義を使用可能にします。以下のステップを実行する前に、デジタル・コンテンツに対する
デジタル・シグニチャーの署名と検証を行うための XML デジタル・シグニチャーについて十分理解しておいてください。
このタスクについて
XML Signature を SOAP メッセージに組み込むことにより、以下の結果が実現されます。メッセージの保全性と認証。機密性が暗号化を意味するのに対して、
保全性 はデジタル・シグニチャーを意味します。保全性は、データがインターネットに伝送中に、そのデータが変更されるリスクを低減させます。
WebSphere Application Server は、デフォルト・ジェネレーターの署名情報を使用して、
本体、タイム・スタンプ、ユーザー名トークンをなどのメッセージ・パーツに
署名します。
署名情報では、以下を
指定する必要があります。
- 署名を入れるメッセージ・パーツ。
- 署名鍵の鍵情報が参照する鍵情報。
- 署名アルゴリズム。
WebSphere Application Server には、バインディングのデフォルト値が用意されています。
しかし、管理者は実稼働環境に合わせてデフォルトを変更する必要があります。
WSSSignature API は、
以下のパーツをシグニチャー・パーツとして構成します。
表 1. 事前定義済みのシグニチャー・パーツ
セキュリティー・トークン・オブジェクト |
このオブジェクトでクライアントの認証を行います。このオプションを
指定すると、メッセージは署名されます。ログイン構成認証メソッドが選択されている場合には、セキュリティー・トークンを使用して、メッセージにデジタル署名することができます。
|
WSSTimestamp オブジェクト |
このオブジェクトで、メッセージにタイム・スタンプが追加されます。タイム・スタンプでは、メッセージが送信された日時と受信された日時を基にして、
メッセージが有効かどうかを判別します。
|
WSSSignature Part オブジェクト |
このオブジェクトで、メッセージにシグニチャー・パーツが追加されます。 |
SOAP ヘッダーおよび QName (ターゲットとして) |
このシグニチャー・パーツで、QName で指定されるヘッダーが
検証パーツとして追加されます。 |
WSS API では、キーワードまたは XPath 式を使用することで、
署名の対象となるメッセージ・パーツを指定できます。WebSphere Application Server で
使用できるキーワードは次のとおりです。
表 2. サポートされる
シグニチャー・キーワード
キーワード |
参照 |
ADDRESSING_HEADERS |
Web Services Addressing (WS-Addressing) の
ヘッダー。 |
BODY |
SOAP メッセージ本体。これは、メッセージのユーザー・データ部分です。 |
TIMESTAMP |
作成および有効期限のタイム・スタンプ情報。 |
Web サービス・セキュリティー API (WSS API) は、
バインディング・ファイルの要求ジェネレーター (クライアント・サイド) セクションで
署名検証情報を構成するのに使用されます。クライアント・サイドで署名情報を構成するには、
WSS API を使用するか、管理コンソールで署名用のポリシー・セットを
構成します。
WSS API を使用して構成する場合は、WSSSignature API および WSSSignPart
API で以下のステップを実行して、要求ジェネレーターの署名用にクライアントを構成する場合に
デジタル署名するメッセージ・パーツを指定します。
プロシージャー
- WSSSignature API は、SOAP メッセージのデジタル署名に必要なパーツを
追加します。 必要な暗号化パーツの指定には、キーワードを使用することも XPath 式を
使用することもできます。
- WSSSignature API で、シグニチャー方式のアルゴリズムが設定されます。
デフォルトのシグニチャー方式は RSA_SHA1 です。WebSphere Application Server は
次の事前構成済みアルゴリズムをサポートしています。
WebSphere Application Server は、DSA-SHA1 用のアルゴリズム (http://www.w3.org/2000/09/xmldsig#dsa-sha1) は
サポートしていません。Basic Security Profile (BSP) に準拠する場合は、
DSA-SHA1 アルゴリズムは使用できません。
シグニチャーに含まれる ds:SignatureMethod/@Algorithm は
対称鍵に基づくエレメントで、その値は RSA-SHA1 または HMAC-SHA1 でなければなりません。
要求ジェネレーター構成用に指定されているアルゴリズムは、
要求コンシューマー構成用に指定されているアルゴリズムと一致している必要があります。
- WSSSignature API で、正規化方式が設定されます。 デフォルトの
シグニチャー方式は EXC_C14N です。WebSphere Application Server は
次の事前構成済みアルゴリズムをサポートしています。
- 排他的正規化アルゴリズム EXC_C14N の URI: http://www.w3.org/2001/10/xml-exc-c14n#.
- 包括的正規化アルゴリズム C14N の URI: http://www.w3.org/2001/10/xml-c14n#.
ジェネレーター用にユーザーが指定する正規化アルゴリズムは、
コンシューマー用のアルゴリズムと一致している必要があります。
- WSSSignature API で、セキュリティー・トークンが追加されます。
この API は、シグニチャーに使用されるセキュリティー・トークンの情報を追加します。
例えば次のような情報です。
- セキュリティー・トークンのクラス
- コールバック・ハンドラー
- JAAS ログイン構成の名前
- WSSSignature API で、セキュリティー・トークンのタイプと
トークン参照のタイプが設定されます。 WebSphere Application Server は、
次の事前構成済みトークン参照をサポートしています。
- SecurityToken.REF_STR
トークン参照タイプとしてセキュリティー・トークン参照を
提示します。
- SecurityToken.REF_KEYID
トークン参照タイプとして鍵 ID 参照を
提示します。
- SecurityToken.REF_EMBEDDED
トークン参照タイプとして組み込み参照を
提示します。
- SecurityToken.REF_THUMBPRINT
トークン参照タイプとしてサムプリント参照を
提示します。
- トークン参照のタイプとして SecurityToken.REF_KEYID が設定されている場合、
WSSSignature API は鍵情報シグニチャー・タイプを設定して、
鍵情報参照が参照する鍵情報を構成します。
WebSphere Application Server は以下をサポートしています。
- KeyInfo エレメントが署名されないように指定すること。
- <KeyInfo> エレメント全体が署名されるように指定すること。
- <KeyInfo> エレメントの子エレメント <Keyinfochildelements> が
署名されるように指定すること。
上記のシグニチャー・タイプのいずれも指定しない場合、
WebSphere Application Server は、デフォルトで <keyinfo> エレメントが署名されるように
指定します。
Keyinfo または Keyinfochildelements を選択し、後続のステップで http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform を
変換アルゴリズムとして選択した場合、WebSphere Application Server は参照されるトークンにも署名します。
ジェネレーターの鍵情報シグニチャー・タイプは、コンシューマーのシグニチャー・タイプと一致している必要があります。
- WSSSignature API は、シグニチャーの確認が必要かどうかを指定します。
OASIS Web サービス・セキュリティー (WS-Security) バージョン
1.1 仕様は、シグニチャー確認の使用を定義しています。WS-Security バージョン 1.0 を
使用している場合は、この機能は使用できません。
シグニチャー確認の値は
保管されて、受信メッセージが戻された後のシグニチャー確認の検証に
使用されます。このメソッドが呼び出されるのは、
応答メッセージが SOAP メッセージにシグニチャー確認を添付すると
予想される場合です。
- WSSSignPart API はパーツ参照を指定します。 パーツ参照は、メッセージのどのパーツをデジタル署名するかを指定します。
このパーツ参照は、デジタル署名されるメッセージ・パーツを参照します。
パーツ属性は、<PartReference> エレメントがシグニチャーに対して指定されている場合、
<Integrity> エレメントの名前を参照します。
<SigningInfo> エレメント内で、複数の <PartReference> エレメントを指定することができます。
<PartReference> エレメントがシグニチャー検証に対して指定されている場合、
このエレメントには <DigestTransform> と <Transform> という 2 つの子エレメントが
あります。
- WSSSignPart API はダイジェスト方式アルゴリズムを指定します。
<DigestMethod> エレメント内で指定されるダイジェスト方式アルゴリズムは、
<SigningInfo> エレメントで使用されます。
WebSphere Application Server は、
次の事前構成済みダイジェスト・アルゴリズムをサポートしています。
- http://www.w3.org/2000/09/xmldsig#sha1
- http://www.w3.org/2001/04/xmlenc#sha256
- http://www.w3.org/2001/04/xmlenc#sha512
- WSSSignPart API は変換アルゴリズムを指定します。 変換アルゴリズムは、<Transform> エレメント内で指定され、シグニチャーの変換アルゴリズムを指定します。
WebSphere Application Server は、
以下の事前構成済み変換アルゴリズムをサポートします。
ジェネレーター用にユーザーが選択する変換アルゴリズムは、
コンシューマー用に選択する変換アルゴリズムと一致している必要があります。
重要: 以下の条件が両方とも真である場合、WebSphere Application Server は参照されるトークンに署名します。
- 以前に Keyinfo オプションまたは Keyinfochildelements オプションを選択した。
- 変換アルゴリズムとして http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform を選択する。
- クライアントおよびサーバーの署名情報が正しく構成されているにもかかわらず、
クライアントの実行時に Soap body not signed エラーを受信した場合には、
アクターを構成する必要がある場合があります。 要求を処理して
応答を戻すサーバー上の Web サービスに対して同じアクター・ストリングを構成するためには、
管理コンソールを使用してポリシー・セットを構成します。
クライアントおよびサーバー上のアクター情報は、両方ともまったく同一のストリングである
必要があります。クライアントおよびサーバーの 「アクター」フィールドが一致する場合には、
要求または応答はダウンストリームに転送されることなく、処理されます。
他の Web サービスのゲートウェイとして動作する Web サービスがある場合は、
アクターが異なる場合があります。ただし、そのような Web サービスがない場合には、
アクター情報がクライアントとサーバーで一致していることを必ず確認してください。Web サービスがゲートウェイとして機能しており、
それらの Web サービスに、そのゲートウェイを介して渡される要求として構成された同じアクターがない場合には、
Web サービスはクライアントからのメッセージを処理しません。
代わりに、これら Web サービスは、その要求をダウンストリームに送信します。正しい
アクター・ストリングを含むダウンストリーム・プロセスによって要求が処理されます。応答でも同じ状況が発生します。
したがって、該当するクライアントとサーバーの「アクター」フィールドが
同期化されていることを確認することが重要です。
結果
WSSSignature API と WSSSignPart API がこれらのステップを完了すると、
バインディング・ファイルのジェネレーター・セクションで署名情報が構成されます。
例
次の例は、シグニチャーを構成し、
コールバック・ハンドラーを生成し、X.509 トークン・タイプをセキュリティー・トークンとして
指定するための WSS API サンプル・コードです。
WSSFactory factory = WSSFactory.getInstance();
// Instantiate a generation context
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Generate the callback handler and specify the X.509 token
X509GenerateCallbackHandler callbackhandler = generateCallbackHandler();
SecurityToken token = factory.newSecurityToken(X509Token.class,
callbackHandler);
// Set the signature information
WSSSignature sig = factory.newWSSSignature(token);
// Add the header using QName
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "To"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "Action"));
// Apply the signature
gencont.add(sig);
// Secure the message
gencont.process(msgctx);
次の作業
以下の検証タスクを実行して、クライアント・サイドの
要求コンシューマー (受信側) バインディングにも同様のシグニチャー情報を構成する
必要があります。
- シグニチャーの検証
- シグニチャー・アルゴリズム方式の選択
- 署名済みパーツの変更または追加 (必要な場合)
シグニチャー検証が構成済みであれば、
暗号化情報および暗号化解除情報を構成するか、コンシューマー・トークンおよびジェネレーター・トークンを
構成します。