ナビゲーションをスキップ

WebLogic Web サービス プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

セキュリティのコンフィグレーション

この章では、WebLogic Web サービスのセキュリティをコンフィグレーションする方法について説明します。

 


Web サービス セキュリティの概要

WebLogic Web サービスを保護するには、次の 3 種類のセキュリティの 1 つまたは複数をコンフィグレーションします。

 


どのタイプのセキュリティをコンフィグレーションすべきか

アクセス制御のセキュリティは、「誰が何を実行できるか」という質問の回答となります。まず、Web サービス (または Web サービスを実装するコンポーネント) にアクセスできるユーザ、グループ、またはロールのリストを指定します。次に、クライアント アプリケーションが Web サービスのオペレーションを呼び出そうとしたときに、そのクライアントは HTTP を使用してそれ自体の認証を WebLogic Server に対して行い、権限がある場合はクライアントはその呼び出しを続行することができます。アクセス制御セキュリティは、WebLogic Server のリソースのみ保護します。つまり、アクセス制御のセキュリティしかコンフィグレーションされていない場合は、クライアント アプリケーションと WebLogic Server の接続が保護されず、SOAP メッセージはプレーン テキストになります。

転送レベルのセキュリティでは、クライアント アプリケーションと WebLogic Server の間の接続がセキュア ソケット レイヤ (SSL) で保護されます。SSL では、ネットワーク接続している 2 つのアプリケーションが互いの ID を認証できるようにするとともに、アプリケーション間でやりとりされるデータを暗号化することでセキュアな接続が実現します。認証を使用すると、サーバとクライアント (省略可能) はネットワーク接続の相手側アプリケーションの ID を検証できます。ネットワーク経由で送信されるデータは暗号化されるので、予定されている宛先以外には解釈できません。

ただし、転送レベルのセキュリティでは接続そのものしか保護されません。つまり、クライアントと WebLogic Server の間にルータやメッセージ キューなどの仲介機能がある場合、その仲介機能は SOAP メッセージをプレーン テキストで取得します。仲介機能から次の送信先にメッセージが送信されたとき、その受信側では元々そのメッセージがどこから来たのかわかりません。また、SSL で使用される暗号化は「オール オア ナッシング」です。つまり、SOAP メッセージの全体が暗号化されるか、あるいはまったく暗号化されないかのいずれかになります。SOAP メッセージの一部だけ選択して暗号化することはできません。

メッセージレベルのセキュリティでは、SSL のすべてのセキュリティ上のメリットに、柔軟性と機能が追加されます。メッセージレベルのセキュリティはエンド ツー エンドです。つまり、SOAP メッセージは転送の過程でいくつ仲介機能があっても保護されます。接続だけでなく、SOAP メッセージそれ自体がデジタル署名および暗号化されます。さらに、メッセージの一部のみを署名または暗号化するように指定することもできます。

 


メッセージレベルのセキュリティ (デジタル署名と暗号化) のコンフィグレーション

メッセージレベルのセキュリティでは、クライアント アプリケーションとそれが呼び出す Web サービスの間の SOAP メッセージに対してデジタル署名と暗号化の一方または両方を行うかどうかを指定します。

WebLogic Web サービスには、以下の 2004 年 4 月 6 日付の OASIS 標準 Web Services Security 1.0 仕様が実装されています。

これらの仕様は、主にセキュリティ トークンの伝播、メッセージの整合性、およびメッセージの機密性の 3 つのメカニズムを提供します。これらのメカニズムは別々に (ユーザ認証でのユーザ名セキュリティ トークンの受け渡しなど)、または組み合わせて (SOAP メッセージのデジタル署名と暗号化など) 使用できます。

以下の節では、メッセージレベルのセキュリティについて説明します。

主な使い方

「Web Services Security: SOAP Message Security」仕様の BEA 実装は、以下の使い方をフルサポートするように設計されています。

Web サービス セキュリティのコア仕様の実装されていない機能

WebLogic Web サービスは、以下に説明するように、Web サービス セキュリティのコア仕様のすべての機能を実装するわけではありません。

用語

以下の用語に注意してください。

メッセージレベルのセキュリティのアーキテクチャの概要

web-services.xml デプロイメント記述子ファイルの <security> 要素では、WebLogic Web サービスのメッセージレベルのセキュリティがコンフィグレーションされているかどうかを指定します。具体的には、<security> 要素では次のことを記述します。

Web サービスをデプロイする場合、web-services.xml ファイルに指定されているセキュリティ情報は WSDL で公開されるので、その Web サービスを呼び出すクライアント アプリケーションは、SOAP メッセージに対してデジタル署名または暗号化を行う必要があるかどうかを知ることができます。

注意 :WSDL 1.1 にはセキュリティ情報を指定するための規格が含まれていないため、WebLogic Server は独自の方法でそのメッセージ セキュリティ情報を公開します。

次の図とそれに続く節では、メッセージ セキュリティ WebLogic Web サービスがデプロイされ、クライアント アプリケーションがそれを呼び出すときの処理の流れについて説明します。これらの節は、処理を実行する要素ごとに分かれています。

図 13-1 メッセージ セキュリティ WebLogic Web サービスのアーキテクチャ

メッセージ セキュリティ WebLogic Web サービスのアーキテクチャ


 

A. WebLogic Server

  1. WebLogic Server の ID キーストアからキー ペアと証明書をロードします。
  2. web-services.xml デプロイメント記述子の情報 (どのオペレーションでどのようなメッセージレベルのセキュリティが必要か、など) を使用して、メッセージ セキュリティ Web サービスをデプロイします。
  3. Web サービスの WSDL のセキュリティ情報を更新して、その Web サービスを呼び出すクライアント アプリケーションが SOAP リクエストで必要とされるセキュリティ処理を認識できるようにします。このセキュリティ情報には、クライアント アプリケーションが SOAP リクエストを暗号化するために使用する WebLogic Server の暗号化鍵ペアの証明書が含まれます。WebLogic Server は、web-services.xml デプロイメント記述子ファイルの <security> 要素の情報を利用して、WSDL の更新方法を決定します。

B. クライアント アプリケーション

クライアント アプリケーションは、クライアント キーストアから署名鍵ペアと証明書をロードし、weblogic.webservice.context.WebServiceContext API を使用して公開鍵と証明書を Web サービス セッションの属性として追加します。

注意 :クライアント アプリケーションは、そのクライアント キーストアからロードしたキー ペアと証明書を使用して SOAP リクエストにデジタル署名を行います。WebLogic Server は、そのキー ペアと証明書を使用して SOAP 応答を暗号化します。

C. WebLogic Web サービス クライアント実行時環境

クライアント アプリケーションが実行されると、クライアント実行時 JAR ファイルにパッケージ化されている Web サービス クライアント実行時環境は次のタスクを実行します。

注意 :クライアント実行時環境は、WebLogic Server に応答を送信する直前、およびすべてのクライアント ハンドラが実行された直後にすべての暗号化および署名タスクを実行します。

  1. 呼び出された Web サービスの WSDL を読み込んで、SOAP 応答のどの部分に対してデジタル署名または暗号化を行うかを調べます。また、サーバ暗号化鍵の証明書を WSDL から取得します。
  2. 保護されていない SOAP メッセージ リクエストを生成します。
  3. SOAP 応答のヘッダに、セキュリティ情報が指定された <Security> 要素を作成します。
  4. WSDL によって必要とされる場合、クライアントのユーザ名とパスワードを指定するユーザ名トークンを SOAP リクエストの <Security> ヘッダに追加します。
  5. WSDL によって SOAP リクエストのデジタル署名が必要とされる場合、Web サービス クライアント実行時環境は次のことを行います。
    1. クライアントの WebServiceContext のプライベート キーを使用して、WSDL の要件に従ってデジタル署名を生成します。
    2. デジタル署名を、SOAP リクエストの <Security> ヘッダに追加します。
    3. クライアントの WebServiceContext の証明書を SOAP リクエストの <Security> ヘッダに追加します。WebLogic Server は、この証明書を使用して署名を検証します。
  6. WSDL によって SOAP リクエストの暗号化が必要とされる場合、Web サービス クライアント実行時環境は次のことを行います。
    1. WSDL で公開されている証明書から WebLogic Server の公開鍵を取得します。
    2. WebLogic Server の公開暗号化鍵を使用して、WSDL の要件に従って SOAP リクエストを暗号化します。WSDL では、SOAP メッセージのどの部分を暗号化する必要があるかが指定されます。
    3. 暗号化の説明を、SOAP リクエストの <Security> ヘッダに追加します。WebLogic Server は、この説明を使用して SOAP リクエストを復号化します。
  7. Web サービス クライアント実行時環境は、暗号化およびデジタル署名された SOAP リクエストを WebLogic Server に送信します。

D. WebLogic Server

  1. SOAP リクエストを受信して、<Security> ヘッダを抽出します。
  2. SOAP リクエストが暗号化されている場合、WebLogic Server は次のタスクを行います。
    1. 暗号化の説明を読み込んで、WebLogic Server の ID キーストアのプライベート暗号化鍵を使用して SOAP リクエストを復号化します。
    2. 暗号化の説明を <Security> ヘッダから削除します。
  3. SOAP リクエストにデジタル署名がなされている場合、WebLogic Server は次のタスクを実行して署名を検証します。
    1. SOAP リクエストの <Security> ヘッダからクライアントの証明書を抽出します。
    2. <Security> ヘッダからデジタル署名を抽出します。
    3. クライアントの証明書から取得したクライアントの公開鍵を使用して署名を検証します。
    4. クライアント証明書の ID を断定して、有効な WebLogic Server ユーザにマップしていることを確認します。
    5. <Security> ヘッダからデジタル署名を削除します。
  4. <Security> ヘッダからユーザ名トークンを削除します。
  5. ユーザの ID を断定して、そのパスワードを検証します。Web サービス オペレーションの残りの呼び出しは、このユーザとして実行されます。
  6. <Security> ヘッダから SOAP リクエストを削除します。
  7. 必要な場合、SOAP リクエストに組み込まれていたクライアント証明書を保存して、SOAP 応答を暗号化するときに使用できるようにします。
  8. <Security> ヘッダの仕様が WSDL の要件と合致しているかどうかを検証します。
  9. 処理済みの SOAP リクエストを Web サービス実行時システムに送信し、標準呼び出しを行います。

