Habilitación de la comunicación SSL para acceder a los servicios web

Puede configurar la comunicación SSL para que las aplicaciones cliente accedan a los servicios web.

Antes de empezar

Debe completar los requisitos previos siguientes antes de habilitar la comunicación SSL para acceder a los servicios web:
  • Genere un par de claves privada y pública autofirmadas para el cliente y el proveedor:
    keytool -genkey -alias default -keystore myKey.jks -dname "CN=myServer, O=IBM, C=CN"
        -storepass passw0rd -keypass passw0rd -storetype jks  -validity 1000 -keyalg RSA
  • Copie el archivo myKey.jks en el directorio ${server.config.dir}/resources/security del servidor del perfil Liberty
Nota: El programa de utilidad keytool se encuentra en el directorio de instalación de Java™.

Acerca de esta tarea

Si tiene que utilizar la aplicación cliente de servicio web con el protocolo HTTP seguro para acceder a los recursos de servicio web protegidos, se cifran todos los mensajes de acuerdo con la especificación SSL.

Procedimiento

  1. Habilite las características jaxws-2.2, servlet-3.0 (o servlet-3.1) y appSecurity-2.0 en el archivo server.xml.
    <featureManager>
      <feature>jaxws-2.2</feature>
      <feature>servlet-3.0</feature>
      <feature>appSecurity-2.0</feature>
    </featureManager>
  2. Configure los elementos SSL del archivo server.xml.
    <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. Configure el proveedor de servicios especificando los puntos finales de servicio web.
    1. Cree los servicios 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. Configure el archivo ibm-ws-bnd.xml del proveedor de servicios.
      <?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>
      Nota: El archivo ibm-ws-bnd.xml debe estar en el directorio /WEB-INF de aplicaciones web o en el directorio /META-INF de aplicaciones de servicio web basadas en EJB (archivado JAR).
  4. Configure el cliente de servicio especificando los puntos finales de servicio web. Por ejemplo, la aplicación cliente es una aplicación web denominada TransportSecurityClient.war.
    1. Configure la aplicación cliente en el archivo server.xml.
      <application id="TransportSecurityClient" name="TransportSecurityClient"
      				location="TransportSecurityClient.war"
      		context-root="TransportSecurityClient" type="war" />
    2. Configure el archivo ibm-ws-bnd.xml para la aplicación cliente.
      <?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 " >
      	<!-- enlace de referencia de servicio POJO -->
      	<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>
      	<!-- enlace de referencia de servicio Stateless -->
      	<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>
      Nota:
      • El archivo ibm-ws-bnd.xml debe estar en el directorio /WEB-INF de la aplicación web cliente.
      • El valor del atributo ssl-ref debe coincidir con el valor de ID del elemento ssl en el archivo server.xml.
      • Si no se especifica el atributo ssl-ref en el archivo ibm-ws-bnd.xml, el motor de servicios web utiliza la configuración SSL predeterminada del perfil Liberty si está presente la configuración.
      • Se utiliza el atributo http.conduit.tlsClientParameters.disableCNcheck para controlar si se va a validar el servidor remoto. Utilice false para este atributo en un entorno de producción porque la verificación de nombreHost se ignorará si este atributo es true.
    3. Genere los apéndices de cliente mediante la ubicación 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
      {...}
    4. Utilice la anotación @WebServiceRef para introducir el servicio web en el servlet. Por ejemplo, TestJaxWsTransportSecurityServlet.
      @WebServiceRef(name = "service/SayHelloPojoService")
      SayHelloPojoService pojoService;
      
      @WebServiceRef(name = "service/SayHelloStatelessService")
      SayHelloStatelessService statelessService;

Icono que indica el tipo de tema Tema de tarea

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_sec_ws_ssl
Nombre de archivo:twlp_sec_ws_ssl.html