啟用 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 檔複製到 ${server.config.dir}/resources/security 目錄。
註: 您可以在 Java™ 安裝目錄中找到 keytool 公用程式。
關於這項作業
如果您需要使用具有安全 HTTP 通訊協定的 Web 服務用戶端應用程式,來存取受保護的 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 配置存在時,Web 服務引擎可以使用該配置:
- 預設 SSL 配置
出埠預設 SSL 配置
出埠 SSL 配置過濾器
- http.conduit.tlsClientParameters.disableCNcheck 屬性用來控制是否驗證遠端伺服器。 請在正式作業環境中對這個屬性使用 false,因為如果這個屬性是 true,則會忽略 hostName 驗證。
- 透過 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 {...}
- 利用 @WebServiceRef 註釋,將 Web 服務注入 Servlet 中。
例如,TestJaxWsTransportSecurityServlet。
@WebServiceRef(name = "service/SayHelloPojoService") SayHelloPojoService pojoService; @WebServiceRef(name = "service/SayHelloStatelessService") SayHelloStatelessService statelessService;
- 在 server.xml 檔中配置用戶端應用程式。
上層主題: 在傳輸層次保護 Web 服務

檔名:twlp_sec_ws_ssl.html