| Oracle® Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護 11g リリース1(10.3.3) B61620-01 |
|
![]() 前 |
![]() 次 |
トランスポート・レベルのセキュリティとは、Secure Sockets Layer (SSL)とHTTP基本認証のいずれか、または両方を使用して、クライアント・アプリケーションとWebサービスの間の接続を保護することです。
SSLでは、ネットワーク接続している2つのアプリケーションが互いのアイデンティティを認証できるようにするとともに、アプリケーション間でやりとりされるデータを暗号化することでセキュアな接続が実現します。認証を使用すると、サーバーは(場合によってはクライアントも)ネットワーク接続の相手側アプリケーションのアイデンティティを検証できます。クライアント証明書(双方向SSL)を使用してユーザーを認証できます。
SSLの一般情報とWebLogic Serverに含まれる実装については、『Oracle WebLogic Serverセキュリティの理解』のSecure Sockets Layer (SSL)に関する項を参照してください。
次の項では、Webサービスのトランスポート・レベルのセキュリティを構成する方法について説明します。
SSLまたはHTTP基本認証、あるいはその両方を必要とするポリシーを指定できます。
ポリシーでSSLを必要とする場合は、必ずWebLogic Serverのコア・セキュリティ・サブシステムでSSLを構成します。一方向のSSL (WebLogic Serverがクライアント・アプリケーションに証明書を提示する必要がある)、または双方向のSSL (クライアント・アプリケーションとWebLogic Serverが両方とも互いに証明書を提示する必要がある)のいずれかを構成できます。
WebLogic Serverのコア・セキュリティ・サブシステムに対して双方向または一方向のSSLを構成する場合は、『Oracle WebLogic Serverの保護』のSSLの構成に関する項を参照してください。
たとえば、Oracle提供のWssp1.2-2007-Saml2.0-Bearer-Https.xmlポリシー・ファイルには、ポリシーがSSLによるクライアント証明書を予期していることを示す次のアサーションが含まれています(例3-1を参照)。
例3-1 ポリシーでのSSLの指定
<sp:TransportToken> <wsp:Policy> <sp:HttpsToken/> </wsp:Policy> </sp:TransportToken>
双方向SSLが必要である場合、例3-2に示されているようにRequireClientCertificateアサーションを使用してください。
例3-2 ポリシーでの双方向SSLの指定
<sp:TransportToken> <wsp:Policy> <sp:HttpsToken > <wsp:Policy> <sp:RequireClientCertificate/> </wsp:Policy> </sp:HttpsToken> </wsp:Policy> </sp:TransportToken>
Wssp1.2-2007-Https-BasicAuth.xmlポリシー・ファイルでは、例3-3のように、SSLを介したクライアント証明書とHTTP基本認証の両方を必要としています。
例3-3 ポリシーでのSSLおよびHTTP基本認証
<sp:TransportToken> <wsp:Policy> <sp:HttpsToken> <wsp:Policy> <sp:HttpBasicAuthentication/> </wsp:Policy> </sp:HttpsToken> </wsp:Policy> </sp:TransportToken>
1つまたは複数のポリシー・ファイルを使用してトランスポート・レベルのWebサービス・セキュリティを構成するには:
WebLogic Serverコア・セキュリティ・サブシステムに対してSSLを構成します。
一方向のSSL (WebLogic Serverがクライアント・アプリケーションに証明書を提示する必要がある)、または双方向のSSL (クライアント・アプリケーションとWebLogic Serverが両方とも互いに証明書を提示する必要がある)のいずれかを構成できます。
WebLogic Serverのコア・セキュリティ・サブシステムに対して双方向または一方向のSSLを構成する場合は、『Oracle WebLogic Serverの保護』のSSLの構成に関する項を参照してください。
JWSファイルで@Policyまたは@Policies JWSアノテーションを使用するか、管理コンソールを使用して実行時にポリシー・ファイルを関連付けます。あるいは、アノテーションを使用して一部のポリシー・ファイルを指定し、実行時に追加のポリシー・ファイルを関連付けます。
|
注意: Webサービスにトランスポート・レベルのセキュリティ・ポリシーを指定する場合、ポリシーの指定はクラス・レベルで行う必要があります。また、トランスポート・レベルのセキュリティ・ポリシーは着信方向と発信方向の両方に適用する必要があります。つまり、着信にHTTPSを使用し、発信にHTTPを使用することはできません。 |
JWSファイルに@Policyまたは@Policies JWSアノテーションを追加した場合は、通常の反復的開発プロセスの一環として、Webサービスをコンパイルして再デプロイします。
Webサービスを呼び出すクライアント・アプリケーションを実行するときは、アプリケーションで使用するSSL実装を示す特定のプロパティを指定します。特に、次の場合です。
Certicom SSL実装を指定するには、次のプロパティを使用します。
-Djava.protocol.handler.pkgs=weblogic.net -Dweblogic.security.SSL.trustedCAKeyStore=trustStore
trustStoreには、信頼性のある証明書のリスト(必ずサーバーの証明書を1つ含む)を格納するクライアント側の信頼ストアの名前を指定します。ホスト名検証を無効にするには、次のプロパティも指定します。
-Dweblogic.security.SSL.ignoreHostnameVerification=true
SunのSSL実装を指定するには、次のプロパティを使用します。
-Djavax.net.ssl.trustStore=trustStore
trustStoreには、信頼性のある証明書のリスト(必ずサーバーの証明書を1つ含む)を格納するクライアント側の信頼ストアの名前を指定します。ホスト名検証を無効にするには、次のプロパティも指定します。
-Dweblogic.wsee.client.ssl.stricthostchecking=false
双方向SSLの詳細は、「クライアント・アプリケーションでの双方向SSLの構成」を参照してください。
Webサービスにトランスポート・レベルのセキュリティ・ポリシーを指定する場合、次の例に示すように、ポリシーの指定はクラス・レベルで行う必要があります。
クラス・レベルでのトランスポート・レベルのポリシー
@Policy(uri="policy:Wssp1.2-2007-Saml2.0-Bearer-Https.xml")
public class EchoService {
....
この項では、スタンドアロンの一方向SSLクライアントからトランスポート・セキュリティを使用したJAX-WSを構成するための単純な例について説明します。
その他の前提条件については、次のドキュメントを参照してください。
『Oracle WebLogic Serverの保護』のSSLの構成に関する項
Oracle WebLogic Server管理コンソール・ヘルプのSSLの構成に関する項
Oracle WebLogic Server管理コンソール・ヘルプのキーストアの構成に関する項
WebサービスのJavaソースを例3-4に示します。
|
注意: Webサービスにトランスポート・レベルのセキュリティ・ポリシーを指定する場合、ポリシーの指定はクラス・レベルで行う必要があります。また、トランスポート・レベルのセキュリティ・ポリシーは着信方向と発信方向の両方に適用する必要があります。つまり、着信にHTTPSを使用し、発信にHTTPを使用することはできません。 |
例3-4 Webサービスの一方向SSLの例
package httpbasicauth
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.Policy;
@WebService(name="HttpsBasicAuth", portName="HttpsBasicAuthSoapPort"
targetNamespace="https://httpsbasicauth")
// Security Policy for Https and Http Basic Authentication
@Policy(uri = "policy:Wssp1.2-2007-Https-BasicAuth.xml)
public class HttpsBasicAuth {
public HttpsBasicAuth() {}
WebMethod()
public String echoString(String input) {
return("[HttpsBasicAuth.echoString]: " + input);
}
}
weblogic.netをJavaプロトコル・ハンドラとして使用するスタンドアロンのJava Webサービス・クライアントのコードを例3-5に示します。
例3-5 weblogic.netを使用するWebサービス・クライアントの一方向SSLの例
package httpbasicauth.client
import java.net.URL;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import httpsbasicauth.client.HttpsBasicAuthService;
import httpsbasicauth.client.HttpsBasicAuth;
public class HttpsBasicAuthClient
private final static String ENDPOINT = .....;
private final static String TARGET_NAMESPACE = "https://httpsbasicauth
private final static String USERNAME = ....;
private final static String PASSWORD = ....;
private final static String TRUST_STORE_LOCATION = .....;
private final static String TARGET_NAMESPACE = ....;
private HttpsBasicAuthService service;
private HttpsBasicAuth stub;
public HttpsBasicAuthClient() {
try {
// This ignores the host name verifcation for the Public Certificate used by the Server
System.setProperty("weblogic.security.SSL.ignoreHostnameVerification","true");
System.setProperty("java.protocol.handler.pkgs", "weblogic.net");
System.setProperty("weblogic.security.TrustKeyStore","CustomTrust");
System.setProperty("weblogic.security.CustomTrustKeyStoreFileName", "TRUST_STORE_LOCATION");
System.setProperty("weblogic.security.CustomTrustKeyStorePassPhrase","TRUST_STORE_PASSWORD");
System.setProperty("weblogic.security.CustomTrustKeyStoreType","JKS");
URL url = new URL(endpoint+"?WSDL");
QName serviceName = new QName(TARGET_NAMESPACE, "HttpsBasicAuthService");
service = new HttpsBasicAuthService();
stub = service.getHttpsBasicAuthSoapPort();
BindingProvider bp = (BindingProvider) stub;
Map<String,Object> context = bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, USERNAME)
context.put(BindingProvider.PASSWORD_PROPERTY, PASSWORD);
context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ENDPOINT);
} catch (Exception e) {
System.out.println("Error in creating the stub : " + e.getMessage());
if (verbose) e.printStackTrace();
}
}
public void invokeEchoString() throws Exception {
String output = stub.echoString(ENDPOINT);
System.out.println("[HttpsBasicAuthClient.invokeGEchoString]: " + output);
}
public static void main(String[] argv) throws Exception {
HttpsBasicAuthClient client = new HttpsBasicAuthClient();
System.setProperty("weblogic.wsee.verbose","*");
System.out.println("----------------------");
System.out.println(" Invoking echoString ");
client.invokeEchoString();
}
}
デフォルトのJavaプロトコル・ハンドラを使用するスタンドアロンのJava Webサービス・クライアントのコードを例3-6に示します。
例3-6 java.netを使用するWebサービス・クライアントの一方向SSLの例
package httpbasicauth.client
import java.net.URL;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import httpsbasicauth.client.HttpsBasicAuthService;
import httpsbasicauth.client.HttpsBasicAuth;
public class HttpsBasicAuthClient
private final static String ENDPOINT = .....;
private final static String TARGET_NAMESPACE = "https://httpsbasicauth
private final static String USERNAME = ....;
private final static String PASSWORD = ....;
private final static String TRUST_STORE_LOCATION = .....;
private final static String TARGET_NAMESPACE = ....;
private HttpsBasicAuthService service;
private HttpsBasicAuth stub;
public HttpsBasicAuthClient() {
try {
System.setProperty("java.protocol.handler.pkgs", "java.net");
System.setProperty("javax.net.ssl.trustStore", TRUST_STORE_LOCATION);
System.setProperty("javax.net.ssl.trustStorePassword", TRUST_STORE_PASSWORD);
URL url = new URL(ENDPOINT+"?WSDL");
QName serviceName = new QName(TARGET_NAMESPACE, "HttpsBasicAuthService");
service = new HttpsBasicAuthService();
stub = service.getHttpsBasicAuthSoapPort();
BindingProvider bp = (BindingProvider) stub;
Map<String,Object> context = bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, USERNAME)
context.put(BindingProvider.PASSWORD_PROPERTY, PASSWORD);
context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ENDPOINT);
} catch (Exception e) {
System.out.println("Error in creating the stub : " + e.getMessage());
if (verbose) e.printStackTrace();
}
}
public void invokeEchoString() throws Exception {
String output = stub.echoString(ENDPOINT);
System.out.println("[HttpsBasicAuthClient.invokeGEchoString]: " + output);
}
public static void main(String[] argv) throws Exception {
HttpsBasicAuthClient client = new HttpsBasicAuthClient();
System.setProperty("weblogic.wsee.verbose","*");
System.out.println("----------------------");
System.out.println(" Invoking echoString ");
client.invokeEchoString();
}
}
Antビルド・ファイルの関連部分を例3-7に示します。
例3-7 Antビルド・ファイル
<property name="output.dir" value="../../build/httpsbasicauth" />
<property name="service.dir" value="${output.dir}/httpsbasicauthApp" />
<property name="output.dir.client" value="${output.dir}/client" />
<property name="clientclasses.dir" value="${output.dir}/client" />
<property name="service.name" value="HttpsBasicAuth" />
<property name="wsdl.name" value="HttpsBasicAuthService" />
<property name="packageName" value="httpsbasicauth.client" />
<path id="client.class.path">
<pathelement path="${java.class.path}" />
<pathelement path="${clientclasses.dir}" />
</path>
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask"/>
<target name="jwsc">
<jwsc srcdir="." destdir="${output.dir.server}" sourcepath="../" debug="true" keepGenerated="true">
<module name="HttpsBasicAuth" contextPath="httpsbasicauth">
<jws file="HttpsBasicAuth.java" type="JAXWS" generateWsdl="true">
<WLHttpTransport contextPath="httpsbasicauth" serviceUri="httpsbasicauth"/>
</jws>
</jwsc>
</target>
<target name="client">
<clientgen wsdl="jar:file:${service.dir}/${service.name}.war!/WEB-INF/${wsdl.name}.wsdl"
type="JAXWS"
destDir="${clientclasses.dir}"
packageName="${packageName}">
</clientgen>
<javac srcdir="${clientclasses.dir}"
destdir="${clientclasses.dir}"
includes="**/*.java"
classpathref="client.class.path" />
<javac srcdir="./"
destdir="${clientclasses.dir}"
includes="HttpsBasicAuthClient.java"
classpathref="client.class.path" />
</target>
<target name="run">
<java classname="httpsbasicauth.client.HttpsBasicAuthClient"
classpathref="client.class.path"
fork="true" />
</target>
JAX-RPCクライアントは、SSLAdapterメカニズム(「信頼性のあるメッセージングでのカスタムSSLアダプタの使用」を参照)を使用して、SSL接続の間、リクエストの状態を永続化することができます。その際に、接続の確立に使用されたカスタムSSLAdapterのインスタンスを永続化します。
このリリースのOracle WebLogic Serverは、システム・プロパティまたは新しいweblogic.wsee.jaxws.sslclient.PersistentSSLInfoクラスからSSLSocketFactoryを構成するために使用する、JAX-WS用の新しい双方向SSLクライアントAPIを備えています。このAPIは、信頼性のあるメッセージング、コールバックなどのSSL情報を永続化することができ、次のよく知られたシステム・プロパティをサポートします。
weblogic.wsee.client.ssl.relaxedtrustmanager
weblogic.security.SSL.ignoreHostnameVerification
次の新しいクラスが使用できます。詳しい説明は、Javadocを参照してください。
weblogic.wsee.jaxws.sslclient.SSLClientUtil。このクラスには、次のメソッドがあります。
public static SSLSocketFactory getSSLSocketFactory(KeyManager[] kms, TrustManager[] tms)
public static SSLSocketFactory getSSLSocketFactory(PersistentSSLInfo sslInfo)
public static SSLSocketFactory getSSLSocketFactoryFromSysProperties()
weblogic.wsee.jaxws.sslclient.PersistentSSLInfo (SSL情報を設定するためのJavabean)。
weblogic.wsee.jaxws.JAXWSProperties (CLIENT_PERSISTENT_SSL_INFOプロパティを含む)。
例3-8は、システム・プロパティからSSLSocketFactoryを取得してリクエスト・コンテキストで使用する例を示しています。
|
注意: clientKeyStoreとclientKeyStorePasswdには、J2SEのSSLパッケージを使用する場合に、クライアントの秘密鍵のパスワードとクライアントのキーストアのパスワードが同一であることが求められるという制約があります。そのため、クライアント・キーストアには秘密鍵とX.509証明書のペアを1つしか格納できません。 |
例3-8 システム・プロパティからのSSLSocketFactoryの取得
String clientKeyStore = ...;
String clientKeyStorePasswd = ...;
String trustKeystore = ...;
String trustKeystorePasswd = ...;
System.setProperty("javax.net.ssl.keyStore", clientKeyStore);
System.setProperty("javax.net.ssl.keyStorePassword", clientKeyStorePasswd);
System.setProperty("javax.net.ssl.trustStore", trustKeystore);
System.setProperty("javax.net.ssl.trustStorePasswd", trustKeystorePasswd);
((BindingProvider) port).getRequestContext().put(
JAXWSProperties.SSL_SOCKET_FACTORY,
SSLClientUtil.getSSLSocketFactoryFromSysProperties());
例3-9は、永続情報(PersistentSSLInfo)からSSLSocketFactoryを取得し、永続性が不要な場合はSSLSocketFactoryを直接設定する例を示しています。
例3-9 PersistentSSLInfoからのSSLSocketFactoryの取得
String clientKeyStore = ...;
String clientKeyStorePasswd = ...;
String clientKeyAlias = ...;
String clientKeyPass = ...;
String trustKeystore = ...;
String trustKeystorePasswd = ...;
PersistentSSLInfo sslInfo = new PersistentSSLInfo();
sslInfo.setKeystore(clientKeyStore);
sslInfo.setKeystorePassword(clientKeyStorePasswd);
sslInfo.setKeyAlias(clientKeyAlias);
sslInfo.setKeyPassword(clientKeyPass);
sslInfo.setTrustKeystore(trustKeystore);
//user can print out the sslInfo for debug
System.out.print(sslInfo.toString());
//Put sslInfo into requestContext for persistence, it might be required by JAX-WS
advance features, such as, RM, Callback
((BindingProvider) port).getRequestContext().put(
JAXWSProperties.CLIENT_PERSISTENT_SSL_INFO, sslInfo);
//Alternatively, you can directly set a SSLSocketFactory if persistence is
not necessary. Note: The following line should be omitted if sslInfo is set with
above line.
((BindingProvider) port).getRequestContext().put(
JAXWSProperties.SSL_SOCKET_FACTORY,
SSLClientUtil.getSSLSocketFactory(sslInfo));
sslInfoでは、クライアント・キーストアに複数のキーがある場合にキーストア内のキーを(SSLのクライアント側キーとして)示す、キー別名(clientKeyAlias)を設定できます。
UserDataConstraintアノテーションを指定すると、HTTPSトランスポートを使用してWebサービスを呼び出すことが必要となります。
JWSファイルでUserDataConstraintアノテーションを使用してトランスポート・レベルのWebサービス・セキュリティを構成するには:
WebLogic Serverコア・セキュリティ・サブシステムに対してSSLを構成します。
一方向のSSL (WebLogic Serverがクライアント・アプリケーションに証明書を提示する必要があります)、または双方向のSSL (クライアント・アプリケーションとWebLogic Serverが両方とも互いに証明書を提示する必要があります)のいずれかを構成できます。
WebLogic Serverのコア・セキュリティ・サブシステムに対して双方向または一方向のSSLを構成する場合は、『Oracle WebLogic Serverの保護』のSSLの構成に関する項を参照してください。
Webサービスを実装するJWSファイル内に@weblogic.jws.security.UserDataConstraintアノテーションを追加し、Webサービスの呼出しにHTTPSトランスポートの使用が必要となるようにします。
詳細は、Oracle WebLogic Server WebLogic Webサービス・リファレンスのweblogic.jws.security.UserDataConstraintに関する項を参照してください。
通常の反復的な開発プロセスの一部として、Webサービスを再コンパイルして再デプロイします。
Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイドのWebLogic Webサービスの開発に関する項を参照してください。
clientgen Antタスクを呼び出すbuild.xmlファイルを更新して、WebサービスのJAX-RPCスタブの生成に、デプロイされているサービスの動的WSDLではなく、静的WSDLを使用するようにします。
この場合に、clientgenが動的WSDLからスタブを生成できないのは、@UserDataConstraintアノテーションを指定する際に、clientgenを含むすべてのクライアント・アプリケーションで信頼ストアを指定することが必要であるためです。しかし現在、clientgenで信頼ストアを指定する方法はありません。したがって、Antタスクは、Webサービスが記述された静的なWSDLから動的WSDLと同じ方法でクライアント・コンポーネントを生成する必要があります。
Webサービスを呼び出すクライアント・アプリケーションを実行するときは、アプリケーションで使用するSSL実装を示す特定のプロパティを指定します。特に:
Certicom SSL実装を指定するには、次のプロパティを使用します。
-Djava.protocol.handler.pkgs=weblogic.net -Dweblogic.security.SSL.trustedCAKeyStore=trustStore
trustStoreには、信頼性のある証明書のリスト(必ずサーバーの証明書を1つ含む)を格納するクライアント側の信頼ストアの名前を指定します。ホスト名検証を無効にするには、次のプロパティも指定します。
-Dweblogic.security.SSL.ignoreHostnameVerification=true
SunのSSL実装を指定するには、次のプロパティを使用します。
-Djavax.net.ssl.trustStore=trustStore
trustStoreには、信頼性のある証明書のリスト(必ずサーバーの証明書を1つ含む)を格納するクライアント側の信頼ストアの名前を指定します。ホスト名検証を無効にするには、次のプロパティも指定します。
-Dweblogic.wsee.client.ssl.stricthostchecking=false
双方向SSLの詳細は、「クライアント・アプリケーションでの双方向SSLの構成」を参照してください。
|
注意: 非同期の、または信頼性のあるメッセージングを使用するWebサービスでは、非同期のレスポンスや確認応答を送信する目的で(受信側サービスから送信側サービスに向けて)新しい接続を確立するときに、サーバーのSSL証明書を自動的に使用します。 |
WebLogic Serverで双方向SSLを構成した場合は、一方向SSLで必要とされるようにWebLogic Serverがクライアント・アプリケーションに証明書を提示するだけでなく、クライアント・アプリケーションがWebLogic Serverに証明書を提示する必要があります。さらに、次の要件も満たす必要があります:
クライアントの秘密鍵とX.509証明書のペアが格納されたクライアント側キーストアを作成します。
J2SEのSSLパッケージを使用する場合は、クライアントの秘密鍵のパスワードとクライアントのキーストアのパスワードが同一であることが求められます。そのため、クライアント・キーストアには秘密鍵とX.509証明書のペアを1つしか格納できません。
WebLogic Serverのコア・セキュリティ・サブシステムを構成して、クライアント・キーストア内のクライアントのX.509証明書をユーザーにマップします。『Oracle WebLogic Serverの保護』のユーザー名マッパーの構成に関する項を参照してください。
クライアントが信頼する証明書を格納する信頼ストアを作成します。クライアント・アプリケーションはこの信頼ストアを使用して、WebLogic Serverから受け取った証明書を検証します。前の項目で説明したJ2SEのパスワード要件のため、この信頼ストアは、クライアントがサーバーに提示するキー・ペアを格納するキーストアとは異なっている必要があります。
このステップは、Cert Genユーティリティ、またはSun Microsystemsのkeytool (http://java.sun.com/javase/6/docs/tooldocs/solaris/keytool.html)ユーティリティを使用して実行できます。開発が目的の場合は、keytoolユーティリティを使用すると簡単に開始できます。
『Oracle WebLogic Serverの保護』の秘密鍵、デジタル証明書、および信頼性のある認証局の取得に関する項を参照してください。
Webサービスを呼び出すクライアント・アプリケーションを実行するときに、次のプロパティを指定します。
-Djavax.net.ssl.trustStore=trustStore
-Djavax.net.ssl.trustStorePassword=trustStorePassword
trustStoreには、信頼性のある証明書のリスト(必ずサーバーの証明書を1つ含む)を格納するクライアント側の信頼ストアの名前を指定し、trustStorePasswordには、信頼ストアのパスワードを指定します。
上記のプロパティは、クライアント側キーストアを指定するために設定する必要のある標準的なプロパティに追加されるものです。
-Djavax.net.ssl.keyStore=keyStore
-Djavax.net.ssl.keyStorePassword=keyStorePassword
|
注意: StubおよびMessageContextプロパティに格納されるすべてのオブジェクトは、シリアライズ可能かつ外部化可能であること、およびサーバーのシステムCLASSPATHにその実装が指定されていることが必要です。この項では、カスタムSSLAdapterを実装する場合について説明します。 |
カスタムSSLAdapter実装を使用すると、信頼性のあるメッセージングまたはバッファリングを使用する場合に、クライアントとサーバーの間のSSL接続を確立するために必要なクライアント証明書とその他のサービスを提供できます。信頼性のあるメッセージングおよびバッファリングのサブシステムは、SSL接続の間、リクエストの状態を永続化します。その際に、接続の確立に使用されたカスタムSSLAdapterのインスタンスを永続化します。
リクエストを永続化から復元する際に、リクエストとともに保存されていたカスタムSSLAdapterオブジェクトを正しく復元するには、永続化機能がカスタムSSLAdapterクラスにアクセスできることが必要です。これを可能にするには、(サーバーにデプロイされたアプリケーションの内部ではなく)サーバーのシステムCLASSPATHを通じて、カスタムSSLAdapterクラスを提供する必要があります。
カスタムSSLAdapterは、SSLAdapterを拡張したものであることが必要であり、次の手順でインストールおよび有効化します。
weblogic.wsee.connection.transport.https.HttpsTransportInfoのインスタンスを作成します。
HttpsTransportInfo.setSSLAdapter(SSLAdapter adapter)を呼び出して、そのトランスポート情報にカスタムSSLアダプタを設定します。
次のメソッドを呼び出して、Webサービス・スタブ・インスタンス(javax.xml.rpc.Stub型のスタブ)にトランスポート情報を設定します。
stub._setProperty(weblogic.wsee.connection.soap.SoapClientConnection.TRANSPORT_INFO_PROPERTY,ti);
stubはWebサービス・スタブ、tiは構成したHttpsTransportInfoです。
この手順に従ってカスタムSSLAdapterクラスをシステムCLASSPATHに指定しないと、ClassNotFoundException例外が生成されます。
java.io.IOException: java.lang.ClassNotFoundException: examples.webservices.client.ServiceBase$TestSSLAdapter