WebLogic Server は、クライアントに SOAP 応答を返送し、その SOAP 応答にデジタル署名または暗号化を行うことが必要な場合、最初に SOAP リクエストを送信したときの WebLogic Web サービス クライアント実行時環境と同じ手順に従います (「C. WebLogic Web サービス クライアント実行時環境」を参照)。ただし、次の点が異なります。

メッセージレベルのセキュリティのコンフィグレーション : 主な手順

WebLogic Web サービスのメッセージレベルのセキュリティをコンフィグレーションするには、デジタル署名の取得、キーストアとユーザの作成などの標準的なタスクに加え、web-services.xml ファイルのセキュリティ情報の更新といった Web サービス固有のタスクを実行します。

WebLogic Web サービス、およびサービスを呼び出すクライアントのメッセージレベルのセキュリティをコンフィグレーションするには、次の手順に従います。この手順の一部については、後の節で詳しく説明します。

注意 :次の手順は、WebLogic Web サービスをすでに実装およびアセンブルし、デジタル署名および暗号化を使用するように Web サービスを更新することを前提としています。

  1. WebLogic Web サービスが使用するキー ペアとデジタル証明書を 2 セット取得します。必須ではありませんが、WebLogic Web サービスのみが使用するキー ペアおよびデジタル証明書を取得するようにお勧めします。
  2. 警告 :キーの長さは 1024 ビット以上にする必要があります。

    分かりやすくするために、デジタル署名用のキー ペアと証明書の名前は digSigKey、パスワードは digSigKeyPassword で、暗号化用のキーペアと証明書の名前は encryptKey、パスワードは encryptKeyPassword であるとします。

    この手順には、Cert Gen ユーティリティまたは Sun Microsystem の keytool ユーティリティを使用します。開発が目的の場合は、keytool ユーティリティを使用すると簡単に開始できます。

    詳細については、「プライベート キー、デジタル証明書、信頼性のある認証局の取得」を参照してください。

  3. 現在存在しない場合は、WebLogic Server のカスタム ID キーストアを作成し、前の手順で取得したキー ペアとデジタル証明書をその ID キーストアにロードします。
  4. SSL 用に WebLogic Server をすでにコンフィグレーションしてある場合は、WebLogic Web サービス データのセキュリティのためにも使用できる ID キーストアがすでに作成されています。

    この手順には、WebLogic の ImportPrivateKey ユーティリティおよび Sun Microsystem の keytool ユーティリティを使用できます。開発が目的の場合は、keytool ユーティリティを使用すると簡単に開始できます。

    詳細については、「キーストアの作成およびプライベート キーと信頼性のある認証局のキーストアへのロード」を参照してください。

  5. Administration Console を使用して、前の手順で作成したキーストアを指し示すように WebLogic Server をコンフィグレーションします。WebLogic Server 用にコンフィグレーションしたキーストアをすでに使用している場合、この手順を実行する必要はありません。
  6. 詳細については、「キーストアのコンフィグレーション」を参照してください。

  7. クライアント アプリケーションが使用するキーストアを作成します。アプリケーション ユーザごとにクライアント キーストアを 1 つ作成するようにお勧めします。
  8. この手順には、Cert Gen ユーティリティまたは Sun Microsystem の keytool ユーティリティを使用します。開発が目的の場合は、keytool ユーティリティを使用すると簡単に開始できます。

    このマニュアルの後の節では、パスワードが client_keystore_passwordclient_keystore というクライアント キーストアを作成した場合を想定しています。

    詳細については、「プライベート キー、デジタル証明書、信頼性のある認証局の取得」を参照してください。

  9. キー ペアとデジタル証明書を作成し、クライアント キーストアにロードします。同じキー ペアを使用して、SOAP リクエストにデジタル署名を行い、SOAP 応答を暗号化します。デジタル証明書が、後の手順で作成される WebLogic Server ユーザにマップされます。
  10. 警告 :キーの長さは 1024 ビット以上にする必要があります。

    この手順には、Sun Microsystem の keytool ユーティリティを使用します。

    このマニュアルの後の節では、パスワードが client_key_passwordclient_key というキー ペアを作成した場合を想定しています。

  11. Administration Console を使用して、使用する WebLogic Server セキュリティ レルムに対する ID アサータ プロバイダをコンフィグレーションします。
  12. WebLogic Server には、デフォルトの ID アサータ プロバイダを使用してコンフィグレーションされた myrealm という名前のデフォルトのセキュリティ レルムがあります。独自の ID アサータ プロバイダをコンフィグレーションする必要がない場合は、このデフォルトのセキュリティ レルムを使用します。ただし、追加のコンフィグレーション タスクを実行し、デフォルトの ID アサータ プロバイダがメッセージ保護された WebLogic Web サービスで正しく動作していることを確認する必要があります。

    詳細については、「myrealm セキュリティ レルムに対して ID アサータ プロバイダをコンフィグレーションする」を参照してください。

  13. Administration Console を使用して、セキュリティ レルムに認証用のユーザを作成します。
  14. 詳細については、「ユーザの作成」を参照してください。

    このマニュアルの後の節では、パスワードが auth_user_passwordauth_user というユーザを作成した場合を想定しています。

  15. servicegen Ant タスクの呼び出しを含む build.xml ファイルを更新し、Web サービスをビルドする <service> 要素に <security> 子要素を追加します。暗号化鍵ペア、デジタル署名鍵ペア、対応するパスワードなどの情報を指定します。
  16. 注意 :servicegen Ant タスクでは Web サービスに対する暗号化およびデジタル署名のコンフィグレーションを大まかにしか制御できません。暗号化する、またはデジタル署名する SOAP メッセージ内のデータを細かく制御する場合は、web-services.xml ファイルを手動で更新する必要があります。詳細については、「web-services.xml ファイルのセキュリティ情報を更新する」を参照してください。

    servicegen の使い方の詳細については、「servicegen build.xml ファイルを更新する」を参照してください。

  17. servicegen Ant タスクを再実行して、Web サービスを再アセンブルし、web-services.xml デプロイメント記述子を再生成します。
  18. 必要に応じて、EAR ファイルを WebLogic Server にデプロイする前に、ドメインの EAR の web-services.xml ファイルにある各パスワードを暗号化します。通常この手順は、プロダクション モードで Web サービスをデプロイする場合のみ実行します。
  19. 詳細については、「web-services.xml ファイルのパスワードを暗号化する」を参照してください。

  20. クライアント アプリケーションを更新してメッセージ保護された Web サービスを呼び出します。
  21. 詳細については、「データ保護された Web サービスを呼び出すように Java クライアントを更新する」を参照してください。

myrealm セキュリティ レルムに対して ID アサータ プロバイダをコンフィグレーションする

メッセージ保護された WebLogic Web サービスでは、デフォルトの myrealm セキュリティ レルムに対してコンフィグレーションされた、デフォルトの ID アサータ プロバイダを使用できます。しかし、そのためにはさらにいくつかのコンフィグレーションタスクを実行する必要があります。

  1. Administration Console の左ペインで、[セキュリティ|レルム|myrealm|プロバイダ|認証] フォルダをクリックして開きます。
  2. [認証] フォルダの下にある [DefaultIdentityAsserter] をクリックします。デフォルトの ID アサータをコンフィグレーションするページが右ペインに表示されます。[全般] タブを開きます。
  3. 右ペインで [タイプ] ボックスまで下方向にスクロールします。
  4. [選択可] ボックスから [選択済み] ボックスに、X.509 を移動します。
  5. [適用] をクリックします。
  6. [詳細] タブを選択します。
  7. [デフォルト ユーザ名マッパーを使用] がチェックされていることを確認します。
  8. X.509 デジタル証明書をユーザ名にマップするときに使用する [デフォルト ユーザ名マッパー属性タイプ] を選択します。
  9. [デフォルト ユーザ名マッパー属性の区切り文字] を選択します。
  10. [適用] をクリックします。

ID アサータのコンフィグレーションの詳細については、以下を参照してください。

servicegen build.xml ファイルを更新する

次の例に示すように、Web サービスをビルドする <service> 要素に <security> 子要素を追加して、servicegen Ant タスクの呼び出しを含む build.xml ファイルを更新します。デフォルトでは、servicegen は、特定の要素ではなく SOAP 本文全体がデジタル署名、または暗号化されるように指定します。特定の要素をデジタル署名または暗号化する方法については、後の節で説明します。

注意 :分かりやすくするため、次の servicegenbuild.xml ファイルのパスワードは、クリア テキスト形式を使用しています。しかし、セキュリティのため、ファイルに実際にパスワードを格納するのではなく、<input> Ant タスクを使用してパスワードの入力を求めるように、build.xml ファイルを更新することをお勧めします。<input> Ant タスクの使い方の詳細については、『Apache Ant User Manual』を参照してください。

      <servicegen
