Web サービス・アクセスに対する SSL 通信の使用可能化
クライアント・アプリケーションが Web サービスにアクセスできるように SSL 通信を構成 することができます。
始める前に
- クライアントおよびプロバイダー用の自己署名された公開鍵と秘密鍵
のペアを生成します。
keytool -genkey -alias default -keystore myKey.jks -dname "CN=myServer, O=IBM, C=CN" -storepass passw0rd -keypass passw0rd -storetype jks -validity 1000 -keyalg RSA
- myKey.jks ファイルを ${server.config.dir}/resources/security ディレクトリーにコピーします。
注: keytool ユーティリティーは Java™ インストール・ディレクトリーに入っています。
このタスクについて
保護された Web サービス・リソースにアクセスする ためにセキュア HTTP プロトコルと共に Web サービス・クライアント・アプリケーションを使用する必要がある場合、 すべてのメッセージは SSL 仕様に従って暗号化されます。
手順
- server.xml ファイルで jaxws-2.2、servlet-3.0 (または servlet-3.1)、および appSecurity-2.0 の各フィーチャーを有効にします。
<featureManager> <feature>jaxws-2.2</feature> <feature>servlet-3.0</feature> <feature>appSecurity-2.0</feature> </featureManager>
- server.xml ファイル内で SSL エレメントを構成します。
<sslDefault sslRef="customizeSSLConfig" /> <ssl id="customizeSSLConfig" keyStoreRef="serverKeyStore" trustStoreRef="serverTrustStore" /> <keyStore id="serverKeyStore" location="myKey.jks" type="JKS" password="passw0rd" /> <keyStore id="serverTrustStore" location="myKey.jks" type="JKS" password="passw0rd" />
- Web サービス・エンドポイントを指定することによって、サービス・プロバイダーを構成します。
- Web サービスを作成します。
@WebService(serviceName = "SayHelloPojoService", portName = "SayHelloPojoPort") public class SayHelloPojoService implements SayHelloService { ... } @WebService(serviceName = "SayHelloStatelessService", portName = "SayHelloStatelessPort", endpointInterface = "com.ibm.ws.jaxws.transport.server.security.SayHelloService") @Stateless(name = "SayHelloSessionBean") public class SayHelloStatelessService implements SayHelloLocal { ... }
- サービス・プロバイダー用の ibm-ws-bnd.xml ファイルを構成します。
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd " version="1.0"> <http-publishing> <webservice-security> <security-constraint> <web-resource-collection> <web-resource-name>All</web-resource-name> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> </webservice-security> </http-publishing> </webservices-bnd>
注: ibm-ws-bnd.xml ファイル は、Web アプリケーションの /WEB-INF ディレクトリー内にあるか、 または、EJB ベースの Web サービス・アプリケーション (JAR アーカイブ) の /META-INF ディレクトリー 内になければなりません。
- Web サービスを作成します。
- Web サービス・エンドポイントを指定することによって、
サービス・クライアントを構成します。例えば、クライアント・アプリケーション
が TransportSecurityClient.war という名前の Web アプリケーションであるとします。
- クライアント・アプリケーションを server.xml ファイル内で構成します。
<application id="TransportSecurityClient" name="TransportSecurityClient" location="TransportSecurityClient.war" context-root="TransportSecurityClient" type="war" />
- クライアント・アプリケーション用の ibm-ws-bnd.xml ファイル
を構成します。
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd id="idvalue0" version="1.0" xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd " > <!-- POJO service reference binding--> <service-ref name="service/SayHelloPojoService"> <port name="SayHelloPojoPort" namespace="http://ibm.com/ws/jaxws/transport/security/" ssl-ref="customizeSSLConfig"/> <properties http.conduit.tlsClientParameters.disableCNCheck="true" /> </service-ref> <!-- Stateless service reference binding--> <service-ref name="service/SayHelloStatelessService"> <port name="SayHelloStatelessPort" namespace="http://ibm.com/ws/jaxws/transport/security/" ssl-ref="customizeSSLConfig"/> <properties http.conduit.tlsClientParameters.disableCNCheck="true" /> </service-ref> </webservices-bnd>
注:- ibm-ws-bnd.xml ファイルは、クライアント Web アプリケーションの /WEB-INF ディレクトリー 内になければなりません。
- ssl-ref 属性の値は、 server.xml ファイル内の ssl エレメントの ID 値と一致している必要があります。
- ibm-ws-bnd.xml ファイル内に ssl-ref 属性が指定されていない場合、Liberty 内にデフォルト SSL 構成があれば、その構成が Web サービス・エンジンによって使用されます。
- http.conduit.tlsClientParameters.disableCNcheck 属性 は、リモート・サーバーを検証するかどうかを制御するために使用されます。この属性が true の 場合は hostName 検証は無視されるため、実稼働環境 ではこの属性に false を使用してください。
- WSDL ロケーションを使用してクライアント・スタブを生成します。
@WebServiceClient(name = "SayHelloPojoService", targetNamespace = "http://ibm.com/ws/jaxws/transport/security/", wsdlLocation = "https://localhost:8020/TransportSecurityProvider/unauthorized/employPojoService?wsdl") public class SayHelloPojoService extends Service {...} @WebServiceClient(name = "SayHelloStatelessService", targetNamespace = "http://ibm.com/ws/jaxws/transport/security/", wsdlLocation = "https://localhost:8020/TransportSecurityProvider/unauthorized/EmployStatelessService?wsdl") public class SayHelloStatelessService extends Service {...}
- @WebServiceRef アノテーションを
使用して、Web サービスをサーブレットに注入します。例えば、TestJaxWsTransportSecurityServlet などです。
@WebServiceRef(name = "service/SayHelloPojoService") SayHelloPojoService pojoService; @WebServiceRef(name = "service/SayHelloStatelessService") SayHelloStatelessService statelessService;
- クライアント・アプリケーションを server.xml ファイル内で構成します。
関連資料:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_sec_ws_ssl
ファイル名: twlp_sec_ws_ssl.html