BEA ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Server > WebLogic Web サービス プログラマーズ ガイド > セキュリティのコンフィグレーション |
WebLogic Web サービス プログラマーズ ガイド
|
この章では、WebLogic Web サービスのセキュリティをコンフィグレーションする方法について説明します。
WebLogic Web サービスに対するセキュリティのコンフィグレーションは、基本的には、WebLogic Server で実行される他のタイプのアプリケーションやコンポーネントに対するセキュリティのコンフィグレーションと同じです。Web サービス全体に対するセキュリティは、Web サービスおよび WSDL を呼び出す URL へのアクセスを制限することにより設定できます。Web サービス全体でセキュリティを設定すると、その Web サービスを構成するコンポーネントも自動的にセキュリティが設定されます。また、ステートレス セッション EJB、一部のメソッド、web-services.xml ファイルが入った Web アプリケーションなど、Web サービスの個々のコンポーネントに対してセキュリティを設定することもできます。
Web サービスまたはそのコンポーネントへのアクセスが保護されたら、その Web サービスを呼び出すときに HTTP または SSL を使用してそれ自身を認証するようにクライアント アプリケーションをコンフィグレーションします。
WebLogic Web サービスのセキュリティのさらなる例については、「Webservice Download Page」を参照してください。
WebLogic Web サービスおよび、サービスを呼び出すクライアントのセキュリティをコンフィグレーションするには、次の手順に従います。この手順の詳しい説明は後の節で行います。
WebLogic Web サービスへのアクセスのコントロールを参照してください。
HTTPS プロトコルの指定を参照してください。
WebLogic Server がクライアント アプリケーションに対して証明の提示を要求される場合には一方向 SSL、またクライアント アプリケーションと WebLogic Server の双方が互いに証明書を提示する場合には、双方向 SSL をコンフィグレーションします。
SSL の詳細、一方向と双方向の違い、および両者をコンフィグレーションするための手順については、「SSL のコンフィグレーション」を参照してください。
クライアント アプリケーションに対する SSL のコンフィグレーションを参照してください。
WebLogic Web サービスへのアクセスのコントロール
前述のように、WebLogic Web サービスは、標準 J2EE エンタープライズ アプリケーションとしてパッケージ化されます。したがって、Web サービスへのアクセスにセキュリティを設定するには、Web サービスを構成する以下の標準 J2EE コンポーネントのいくつかまたはすべてに対するアクセスにセキュリティを設定する必要があります。
ベーシック HTTP 認証または SSL を使用して、WebLogic Web サービスにアクセスするクライアントを認証できます。先のコンポーネントが標準の J2EE コンポーネントであるため、標準の J2EE セキュリティ プロシージャを使用してセキュリティを設定します。
注意: Web サービスを実装するバックエンド コンポーネントが Java クラスまたは JMS リスナである場合は、次の節で説明するとおり、その Web サービスに対しては、Web サービスを呼び出す URL へのセキュリティ制約の追加によるほかは、セキュリティを設定できません。
WebLogic のセキュリティのコンフィグレーション、プログラミング、および管理の詳細については、セキュリティに関するドキュメントを参照してください。
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 サービスのさまざまなオペレーションにアクセスする場合にも使用できます。たとえば、情報を表示するメソッドは任意のユーザによって呼び出せるが、一部のユーザのみが情報を更新できるように指定することができます。
Adminstration Console を使用して EJB および EJB の個々のメソッドにセキュリティを設定する方法については、『WebLogic リソースのセキュリティ』を参照してください。
WSDL および Web サービスのホーム ページに対してセキュリティを設定する
WSDL または WebLogic Web サービスのホーム ページへのアクセスを制限するには、サービスを記述する web-services.xml デプロイメント記述子を更新します。以下の手順に従ってください。
web-services.xml ファイルは、Web サービス EAR ファイルの Web アプリケーションの WEB-INF ディレクトリにあります。ファイルの格納場所の詳細については、Web サービス EAR ファイル パッケージを参照してください。
<web-service
name="stockquotes"
uri="/myStockQuoteService"
exposeWSDL="False"
exposeHomePage="False" >
...
</web-service>
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 を参照してください。
クライアント アプリケーションに対する SSL のコンフィグレーション
クライアント アプリケーションの SSL は、以下のいずれかを使用してコンフィグレーションします。
双方向 SSL を使用している場合、クライアント アプリケーションも、WebLogic Server に対して証明書を提示する必要があります。 詳細については、クライアント アプリケーションに対する双方向 SSL のコンフィグレーションを参照してください。
この節で説明した API の詳細は、Web サービスのセキュリティに関する Javadocs を参照してください。
WebLogic Server が提供する SSL 実装を使用する
WebLogic Server は、webserviceclient+ssl.jar クライアント実行時 JAR ファイルで SSL の実装を提供しています。このクライアント JAR ファイルには、SSL 実装のほか、webservicesclient.jar にある、標準のクライアント JAX-PRC 実行時クラスも入っています。
注意: クライアント機能に関する現在の BEA のライセンス供与については、Web サイト BEA eLicense を参照してください。
クライアント アプリケーションに対して基本的な SSL サポートをコンフィグレーションするには、次の手順に従います。
java -Dbea.home=c:¥bea_home ¥
-Djava.protocol.handler.pkgs=com.certicom.net.ssl my_app
詳細は、Web サービスのセキュリティに関する Javadocs を参照してください。
WebLogic Server が提供する SSL 実装を、weblogic.webservice.client.WLSSLAdapter アダプタ クラスを使用してプログラムでコンフィグレーションすることもできます。このアダプタ クラスには、WebLogic Server の SSL 実装固有のコンフィグレーション情報が保持されていて、コンフィグレーションの参照と変更を可能にします。
次の抜粋は、ある WebLogic Web サービスに対する WLSSLAdapter クラスのコンフィグレーションの例です。太字の行については、例の後で説明します。
//アダプタのインスタンス化
WLSSLAdapter adapter = new WLSSLAdapter();
adapter.setTrustedCertifcatesFile("mytrustedcerts.pem");
//任意に、アダプタ ファクトリが
//常にこのインスタンスを使用するように設定
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 サービスのセキュリティに関する Javadocs を参照してください。
サードパーティの 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;
}
}
weblogic.webservice.client.SSLAdapter
public Socket createSocket(String host, int port)
throws IOException
public URLConnection openConnection(URL url) throws IOException
weblogic.webservice.client.ssl.adapterclass
詳細は、Web サービスのセキュリティに関する Javadocs を参照してください。
SSLAdapterFactory クラスを拡張することによって、カスタムの SSL アダプタのファクトリ クラス (アダプタのインスタンスを作成するために使用) を作成することができます。ファクトリ クラスを拡張する理由の 1 つは、それにより、各アダプタの使用に先立ち、作成時に、カスタムのコンフィグレーションを実行できるようになることです。
カスタムの SSL アダプタのファクトリ クラスを作成するには、次の手順に従います。
weblogic.webservice.client.SSLAdapterFactory
public weblogic.webservice.client.SSLAdapter createSSLAdapter();
SSLAdapterFactory.setDefaultFactory(factoryInstance);
詳細は、Web サービスのセキュリティに関する Javadocs を参照してください。
クライアント アプリケーションに対する双方向 SSL のコンフィグレーション
WebLogic Server に対して双方向 SSL をコンフィグレーションした場合は、一方向 SSL で要求されるようにクライアント アプリケーションに対して WebLogic Server が証明書を提示するのに加えて、クライアント アプリケーションが WebLogic Server に証明書を提示することも必要です。 以下のサンプル Java コードでは、それを行うための方法の 1 つを示します。ここでは、クライアント アプリケーションがクライアント証明書ファイルを引数 (太字で示した該当コード) として受け取っています。
...
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);
...
WebLogic Web サービスでの双方向 SSL の完全な使用例については、「Two-Way SSL Example」を参照してください。
たとえば、クライアント アプリケーションがファイアウォールの内側で動作している状況で、プロキシ サーバを使用する必要がある場合は、以下の 2 つの System プロパティを使用してプロキシ サーバのホスト名とポートを設定します。
これらの System プロパティの詳細については、WebLogic Web サービスのシステム プロパティを参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |