웹 서비스 액세스를 위해 SSL 통신 사용
클라이언트 애플리케이션이 웹 서비스에 액세스하도록 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™ 설치 디렉토리에 있습니다.
이 태스크 정보
보안 HTTP 프로토콜을 사용하는 웹 서비스 클라이언트 애플리케이션을 사용하여 보호된 웹 서비스 자원에 액세스해야 하는 경우, 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" />
- 웹 서비스 엔드포인트를 지정하여 서비스 제공자를
구성하십시오.
- 웹 서비스를 작성하십시오.
@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-INF 디렉토리나 EJB 기반 웹 서비스 애플리케이션(JAR 아카이브)의 /META-INF 디렉토리에 있어야 합니다.
- 웹 서비스를 작성하십시오.
- 웹 서비스 엔드포인트를 지정하여 서비스 클라이언트를
구성하십시오. 예를 들어, 클라이언트 애플리케이션은 이름이 TransportSecurityClient.war인
웹 애플리케이션입니다.
- server.xml 파일에서 클라이언트 애플리케이션을 구성하십시오.
<application id="TransportSecurityClient" name="TransportSecurityClient" location="TransportSecurityClient.war" context-root="TransportSecurityClient" type="war" />
- 클라이언트 애플리케이션에 대해 web.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-INF 디렉토리에 있어야 합니다.
- ssl-ref 속성의 값은 server.xml 파일에 있는 ssl 요소의 ID 값과 일치해야 합니다.
- ssl-ref 속성이 ibm-ws-bnd.xml
파일에 지정되지 않은 경우 웹 서비스 엔진(있는 경우)에서 다음 Liberty 구성을 사용할 수 있습니다.
- 기본 SSL 구성
아웃바운드 기본 SSL 구성
아웃바운드 SSL 구성 필터
- 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
어노테이션을 사용하십시오(예: TestJaxWsTransportSecurityServlet).
@WebServiceRef(name = "service/SayHelloPojoService") SayHelloPojoService pojoService; @WebServiceRef(name = "service/SayHelloStatelessService") SayHelloStatelessService statelessService;
- server.xml 파일에서 클라이언트 애플리케이션을 구성하십시오.
관련 참조:

파일 이름: twlp_sec_ws_ssl.html