destEar="ears/myWebService.ear"
warName="myWAR.war"
contextURI="web_services" >
<service
ejbJar="jars/myEJB.jar"
targetNamespace="http://www.bea.com/examples/Trader"
serviceName="TraderService"
serviceURI="/TraderService"
generateTypes="True"
expandMethods="True" >
<security
signKeyNam
e="digSigKey"
signKeyPass="digSigKeyPassword"
encryptKeyName="encryptKey"
encryptKeyPass="encryptKeyPassword"
/>
</service>
</servicegen>

上記の build.xml ファイルでは、web-services.xml デプロイメント記述子ファイルにある次のようなメッセージレベルのセキュリティ情報を含む Web サービスを servicegen がアセンブルするように指定されています。

注意 :web-services.xml ファイルのパスワードを暗号化する」で説明されているように、weblogic.webservice.encryptpass ユーティリティを使用して web-services.xml ファイルのパスワードを暗号化します。

servicegen Ant タスクの <security> 要素を使用して Web サービスにセキュリティを追加した場合は、Web サービスのすべてのオペレーションに対して SOAP 本文全体が暗号化され、デジタル署名されます。暗号化およびデジタル署名は、SOAP メッセージのリクエストと応答の両方に対して発生します。

SOAP メッセージの特定の要素がデジタル署名、または暗号化されるように指定するには、WebLogic Web サービスの web-services.xml ファイルを手動で更新します。詳細については、「web-services.xml ファイルのセキュリティ情報を更新する」を参照してください。

web-services.xml ファイルのセキュリティ情報を更新する

servicegen Ant タスクでは、生成された web-services.xml デプロイメント記述子ファイルに、最低限のデフォルトのメッセージレベルのセキュリティ情報が追加されます。特に、デフォルトの情報により、Web サービスのすべてのオペレーションについて、特定の要素ではなく、SOAP 本文全体がデジタル署名または暗号化されるように指定されます。通常はこのデフォルトの動作が適していますが、一部の要素に対してだけデジタル署名または暗号化するように指定し、オペレーションごとに異なるセキュリティ仕様を指定したい場合もあります。この場合は、web-services.xml ファイルを手動で更新する必要があります。

servicegen build.xml ファイルを更新する」の build.xml ファイルを使用して servicegen を実行した場合、生成される web-services.xml ファイルの <security> 要素は次の例のようになります。太字のセクションについてはこの例の後に説明します。

<web-service>
...
<security>
    <signatureKey>
<name>digSigKey</name>
<password>digSigKeyPassword</password>
</signatureKey>
    <encryptionKey>
<name>encryptKey</name>
<password>encryptKeyPassword</password>
</encryptionKey>
    <spec:SecuritySpec xmlns:spec="http://www.openuri.org/2002/11/wsse/spec"
Namespace="http://schemas.xmlsoap.org/ws/2002/07/secext"
Id="default-spec">
      <spec:BinarySecurityTokenSpec   
xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext"
EncodingType="wsse:Base64Binary"
ValueType="wsse:X509v3">
</spec:BinarySecurityTokenSpec>
      <spec:SignatureSpec   
SignatureMethod="http://www.w3.org/2000/09/xmldsig#rsa-sha1"
SignBody="true"
CanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
</spec:SignatureSpec>
      <spec:EncryptionSpec    
EncryptBody="true"
EncryptionMethod="http://www.w3.org/2001/04/xmlenc#tripledes-cbc">
</spec:EncryptionSpec>
    </spec:SecuritySpec>
  </security>
  ...
  <operations>
<operation
name="myOperation" method="myMethod" component="ejbComp"
in-security-spec="default-spec" out-security-spec="default-spec">
...
</operation>
</operations>
  ...
</web-service>

注意 :上記の例の spec プレフィックスは、web-services.xml デプロイメント記述子ファイルのセキュリティ情報に必要なネームスペース プレフィックスです。XML ネームスペースの詳細については、『Namespaces in XML』を参照してください。

上記の web-services.xml<signatureKey> および <encryptKey> 要素は、それぞれデジタル署名と暗号化用の鍵をサーバのキーストアから取得するためのユーザ名とパスワードを指定します。

<spec:SecuritySpec> 要素の Id="default-spec" 属性は、これがデフォルトのセキュリティ仕様であることを指定します。デフォルトによって、Web サービスのあらゆるオペレーションを呼び出すための SOAP リクエストおよび応答は、このセキュリティ仕様に定義されている情報に従う必要があります。これは、各 <operation> 要素の in-security-spec="default-spec" および out-security-spec="default-spec" 属性で指定します。

上記の <spec:SignatureSpec> および <spec:EncryptionSpec> 要素の SignBody="true" および EncryptBody="true" 属性は、すべてのオペレーションについて SOAP 本文全体に対してデジタル署名と暗号化を行う必要があることを指定しています。

以下の節では、web-services.xml ファイルを更新してより詳細なメッセージ セキュリティを指定する方法について説明します。

SOAP メッセージの特定の要素に対してデジタル署名と暗号化を行う

特定の要素に対してデジタル署名または暗号化を行うように指定するには、web-services.xml ファイルの対応する <spec:SignatureSpec> または <spec:EncryptionSpec> 要素に、1 つまたは複数の <spec:ElementIdentifier> 子要素を追加します。

たとえば、SOAP 本文全体に加え、ローカル名が Timestamp の SOAP ヘッダの要素をデジタル署名する場合を考えます。このコンフィグレーションを指定するには、次のように <spec:ElementIdentifier> 子要素を <spec:SignatureSpec> 要素に追加します。

<spec:SignatureSpec   
SignatureMethod="http://www.w3.org/2000/09/xmldsig#rsa-sha1"
SignBody="true"
CanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
      <spec:ElementIdentifier
LocalPart="Timestamp"
Namespace="http://www.bea.com/examples/security" />
</spec:SignatureSpec>

この例は、<spec:ElementIdentifier> 要素の LocalPart および Namespace 属性を使用して、SOAP メッセージの Timestamp 要素がデジタル署名されるように識別する方法を示しています。LocalPart 属性を、暗号化する SOAP メッセージの要素名と同じ名前に設定し、Namespace 属性をそのネームスペースに設定します。要素の正確な名前およびネームスペースを取得するには、次のようにします。

特定の要素が暗号化されるように指定する方法も非常に似ています。たとえば、SOAP メッセージの本文ではなく CreditCardNumber 要素だけを暗号化するには、次のように <spec:EncryptionSpec> 要素を更新します。

<spec:EncryptionSpec 
EncryptionMethod="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" >
       <spec:ElementIdentifier
LocalPart="CreditCardNumber"
Namespace="http://www.bea.com/examples/security" />
</spec:EncryptionSpec>

<security> 要素、およびこの節で扱ったそのすべての子要素の詳細については、「WebLogic Web サービス デプロイメント記述子の要素」を参照してください。

オペレーションを特定のセキュリティ仕様に関連付ける

web-services.xml デプロイメント記述子ファイルの <security> 要素には、ゼロ個以上の <spec:SecuritySpec> 要素を挿入できます。これらの要素では、特定の SOAP メッセージのセキュリティ要件 (署名の対象、暗号化の対象、組み込むトークンなど) を指定します。

通常、各 <spec:SecuritySpec> 要素には、それぞれをユニークに識別するための Id 属性が設定されます。web-services.xml ファイルの <operations> セクションで、各 <operation> 要素は、固有のセキュリティ仕様を参照できます。そのためには、オペレーションの in-security-spec または out-security-spec 属性を関連する Id 値に設定します。in-security-spec 属性によって参照されるセキュリティ仕様は SOAP リクエストに適用され、out-security-spec 属性によって参照されるセキュリティ仕様は SOAP 応答に適用されます。

<spec:SecuritySpec> 要素に Id 属性が存在しないか、または default-spec という値が割り当てられている場合、そのセキュリティ仕様はデフォルト仕様として扱われ、仕様を明示的に参照していないすべてのオペレーションに適用されます。定義できるデフォルト仕様は 1 つだけです。複数のデフォルト仕様が web-services.xml ファイルに定義されている場合、Web サービスはデプロイされません。

servicegen Ant タスクは、web-services.xml ファイルに (Id="default-spec" 属性を使用して) デフォルトのセキュリティ仕様を常に生成します。このセキュリティ仕様は、すべてのオペレーションのすべての SOAP メッセージに適用されます。個々の <operation> 要素には、このセキュリティ仕様への直接の参照は指定されません (必要としないため)。

たとえば、Web サービス用に次の 2 つのセキュリティ仕様を定義したとします。

<web-service>
...
<security>
...
<spec:SecuritySpec xmlns:spec="http://www.openuri.org/2002/11/wsse/spec"
Namespace="http://schemas.xmlsoap.org/ws/2002/07/secext"
Id="encrypt-only">
<spec:EncryptionSpec
...
</spec:EncryptionSpec>
</spec:SecuritySpec>
  <spec:SecuritySpec xmlns:spec="http://www.openuri.org/2002/11/wsse/spec"
Namespace="http://schemas.xmlsoap.org/ws/2002/07/secext"
Id="sign-only">
<spec:SignatureSpec
...
</spec:SignatureSpec>
</security>
...
</web-service>

上の例では、encrypt-only セキュリティ仕様では暗号化だけが必要となり、sign-only セキュリティ仕様ではデジタル署名だけが必要となります。次の例に示すように、関連する <operation> 要素の in-security-spec 属性と out-security-spec 属性を使用することで、特定のオペレーションについてこれらのセキュリティ仕様を組み合わせることができます。

  <operations>
<operation
name="operationOne" method="methodOne" component="ejbComp"
in-security-spec="encrypt-only"
out-security-spec="encrypt-only"
>
...
</operation>
<operation
name="operationTwo" method="methodTwo" component="ejbComp"
in-security-spec="sign-only">
...
</operation>
</operations>

