啟用 SSL 通訊以存取 Web 服務

您可以配置 SSL 通訊,供用戶端應用程式存取 Web 服務。

開始之前

在啟用 SSL 通訊以存取 Web 服務之前,您必須先完成下列必要條件:
  • 產生用戶端和提供者的一組自簽公開和私密金鑰:
    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 檔複製到 Liberty 設定檔伺服器的 ${server.config.dir}/resources/security 目錄中
註: 您可以在 Java™ 安裝目錄中找到 keytool 公用程式。

關於這項作業

如果您需要使用具有安全 HTTP 通訊協定的 Web 服務用戶端應用程式,來存取受保護的 Web 服務資源,所有訊息都會根據 SSL 規格來進行加密。

程序

  1. server.xml 檔中啟用 jaxws-2.2servlet-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>
  2. 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" />
  3. 指定 Web 服務端點來配置服務提供者。
    1. 建立 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 {
      	...
      }
    2. 配置服務提供者的 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 目錄中。
  4. 指定 Web 服務端點來配置服務用戶端。 例如,用戶端應用程式是一個名稱為 TransportSecurityClient.war 的 Web 應用程式。
    1. server.xml 檔中配置用戶端應用程式。
      <application id="TransportSecurityClient" name="TransportSecurityClient"
      				location="TransportSecurityClient.war"
      		context-root="TransportSecurityClient" type="war" />
    2. 配置用戶端應用程式的 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.xmlssl 元素中的 ID 值。
      • 如果 ibm-ws-bnd.xml 檔沒有指定 ssl-ref 屬性,倘若 Liberty 設定檔中有預設 SSL 配置,Web 服務引擎會使用這個配置。
      • http.conduit.tlsClientParameters.disableCNcheck 屬性用來控制是否驗證遠端伺服器。 請在正式作業環境中對這個屬性使用 false,因為如果這個屬性是 true,則會忽略 hostName 驗證。
    3. 透過 WSDL 位置來產生用戶端 Stub。
      @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
      {...}
    4. 利用 @WebServiceRef 註釋,將 Web 服務注入 Servlet 中。 例如,TestJaxWsTransportSecurityServlet
      @WebServiceRef(name = "service/SayHelloPojoService")
      SayHelloPojoService pojoService;
      
      @WebServiceRef(name = "service/SayHelloStatelessService")
      SayHelloStatelessService statelessService;

指示主題類型的圖示 作業主題

資訊中心條款 | 意見


「時間戳記」圖示 前次更新: 2015 年 6 月 22 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_sec_ws_ssl
檔名:twlp_sec_ws_ssl.html