上の例は、operationOne オペレーションの SOAP リクエストと SOAP 応答をどちらも暗号化する必要があるが、デジタル署名は行う必要がないことを示しています。また、operationTwo の SOAP リクエストにデジタル署名を行う必要がありますが (暗号化の必要はない)、SOAP 応答にはセキュリティは必要ありません。

<security> および <operation> 要素の詳細については、「WebLogic Web サービス デプロイメント記述子の要素」を参照してください。

タイムスタンプを使用する

メッセージレベルのセキュリティがコンフィグレーションされている WebLogic Web サービスをクライアント アプリケーションが呼び出す場合、WebLogic Server は SOAP リクエストにタイムスタンプを組み込むことを要求し、SOAP 応答にタイムスタンプを追加します。デフォルトでは、WebLogic Server は次のことを行います。

WebLogic Web サービスのデフォルトのタイムスタンプ機能を変更するには、web-services.xml デプロイメント記述子の <security> 要素に <timestamp> 子要素を追加します。

次の web-services.xml の抜粋は、タイムスタンプ機能をコンフィグレーションする例を示しています。

<web-service>
...
<security>
<timestamp>
<clocks-synchronized>true</clocks-synchronized>
<clock-precision>30000</clock-precision>
<require-signature-timestamp>false</require-signature-timestamp>
<generate-signature-timestamp>true</generate-signature-timestamp>
<inbound-expiry>120000</inbound-expiry>
<outbound-expiry>30000</outbound-expiry>
</timestamp>
...
</security>
...
</web-service>

上の <timestamp> 要素では、関連する Web サービス オペレーションが呼び出されたときのタイムスタンプの機能が次のように指定されています。

<clock-precision> 要素の値は、WebLogic Server と Web サービス オペレーションを呼び出すクライアント アプリケーションとのクロック同期の精度を表しています。WebLogic Server は、この値を使用してすべてのタイムスタンプを一貫した方法で丸めます。たとえば、クロック精度が 30000 ミリ秒 (30 秒) であるとします。この場合、すべてのタイムスタンプは 30 秒単位で最も近い時刻に丸められます。たとえば、この例の場合、WebLogic Server は 12:00:1011:59:50 を同じ時刻 (12:00:00) に丸め、2 つのタイムスタンプを等しいものとして扱います。

web-services.xml デプロイメント記述子の各タイムスタンプ要素に対応するシステム プロパティがクライアント側に存在します。これらのプロパティは、クライアント アプリケーションで設定できます。詳細については、「Web サービスのシステム プロパティの使い方」を参照してください。

<timestamp> 要素とそのすべての子要素の詳細については、「WebLogic Web サービス デプロイメント記述子の要素」を参照してください。

web-services.xml ファイルのパスワードを暗号化する

weblogic.webservice.encryptpass ユーティリティを使用して、web-services.xml ファイルのキー ペア パスワード (暗号化およびデジタル署名に使用) を暗号化します。

web-services.xml ファイルの <security> 要素を編集してプレーン テキストのパスワードを暗号化すると、weblogic.webservice.encryptpass ユーティリティにより、指定された EAR ファイル (または展開ディレクトリ) が更新されます。

このパスワードを解読できるのは、ユーティリティに指定した WebLogic Server ドメインのみです。つまり、たとえば encryptpass ユーティリティで指定したドメインとは別の WebLogic Server ドメインで EAR ファイルをデプロイする場合は、プレーン テキストのパスワードを含む EAR ファイルに対して、新しいドメインを指定してユーティリティを再実行する必要があります。

パスワードを暗号化するには、次の手順に従います。

  1. 環境を設定します。
  2. Windows NT では、ドメイン ディレクトリにある setEnv.cmd コマンドを実行します。WebLogic Server ドメインのデフォルトの位置は、BEA_HOME\user_projects\domains\domainName です。BEA_HOME は BEA Products の最上位のインストール ディレクトリで、domainName はドメインの名前です。

    UNIX では、ドメイン ディレクトリにある setEnv.sh コマンドを実行します。WebLogic Server ドメインのデフォルトの位置は、BEA_HOME/user_projects/domains/domainName です。BEA_HOME は BEA Products の最上位のインストール ディレクトリで、domainName はドメインの名前です。

  3. EAR ファイルをデプロイする WebLogic Server ドメインのドメイン ディレクトリに変更します。このドメイン ディレクトリには、WebLogic Server に対する config.xml ファイルがあります。
  4. 警告 :web-services.xml ファイル内の暗号化されたパスワードを解読できるのはこの WebLogic Server ドメインのみです。

  5. 次のようにしてユーティリティを実行します。
  6. java weblogic.webservice.encryptpass options ear_or_dir

    各要素の説明は次のとおりです。

    次の例は、ears/myService.ear ファイルにパッケージ化された Hello Web サービスのパスワードを暗号化する方法を示しています。

java weblogic.webservice.encryptpass -serviceName Hello -verbose ears/myService.ear

表 13-1 weblogic.webservice.encryptpass ユーティリティのオプション

オプション

説明

-help

ユーティリティの使い方メッセージを出力する。

-version

ユーティリティのバージョン情報を出力する。

-verbose

冗長な出力を有効にする。

-warName name

web-services.xml ファイルを格納する、EAR ファイル内にパッケージ化された Web アプリケーション WAR ファイルの名前を指定する。

デフォルト値は web-services.war

-serviceName name

パスワードを暗号化する Web サービスの名前を指定する。この名前は、web-services.xml ファイルにある Web サービスの <web-service> 要素の name 属性に対応する。

デフォルト値は web-services.xml ファイルの最初の Web サービス。

-domain directory

Web サービスをデプロイする WebLogic Server のドメイン ディレクトリを指定する。

デフォルト値はユーティリティを実行している現在のディレクトリ。

データ保護された Web サービスを呼び出すように Java クライアントを更新する

デジタル署名または暗号化を使用する WebLogic Web サービスまたは非 WebLogic Web サービスを呼び出すように Java クライアント アプリケーションを更新するには、次の手順に従います。

  1. クライアント アプリケーションの CLASSPATH を更新し、WL_HOME/server/lib/wsse.jar を含めます。WL_HOME は、WebLogic Platform の最上位ディレクトリです。このクライアント JAR ファイルには、Web サービス セキュリティ (WS-Security) 仕様の BEA 実装が含まれます。
  2. Java コードを更新し、クライアントのキーストアからキー ペアおよびデジタル証明書をロードし、この情報をユーザ認証用のユーザ名およびパスワードとともに、呼び出されているセキュアな WebLogic Web サービスに渡します。
  3. 詳細については、「データ保護された WebLogic Web サービスを呼び出すように Java コードを記述する」を参照してください。

    セキュアな非 WebLogic Web サービスの呼び出し例については、「データ保護された非 WebLogic Web サービスを呼び出すように Java コードを記述する」を参照してください。

  4. クライアント アプリケーションを実行します。
  5. デジタル署名および暗号化についての詳細情報を取得するために設定できるシステム プロパティの詳細については、「クライアント アプリケーションを実行する」を参照してください。

データ保護された WebLogic Web サービスを呼び出すように Java コードを記述する

次の例は、メッセージ保護された WebLogic Web サービスを呼び出す Java クライアント アプリケーションを示しています。セキュリティ固有のコードは太字に表示し、例の後で説明します。

import java.io.IOException;
import java.io.FileInputStream;
import javax.xml.rpc.ServiceException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.UnrecoverableKeyException;
import java.security.Key;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import weblogic.webservice.context.WebServiceContext;
import weblogic.webservice.context.WebServiceSession;
import weblogic.webservice.core.handler.WSSEClientHandler;
import weblogic.xml.security.UserInfo;
public class Main{
  private static final String CLIENT_KEYSTORE = "client_keystore";
private static final String KEYSTORE_PASS = "client_keystore_password";
private static final String CLIENT_KEYNAME = "client_key";
private static final String CLIENT_KEYPASS = "client_key_password";
private static final String AUTHENTICATION_USER = "auth_user";
private static final String AUTHENTICATION_USER_PASS = "auth_user_password";
  public static void main( String[] args ){
    if( args.length == 1 ){
new Main( args[0] );
}else{
throw new IllegalArgumentException( "URL of the service not specified" );
}
}
  public Main( String wsdlUrl ){
    try{
HelloWorldService service = new HelloWorldService_Impl( wsdlUrl );
HelloWorldServicePort port = service.getHelloWorldServicePort();
      WebServiceContext context = service.context();
      X509Certificate clientcert = getCertificate(CLIENT_KEYNAME, CLIENT_KEYSTORE);
      PrivateKey clientprivate = (PrivateKey)getPrivateKey(CLIENT_KEYNAME, CLIENT_KEYPASS,CLIENT_KEYSTORE);
      WebServiceSession session = context.getSession();
      session.setAttribute(WSSEClientHandler.CERT_ATTRIBUTE, clientcert);
session.setAttribute(WSSEClientHandler.KEY_ATTRIBUTE, clientprivate);
      UserInfo ui = new UserInfo(AUTHENTICATION_USER, AUTHENTICATION_USER_PASS);
session.setAttribute(WSSEClientHandler.REQUEST_USERINFO, ui);
      World world = port.helloComplexWorld();
      System.out.println( world );
    }catch( IOException e ){
System.out.println( "Failed to create web service client:" + e );
}catch( ServiceException e ){
System.out.println( "Failed to create web service client:" + e );
}catch( KeyStoreException e ){
System.out.println( "Failed to create web service client:" + e );
}catch( CertificateException e ){
System.out.println( "Failed to create web service client:" + e );
}catch( UnrecoverableKeyException e ){
System.out.println( "Failed to create web service client:" + e );
}catch( NoSuchAlgorithmException e ){
System.out.println( "Failed to create web service client:" + e );
}
}
  private Key getPrivateKey( String keyname, String password, String keystore)
throws IOException, KeyStoreException, NoSuchAlgorithmException,
CertificateException, UnrecoverableKeyException{
    KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore), KEYSTORE_PASS.toCharArray());
Key result = ks.getKey(keyname, password.toCharArray());
return result;
}
  private static X509Certificate getCertificate(String keyname, String keystore)
throws IOException, KeyStoreException, NoSuchAlgorithmException,
CertificateException {
    KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore), KEYSTORE_PASS.toCharArray());
X509Certificate result = (X509Certificate) ks.getCertificate(keyname);
return result;
}
} 

上記のコードで注目すべき主な点は以下のとおりです。

この節で説明した WebLogic Web サービス API の詳細については、Javadoc を参照してください。

データ保護された非 WebLogic Web サービスを呼び出すように Java コードを記述する

次の例は、基本的に前節の例と同じですが、非 WebLogic Web サービス (.NET など) を呼び出す Java クライアント アプリケーションの記述方法を示しています。

この例では、weblogic.xml.security.wsse および weblogic.xml.security.specs API を使用してユーザ Tokens、X.509 TokensEncryptionSpecs、および SignatureSpecs (WebLogic クライアント API が非 WebLogic Web サービスを呼び出す SOAP リクエストに適切な <wsse:Security> 要素を作成するために使用する) を作成します。ユーザ Token オブジェクトにはユーザ名とパスワードが含まれ、X.509 Token オブジェクトには証明書とプライベート キー (省略可能) が含まれます。

注意 :Web サービスの WSDL にセキュリティ情報を指定するための標準の方法は現在のところ存在しません。このため、Web サービス プロバイダに問い合わせて、非 WebLogic Web サービスを呼び出すときに署名および暗号化する必要があるものを確認してください。

この例の関連セクションは太字で示してあります (この例に続いて説明があります)。

import java.io.IOException;
import java.io.FileInputStream;
import java.util.List;
import java.util.ArrayList;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import javax.xml.rpc.ServiceException;
import javax.xml.namespace.QName;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.HandlerRegistry;
import weblogic.webservice.context.WebServiceContext;
import weblogic.webservice.core.handler.WSSEClientHandler;
import weblogic.xml.security.wsse.Security;
import weblogic.xml.security.wsse.Token;
import weblogic.xml.security.wsse.SecurityElementFactory;
import weblogic.xml.security.specs.EncryptionSpec;
import weblogic.xml.security.specs.SignatureSpec;
import weblogic.xml.security.SecurityAssertion;
import examples.security.basicclient.BasicPort;
import examples.security.basicclient.Basic_Impl;
import examples.security.basicclient.Basic;
public class Client {
  private static final String CLIENT_KEYSTORE = "client.keystore";
private static final String KEYSTORE_PASS = "gumby1234";
  private static final String KEY_ALIAS = "joe";
private static final String KEY_PASSWORD = "myKeyPass";
  private static final String SERVER_KEY_ALIAS = "myServer";
  private static final String USERNAME = "pete";
private static final String USER_PASSWORD = "myPassword";
  public static void main(String[] args)
throws IOException, ServiceException, Exception {
    {
final KeyStore keystore = loadKeystore(CLIENT_KEYSTORE, KEYSTORE_PASS);
      Basic service = new Basic_Impl();
WebServiceContext context = service.context();
      // WSSE クライアント ハンドラをサービスのハンドラ チェーンに追加
HandlerRegistry registry = service.getHandlerRegistry();
      List list = new ArrayList();
      list.add(new HandlerInfo(WSSEClientHandler.class, null, null));
      registry.setHandlerChain(new QName("basicPort"), list);
      // クライアントの資格をロード
X509Certificate clientcert;
clientcert = getCertificate(KEY_ALIAS, keystore);
      PrivateKey clientprivate;
clientprivate = getPrivateKey(KEY_ALIAS, KEY_PASSWORD, keystore);
      // サーバの証明書をロード
X509Certificate serverCert = getCertificate(SERVER_KEY_ALIAS, keystore);
      // configure the Security element for the service.
SecurityElementFactory factory =
SecurityElementFactory.getDefaultFactory();
      Token x509token = factory.createToken(clientcert, clientprivate);
Token userToken = factory.createToken(USERNAME, USER_PASSWORD);
      EncryptionSpec encSpec = EncryptionSpec.getDefaultSpec();
SignatureSpec sigSpec = SignatureSpec.getDefaultSpec();
      Token serverToken = null;
      // サーバの証明書用のトークンを作成。PrivateKey は、なし
serverToken = factory.createToken(serverCert, null);
      Security security = factory.createSecurity(/* role */ null);
      // セキュリティ ヘッダにタイムスタンプを追加。 作成時刻は現在時刻となり
      // 有効期限はない
      security.addTimestamp();
      // ヘッダにユーザ名/パスワードを UsernameToken として追加
security.addToken(userToken);
      security.addSignature(x509token, sigSpec);
      // 署名検証用のクライアント証明書と応答用の暗号を追加
// 署名の後に追加する必要がある
security.addToken(x509token);
      security.addEncryption(serverToken, encSpec);
      BasicPort port = service.getbasicPort();
      // セキュリティ要素をリクエストに追加
context.getSession().setAttribute("weblogic.webservice.security.request",
security);
      String result = null;
result = port.helloback();
      System.out.println(result);
      // view the assertions from processing the server's response...
SecurityAssertion[] assertions = (SecurityAssertion[])
context.getSession().getAttribute("weblogic.webservice.security.assertions.response");
for (int i = 0; i < assertions.length; i++) {
        SecurityAssertion assertion = assertions[i];
System.out.println(assertion);
}
}
}
  private static KeyStore loadKeystore(String filename, String password)
throws KeyStoreException, IOException, NoSuchAlgorithmException,
CertificateException {
final KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(filename), password.toCharArray());
return ks;
}
  private static PrivateKey getPrivateKey(String alias, String password, 
KeyStore keystore)
throws Exception {
PrivateKey result =
(PrivateKey) keystore.getKey(alias, password.toCharArray());
    return result;
}
  private static X509Certificate getCertificate(String alias, KeyStore keystore)
throws Exception {
X509Certificate result = (X509Certificate) keystore.getCertificate(alias);
return result;
}
}

上記のコードで注目すべき主な点は以下のとおりです。

      context.getSession().setAttribute("weblogic.webservice.security.request",
security);

WebLogic Web サービス セキュリティ API を使用してセキュアな非 WebLogic Web サービスを呼び出すときには、次の点に注意してください。

クライアント アプリケーションを実行する

Web サービスの呼び出しでデジタル署名および暗号化を使用するクライアント アプリケーションを実行する場合、次のシステム プロパティを設定すると詳細な実行時セキュリティ情報を表示できます。

 


転送レベルのセキュリティ (SSL) のコンフィグレーション : 主な手順

転送レベルのセキュリティとは、セキュア ソケット レイヤ (SSL) を使用したクライアント アプリケーションと Web サービスの間の接続の保護です。主な手順を次に示し、詳細についてはこの章の後の節で説明します。

  1. WebLogic Server に対して SSL をコンフィグレーションします。
  2. 一方向の SSL (デフォルト。WebLogic Server がクライアント アプリケーションに証明書を提示する必要がある)、または双方向の SSL (クライアント アプリケーションと WebLogic Server が両方とも互いに証明書を提示する必要がある) のいずれかをコンフィグレーションできます。

    SSL の詳細、一方向と双方向の違い、およびコンフィグレーションの手順については、「SSL のコンフィグレーション」を参照してください。

  3. 必要であれば、web-services.xml ファイルを更新して、Web サービスが HTTPS のみによりアクセスできるように指定します。
  4. HTTPS プロトコルを指定する」を参照してください。

  5. クライアント アプリケーションに対して SSL をコンフィグレーションします。
  6. クライアント アプリケーションに対して SSL をコンフィグレーションする」を参照してください。

警告 :WebLogic Web サービスを呼び出すときに双方向 SSL を使用して接続を保護する場合、WebLogic Server は、anonymous ID を使用して Web サービスへのアクセスを認可します。この認可が失敗した場合、WebLogic Server はまず、証明書の身元を断定して、その身元が有効な WebLogic Server ユーザにマップされていることを確認してから、そのユーザ ID を使用して Web サービスを呼び出します。これは、その Web サービスまたはステートレス EJB バックエンド コンポーネントで特別な特権が必要とされていない場合も同様です。

警告: anonymous ユーザ ID ではなく、クライアント証明書にマップされたユーザ資格を使用するには、Web Service への匿名アクセスを無効にする必要があります。

警告 : しかし、WebLogic Server は一方向 SSL では証明書の身元を断定しません (この場合クライアント アプリケーションはその証明書を送信しないため)。

Web サービスでの SSL の使用が及ぼす影響

Web サービスで SSL を使用する場合には、以下のスレッドセーフの問題に留意する必要があります。BEA 生成の JAX-RPC クライアント スタブは、デフォルトではスレッドセーフです。ただし、SSL を有効にすると、クライアント スタブはスレッドセーフではなくなります。Web サービスのクライアント アプリケーションでスレッドの問題が発生する可能性を最小限に押さえるために、以下のいずれかを行うことをお勧めします。

クライアント アプリケーションが EJB でない場合は、同期化を利用してスレッドの問題を処理することもできます。EJB の仕様に違反するので、クライアントが EJB の場合は同期化を利用できません。

 


クライアント アプリケーションに対して SSL をコンフィグレーションする

クライアント アプリケーションの SSL は、以下のいずれかを使用してコンフィグレーションします。

双方向 SSL を使用する場合は、クライアント アプリケーションもその証明書を WebLogic Server に提示する必要があります。詳細については、「クライアント アプリケーションでの双方向 SSL のコンフィグレーション」を参照してください。

この節で説明した API の詳細については、Web サービスのセキュリティに関する Javadoc を参照してください。

WebLogic Server が提供する SSL 実装を使用する

スタンドアロンのクライアント アプリケーションを使用している場合、WebLogic Server は、webserviceclient+ssl.jar クライアント実行時 JAR ファイルで SSL の実装を提供します。このクライアント JAR ファイルには、SSL 実装のほか、webservicesclient.jar にある、標準のクライアント JAX-RPC 実行時クラスも入っています。

注意 :クライアント機能に関する BEA の現在のライセンスの詳細については、BEA eLicense Web サイトを参照してください。

クライアント アプリケーションに対して基本的な SSL サポートをコンフィグレーションするには、次の手順に従います。

  1. 信頼性のある認証局 (Certificate Authority: CA) の証明書のファイル名を設定します。その方法は次のいずれかです。
  2. Java クライアント アプリケーションを、スタンドアロン クライアントとして、または WebLogic Server で実行します。
  3. スタンドアロン クライアント アプリケーションを作成する場合は、次のようにします。

  4. 信頼性のある CA ファイルで CA によって発行された証明書を使用していない場合は、スタンドアロン アプリケーション実行時にコマンドラインで weblogic.webservice.client.ssl.strictcertchecking システム プロパティを false に設定するか、プログラムで BaseWLSSLAdapter.setStrictCheckingDefault() メソッドを使用して、厳密な証明書検証を無効にします。WebLogic Server でクライアント アプリケーションを実行している場合は、2 番目の方法を使用します。

デフォルトでは、WebLogic SSL の実装を使用するクライアント アプリケーションはソケットを共有しません。この動作を変更する場合は、「WebLogic の SSL 実装使用時の SSL ソケット共有の使用」を参照してください。

詳細については、Web サービスのセキュリティに関する Javadoc を参照してください。

WebLogic SSL 実装をプログラムでコンフィグレーションする

WebLogic Server が提供する SSL 実装を、weblogic.webservice.client.WLSSLAdapter アダプタ クラスを使用してプログラムでコンフィグレーションすることもできます。このアダプタ クラスには、WebLogic Server の SSL 実装固有のコンフィグレーション情報が保持されていて、コンフィグレーションの参照と変更を可能にします。

次の抜粋は、ある WebLogic Web サービスに対する WLSSLAdapter クラスのコンフィグレーションの例です。太字の行については、例の後で説明します。

    // アダプタをインスタンス化する
WLSSLAdapter adapter = new WLSSLAdapter();
adapter.setTrustedCertifcatesFile("mytrustedcerts.pem");
    // optionally set the Adapter factory to use this
// instance always...
SSLAdapterFactory.getDefaultFactory().setDefaultAdapter(adapter);
SSLAdapterFactory.getDefaultFactory().setUseDefaultAdapter(true);
    // サービス ファクトリを作成
ServiceFactory factory = ServiceFactory.newInstance();
    // サービスを作成
Service service = factory.createService( serviceName );
    // 呼び出しを作成
Call call = service.createCall();
    call.setProperty("weblogic.webservice.client.ssladapter",
adapter);
    try {
      // リモートの Web サービスを呼び出し
String result = (String) call.invoke( new Object[]{ "BEAS" } );
System.out.println( "Result: " +result);
} catch (JAXRPCException jre) {
...
} }

この例では、まず、WebLogic Server が提供する WLSSLAdapter クラスをインスタンス化する方法を示しています。webserviceclient+ssl.jar ファイルにある SSL 実装をサポートするクラスです。次に、setTrustedCertificatesFile(String) メソッドを使用して認証局証明書が入ったファイルの名前を選択して、アダプタ インスタンスをコンフィグレーションしています。この例では、ファイルの名前は mytrustedcerts.pem です。

次に、アダプタ ファクトリのデフォルトのアダプタとして WLSSLAdapter を設定する方法を示し、ファクトリが必ずこのデフォルト値を返すようにコンフィグレーションしています。

注意 :これは省略可能な手順で、すべての Web サービスとそれぞれに対応するコンフィグレーションが、同じアダプタ クラスを共有できるようにします。

また、Web サービスの特定のポートや呼び出しに対してこのアダプタを設定することもできます。上の例では、このアダプタを設定し、Call クラスを使用して Web サービスを動的に呼び出す方法を示しています。

call.setProperty("weblogic.webservice.client.ssladapter", adapter);

weblogic.webservice.client.SSLAdapter インタフェース (この例では、WebLogic Server が提供する WLSSLAdapter クラス) を実装するオブジェクトにこのプロパティを設定してください。

次の例では、アダプタを設定し、Stub インタフェースを使用して Web サービスを静的に呼び出す方法を示しています。

((javax.xml.rpc.Stub)stubClass)._setProperty("weblogic.webservice.client.ssladapter", adapterInstance);

次のメソッドを使用することにより、Web サービスの呼び出しまたはポートの特定のインスタンスに対するアダプタを取得して、Web サービスを動的に呼び出せます。

call.getProperty("weblogic.webservice.client.ssladapter");

Web サービスを静的に呼び出すには、次のメソッドを使用します。

((javax.xml.rpc.Stub)stubClass)._getProperty("weblogic.webservice.client.ssladapter");

詳細については、Web サービスのセキュリティに関する Javadoc を参照してください。

WebLogic の SSL 実装使用時の SSL ソケット共有の使用

デフォルトでは、WebLogic Server 提供の SSL 実装を使用して WebLogic Web サービスに接続する SSL クライアント アプリケーションでソケットの共有は無効です。

ただし、クライアント アプリケーションのパフォーマンスを向上させるために、ソケット共有を有効にして Web サービスの複数の連続的な呼び出しを実現することができます。このソケット共有メカニズムを使用すると、SSL 接続の再利用のパフォーマンスを向上させつつ、必要なセキュリティを実施することができます。

SSL ソケット共有の有効化の影響

アプリケーションが、実際には複数のクライアントが SSL 認証を使用して Web サービスを呼び出すサーバである場合は、クライアントが別のクライアントの JAX-RPC スタブ実装オブジェクト (weblogic.webservice.core.rpc.StubImpl) にアクセスするのを防止する必要があります。

セキュリティおよび一般的なスレッドセーフの問題のため (「Web サービスでの SSL の使用が及ぼす影響」を参照)、ソケット共有メカニズムはデフォルトでは無効です。

システム プロパティを使用して SSL ソケット共有を有効化する

システム プロパティを使用して、SSL クライアント アプリケーションでソケットの共有を有効にするには、次の例のように、クライアント アプリケーションの起動に使用するコマンドで Java のシステム プロパティ https.sharedsockettrue に設定します。

java -Dbea.home=/bea_home \
-Djava.protocol.handler.pkgs=com.certicom.net.ssl \
-Dhttps.sharedsocket=true my_app

https.sharedsocket システム プロパティのデフォルト値は false です。

共有ソケットのタイムアウト値を指定することもできます。そのためには、次の例のように、https.sharedsocket.timeout システム プロパティを使用して共有ソケットが存続する秒数を設定します。

java -Dbea.home=/bea_home \
-Djava.protocol.handler.pkgs=com.certicom.net.ssl \
-Dhttps.sharedsocket=true
-Dhttps.sharedsocket.timeout=30 my_app

https.sharedsocket.timeout のデフォルト値は 15 秒です。

注意 :このタイムアウト値は、ソケットを制御する実際の転送レイヤには適用されません。この値は、SSL ソケットが指定の期間に参照されていないかどうかを判断するために使用します。参照されていない場合、その参照について、時間切れになっていればソケットは閉じられ、プロトコル ハンドシェークが再開されます。

HttpsBindingInfo API を使用して SSL ソケット共有を有効化する

SSL クライアント アプリケーション内で、プログラムからソケットの共有を有効にする場合に、システム プロパティではなく weblogic.webservice.binding.https.HttpsBindingInfo SSL バインディング API を使用することもできます。WebLogic SSL 実装を使用する際には、HttpsBindingInfo のパブリック コンストラクタを使用して HttpsBindingInfo オブジェクトを作成します。コンストラクタは、クライアント アプリケーションが SSLAdapter クラスの WLSSSLAdapter サブクラスを使用していると指定しています。

API でクライアント アプリケーションのソケットの共有を有効にするには、HttpsBindingInfo.setSocketSharing(boolean) セッター メソッドに値 true を渡し、これを HttpsBindingInfo オブジェクトに対して使用します。ソケットの共有を無効化するには、メソッドに値 false を渡します。このメソッドをアプリケーション内に呼び出さなかった場合のデフォルト値は、false (ソケットの共有は行われない) です。

また、HttpsBindingInfo.setSharedSocketTimeout(long) メソッドに、共有されるソケットが有効である秒数を渡し、それを HttpsBindingInfo オブジェクトに対して使用することで、共有されるソケットのタイムアウト値を指定することもできます。このメソッドの設定を行わなかった場合のデフォルト値は、15 秒です。

注意 :このタイムアウト値は、ソケットを制御する実際の転送レイヤには適用されません。この値は、SSL ソケットが指定の期間に参照されていないかどうかを判断するために使用します。参照されていない場合、その参照について、時間切れになっていればソケットは閉じられ、プロトコル ハンドシェークが再開されます。

クライアント アプリケーション内で共有されている SSL ソケットを閉じるには、HttpsBindingInfo オブジェクトに対して HttpsBindingInfo.closeSharedSocket() メソッドを使用します。このメソッドにはパラメータがありません。通常、共有されるソケットは、HttpsBindingInfo オブジェクトを作成する元となったオブジェクトのクリーンアップ メソッドで閉じます。

サードパーティの SSL 実装を使用する

サードパーティの SSL 実装を使用する場合は、まず独自のアダプタ クラスを実装する必要があります。次の例は、JSSE のサポートを提供する簡単なクラスを示しています。自分でクラスを実装する主な手順は、例の後で説明します。

import java.net.URL;
import java.net.Socket;
import java.net.URLConnection;
import java.io.IOException;
public class JSSEAdapter implements weblogic.webservice.client.SSLAdapter {
  javax.net.SocketFactory factory =
javax.net.ssl.SSLSocketFactory.getDefault();
  // weblogic.webservice.client.SSLAdapter インタフェースを実装
  public Socket createSocket(String host, int port) throws IOException  {
return factory.createSocket(host, port);
}
  public URLConnection openConnection(URL url) throws IOException {
// java.protocol.handler.pkgs が正しく設定されていることを前提とする
return url.openConnection();
}
  // コンフィグレーション インタフェース
  public void setSocketFactory(javax.net.ssl.SSLSocketFactory factory) {
this.factory = factory;
}
  public javax.net.ssl.SSLSocketFactory getSocketFactory() {
return (javax.net.ssl.SSLSocketFactory) factory;
}
}

自分でアダプタ クラスを作成するには、次の手順に従います。

  1. 次のインタフェースを実装するクラスを作成します。
  2. weblogic.webservice.client.SSLAdapter
  3. 次のシグネチャを持つ createSocket メソッドを実装します。
  4. public Socket createSocket(String host, int port) 
    throws IOException

    このメソッドは、java.net.Socket を拡張するオブジェクトを返します。このオブジェクトは、Web サービスが呼び出されると、指定されたホスト名とポートに接続されます。

  5. 次のシグネチャを持つ openConnection メソッドを実装します。
  6. public URLConnection openConnection(URL url) throws IOException 

    このメソッドは、java.net.URLConnection を拡張するオブジェクトを返します。このオブジェクトは、指定された URL に接続されるようにコンフィグレーションされます。これらの接続は、Web サービスの WSDL のダウンロードなど、使用頻度の低いネットワーク オペレーションに使用されます。

  7. クライアント アプリケーションの実行時に、次の System プロパティを、作成したアダプタ クラスの完全修飾名に設定します。
  8. weblogic.webservice.client.ssl.adapterclass

    デフォルトの SSLAdapterFactory クラスは、作成したアダプタ クラスをロードし、デフォルトの引数を持たないコンストラクタを使用してそのクラスのインスタンスを作成します。

  9. WebLogic SSL 実装をプログラムでコンフィグレーションする」で示したようにカスタム アダプタをコンフィグレーションし、WLSSLAdapter を自分のクラスに置き換えて、アダプタに定義されたコンフィグレーション方法を使用します。

詳細については、Web サービスのセキュリティに関する Javadoc を参照してください。

SSLAdapterFactory クラスを拡張する

SSLAdapterFactory クラスを拡張することによって、カスタムの SSL アダプタのファクトリ クラス (アダプタのインスタンスを作成するために使用) を作成することができます。ファクトリ クラスを拡張する理由の 1 つとして、各アダプタの使用に先立ち、その作成時にカスタムのコンフィグレーションを実行できることが挙げられます。

カスタムの SSL アダプタのファクトリ クラスを作成するには、次の手順に従います。

  1. 次のクラスを拡張するクラスを作成します。
  2. weblogic.webservice.client.SSLAdapterFactory
  3. SSLAdapterFactory クラスの次のメソッドを書き換えます。
  4. public weblogic.webservice.client.SSLAdapter createSSLAdapter();

    アダプタ ファクトリによって、SSLAdapter またはこのインタフェースを実装するアダプタが新たに作成されたときは、必ず、このメソッドが呼び出されます。このメソッドを書き換えることによって、新しいアダプタを実際に使用し始める前にカスタムのコンフィグレーションを実行できます。

  5. クライアント アプリケーションで、ファクトリのインスタンスを作成し、次のメソッドを実行して、そのファクトリをデフォルト ファクトリとして設定します。
  6. SSLAdapterFactory.setDefaultFactory(factoryInstance);

詳細については、Web サービスのセキュリティに関する Javadoc を参照してください。

クライアント アプリケーションでの双方向 SSL のコンフィグレーション

WebLogic Server で双方向 SSL をコンフィグレーションした場合は、一方向 SSL で必要なように WebLogic Server がクライアント アプリケーションに証明書を提示するだけでなく、クライアント アプリケーションも WebLogic Server に証明書を提示する必要があります。次のサンプル Java コードはその一方向を示しており、クライアント アプリケーションが引数としてクライアント証明書ファイルを受け取ります (関連コードは太字)。

...
SSLAdapterFactory factory = SSLAdapterFactory.getDefaultFactory();
WLSSLAdapter adapter = (WLSSLAdapter) factory.getSSLAdapter();
if (argv.length > 1 ) {
System.out.println("loading client certs from "+argv[1]);
FileInputStream clientCredentialFile  = new FileInputStream (argv[1]);
String pwd = "clientkey";
adapter.loadLocalIdentity(clientCredentialFile, pwd.toCharArray());
javax.security.cert.X509Certificate[] certChain = adapter.getIdentity("RSA",0);
factory.setDefaultAdapter(adapter);
factory.setUseDefaultAdapter(true);
...

プロキシ サーバを使用する

たとえば、クライアント アプリケーションがファイアウォールの内側で動作している状況で、プロキシ サーバを使用する必要がある場合は、以下の 2 つの System プロパティを使用してプロキシ サーバのホスト名とポートを設定します。

これらの System プロパティの詳細については、「Web サービスのシステム プロパティの使い方」を参照してください。

 


アクセス制御セキュリティのコンフィグレーション : 主な手順

アクセス制御セキュリティとは、アクセスできるユーザを制御するために Web サービスをコンフィグレーションし、クライアントがオペレーションの 1 つを呼び出したときに Web サービスに HTTP を使用してそれ自体を認証するようにクライアント アプリケーションをコーディングすることです。

主な手順を次に示し、詳細についてはこの章の後の節で説明します。

  1. ロールを作成し、それらを自分のレルムのプリンシパルにマップして、次に、ロール内のプリンシパルのみがアクセスできる、安全なコンポーネントがどれであるかを指定することにより、Web サービス全体またはその一部のコンポーネントへのアクセスをコントロールします。
  2. WebLogic Web サービスへのアクセスをコントロールする」を参照してください。

  3. 必要であれば、web-services.xml ファイルを更新して、Web サービスが HTTPS のみによりアクセスできるように指定します。
  4. HTTPS プロトコルを指定する」を参照してください。

  5. WebLogic Web サービスの呼び出し時に、HTTP を使用して認証されるように、クライアントをコーディングします。
  6. Web サービスに対して認証するためにクライアント アプリケーションをコーディングする」を参照してください。

WebLogic Web サービスへのアクセスをコントロールする

WebLogic Web サービスは、標準 J2EE エンタープライズ アプリケーションとしてパッケージ化されます。したがって、Web サービスへのアクセスにセキュリティを設定するには、Web サービスを構成する以下のコンポーネントのいくつかまたはすべてに対するアクセスにセキュリティを設定する必要があります。

ベーシック HTTP 認証または SSL を使用して、WebLogic Web サービスにアクセスするクライアントを認証できます。上記のコンポーネントの多くは標準の J2EE コンポーネントであるため、標準の J2EE セキュリティ プロシージャを使用してセキュリティを設定します。以下の節では、これらの各コンポーネントを保護する方法について説明します。

注意 :Web サービスを実装するバックエンド コンポーネントが Java クラスまたは JMS リスナである場合、その Web サービスのセキュリティは、Web サービス全体または Web サービスを呼び出す URL にセキュリティ制約を追加することによってのみ設定できます。つまり、Web サービスを実装するバックエンド コンポーネントにはセキュリティを設定できません。

WebLogic のセキュリティのコンフィグレーション、プログラミング、および管理の詳細については、セキュリティに関するドキュメントを参照してください。

Web サービス全体とそのオペレーションに対してセキュリティを設定する

Web サービス全体のセキュリティは、Administration Console でセキュリティ ポリシーを作成して WebLogic Web サービスに割り当てることで設定します。また、Administration Console を使用して Web サービス オペレーションの一部にセキュリティを設定することもできます。セキュリティ ポリシーは、WebLogic リソース (このケースでは WebLogic Server またはそのオペレーションの一部) に「誰がアクセスできるのか」という質問に答えるものです。セキュリティ ポリシーは、WebLogic リソースとユーザ、グループ、またはロールの間の関連付けを定義するときに作成します。WebLogic リソースは、セキュリティ ポリシーが割り当てられるまでは保護されません。

セキュリティ ポリシーは、個々のリソースあるいはリソースの属性またはオペレーションに割り当てます。セキュリティ ポリシーをリソースのタイプに割り当てると、そのリソースのすべての新しいインスタンスがそのセキュリティ ポリシーを継承します。個々のリソースまたは属性に割り当てられたセキュリティ ポリシーは、リソースのタイプに割り当てられたセキュリティ ポリシーをオーバーライドします。

ユーザまたはグループを使用してセキュリティ ポリシーを作成する場合は、そのユーザまたはグループがデフォルト セキュリティ レルムでコンフィグレーションされた認証プロバイダで定義されている必要があります。ロールを使用してセキュリティ ポリシーを作成する場合は、そのロールがデフォルト セキュリティ レルムでコンフィグレーションされたロール マッピング プロバイダで定義されている必要があります。WebLogic 認証プロバイダおよびロール マッピング プロバイダは、デフォルトでコンフィグレーションされています。

Administration Console を使用して WebLogic Web サービスまたはそのオペレーションの一部を保護する手順については、『WebLogic リソースのセキュリティ』を参照してください。

Web サービスの URL に対してセキュリティを設定する

WebLogic Web サービスのホーム ページおよび WSDL の URL」で説明したとおり、クライアント アプリケーションは、URL を使用して Web サービスにアクセスします。 以下は、このような URL の例です。

http://ariel:7001/web_services/TraderService

URL へのアクセスを制限することにより、Web サービス全体へのアクセスを制限できます。そのためには、web.xml および weblogic.xml の両デプロイメント記述子ファイル (web-services.xml ファイルが格納されている Web アプリケーションにあります) をセキュリティ情報で更新します。

URL へのアクセス制限の詳細については、『WebLogic リソースのセキュリティ』を参照してください。

ステートレス セッション EJB とそのメソッドに対してセキュリティを設定する

Web サービスを実装するステートレス セッション EJB に対してセキュリティを設定する場合は、そのサービスを呼び出すクライアント アプリケーションは、Web アプリケーション、WSDL および Web サービスのホーム ページにはアクセスできますが、オペレーションを実装するメソッドそのものを呼び出すことができない場合があります。このタイプのセキュリティは、EJB のビジネス ロジックに誰がアクセスしたかを細かくモニタするが、Web サービス全体へのアクセスはブロックしないという場合に便利です。

また、このタイプのセキュリティは、メソッドレベルで、Web サービスのさまざまなオペレーションにアクセスする場合にも使用できます。たとえば、情報を表示するメソッドは任意のユーザによって呼び出せるが、一部のユーザのみが情報を更新できるように指定することができます。

Administration Console を使用して EJB および個々の EJB メソッドを保護する手順については、『WebLogic リソースのセキュリティ』を参照してください。

Web サービスの WSDL とホーム ページを保護する

次の手順に示すように、Web サービスを記述する web-services.xml デプロイメント記述子を更新することによって、WebLogic Web サービスの WSDL およびホーム ページへのアクセスを制限できます。

  1. エディタで web-services.xml ファイルを開きます。
  2. web-services.xml ファイルは、Web サービス EAR ファイルにある Web アプリケーションの WEB-INF ディレクトリにあります。ファイルの場所の詳細については、「Web サービス EAR ファイル パッケージ」を参照してください。

  3. WSDL へのアクセスを制限するには、対象 Web サービスを記述する <web-service> 要素に exposeWSDL="False" 属性を追加します。ホーム ページへのアクセスを制限するには、exposeHomepage="False" 属性を追加します。次に例を示します。
  4.      <web-service 
    name="stockquotes"
    uri="/myStockQuoteService"
    exposeWSDL="False"
    exposeHomePage="False"
    >
    ...
    </web-service>

    exposeWSDL および exposeHomepage 属性のデフォルト値は True です。

  5. 変更を有効にするために、Web サービスを再デプロイします。Web サービスの WSDL とホーム ページがすべてのユーザからアクセスできなくなります。

HTTPS プロトコルを指定する

Web サービスを HTTPS によってのみアクセスできるようにするには、次の例に示すように、その Web サービスを記述する web-services.xml ファイルにある <web-service> 要素の protocol 属性を更新します。

<web-services>
<web-service name="stockquotes"
targetNamespace="http://example.com"
uri="/myStockQuoteService"
protocol="https" >
...
</web-service>
</web-services>

注意 :WebLogic Server に対して SSL のコンフィグレーションは行うが、web-services.xml ファイルで HTTPS プロトコルを指定しない場合は、クライアント アプリケーションから HTTP および HTTPS を使用して Web サービスにアクセスすることができます。ただし、web-services.xml ファイルで HTTPS アクセスを指定した場合、クライアント アプリケーションでは HTTP を使用して Web サービスにアクセスできません。

servicegen Ant タスクを使用して Web サービスをアセンブルする場合は、次の build.xml ファイルのサンプルに示すように、<service> 要素の protocol 属性を使用して HTTPS プロトコルを指定してください。

<project name="buildWebservice" default="ear">
<target name="ear">
<servicegen
destEar="ws_basic_statelessSession.ear"
contextURI="WebServices"
<service
ejbJar="HelloWorldEJB.jar"
targetNamespace="http://www.bea.com/webservices/basic/statelesSession"
serviceName="HelloWorldEJB"
serviceURI="/HelloWorldEJB"
protocol="https"
generateTypes="True"
expandMethods="True">
</service>
</servicegen>
</target>
</project>

Web サービスに対して認証するためにクライアント アプリケーションをコーディングする

Web サービスを呼び出す JAX-RPC クライアント アプリケーションを記述する際、クライアントの認証ができるように、サービスにユーザ名とパスワードを送信するための次の 2 つのプロパティを使用します。

次の例は JAX-RPC 仕様からの抜粋ですが、javax.xml.rpc.Stub インタフェースを使用してセキュアな Web サービスを呼び出す場合の、これらのプロパティの使い方を示しています。

StockQuoteProviderStub sqp = // ... スタブを取得する
sqp._setProperty ("javax.xml.rpc.security.auth.username", "juliet");
sqp._setProperty ("javax.xml.rpc.security.auth.password", "mypassword");
float quote sqp.getLastTradePrice("BEAS");

WebLogic で生成したクライアント JAR ファイルを使用して Web サービスを呼び出す場合は、Stub クラスがすでに作成されているため、JAX-RPC 仕様から抜粋した次の例に示すように、getServicePort() メソッドのサービス固有の実装にユーザ名とパスワードを渡すことができます。

StockQuoteService sqs = //  サービスへアクセスを取得する;
StockQuoteProvider sqp = sqs.getStockQuoteProviderPort ("juliet", "mypassword");
float quote = sqp.getLastTradePrice ("BEAS");

この例では、getStockQuoteProvidePort() メソッドの実装が、上記 2 つの認証プロパティを設定します。

JAX-RPC を使用してセキュアな Web サービスを呼び出すクライアント アプリケーションの記述に関する詳細については、http://java.sun.com/xml/jaxrpc/index.html を参照してください。

 


セキュアな WebLogic Web サービスのホーム ページからのテスト

WebLogic Web サービスのデプロイとテスト」では、非セキュアな WebLogic Web サービスをホーム ページから呼び出してテストする方法について説明しています。

セキュアな WebLogic Web サービスをホーム ページからテストする場合は、サーバ自体が Web サービスのセキュアなクライアントとして機能するため、WebLogic Server の追加のコンフィグレーションが必要です。特に、trusted-ca.pem という、信頼性のある認証局 (CA) ファイルを使用するように WebLogic Server をコンフィグレーションする必要があります。ホーム ページはセキュアな Web サービスを呼び出すときにこのファイルを使用するようにハードコード化されており、サーバ キーストアを使用しません。ホーム ページは標準の WebLogic Web サービス クライアント JAR ファイルを使用しており、標準の JAR ファイルには、可能な限りシン クライアントにする目的で、キーストアから証明書を抽出する際に必要なセキュリティ API が含まれていないためです。

注意 :ホーム ページからセキュアな Web サービスをテストするときには、双方向 SSL を使用できません。

ホーム ページからセキュアな WebLogic Web サービスをテストするには、次の手順に従います。

  1. まだコンフィグレーションされていない場合は、WebLogic Server に対して SSL をコンフィグレーションします。
  2. 詳細については、「SSL のコンフィグレーション」を参照してください。

  3. WebLogic Server のこのインスタンスを起動するスクリプトに、次のフラグを追加します。
-Dweblogic.webservice.client.ssl.strictcertchecking=false
-Dweblogic.security.SSL.ignoreHostnameVerification=true
  1. 次の手順により、trusted-ca.pem という名前の、信頼される認証局 (CA) ファイルを作成します。
    1. コマンド ウィンドウを開き、環境を設定します。
    2. Windows NT では、ドメイン ディレクトリにある setEnv.cmd コマンドを実行します。WebLogic Server ドメインのデフォルトの位置は、BEA_HOME\user_projects\domains\domainName です。BEA_HOME は BEA Products の最上位のインストール ディレクトリで、domainName はドメインの名前です。

      UNIX では、ドメイン ディレクトリにある setEnv.sh コマンドを実行します。WebLogic Server ドメインのデフォルトの位置は、BEA_HOME/user_projects/domains/domainName です。BEA_HOME は BEA Products の最上位のインストール ディレクトリで、domainName はドメインの名前です。

    3. WL_HOME\server\lib ディレクトリに移動します。WL_HOME は、WebLogic Platform のインストール先の最上位ディレクトリです。
    4. 信頼される認証局ファイル WL_HOME\server\lib\CertGenCA.der を、DER 形式から PEM 形式に変換するには、utils.der2pem WebLogic Server Java ユーティリティを使用します。
    5. java utils.der2pem CertGenCA.der

      ユーティリティは、CertGenCA.pem というファイルを生成します。

    6. 生成された CertGenCA.pem のファイル名を trusted-ca.pem に変更します。
  2. 前の手順で作成した trusted-ca.pem ファイルを、WebLogic Server のドメイン ディレクトリに移動します。
  3. WebLogic Server を再起動して起動フラグを有効にします。
  4. セキュアな WebLogic Web サービスのホーム ページをブラウザで呼び出します。ブラウザに、証明書が信頼されていないというメッセージが表示されます。
  5. ブラウザに信頼性のある証明書をロードします。設定を有効にするには、ブラウザの再起動が必要な場合があります。
  6. セキュアな WebLogic Web サービスのホーム ページを再びブラウザで呼び出します。これで、セキュアな Web サービスをテストできるようになります。「WebLogic Web サービスのデプロイとテスト」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次