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.
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 sin estado-->
      	<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 el atributo ssl-ref no está especificado en el archivo ibm-ws-bnd.xml, las configuraciones siguientes de Liberty pueden ser utilizadas por el motor de servicios web, si está presente:
        • La configuración SSL predeterminada
        • [17.0.0.3 and later]La configuración SSL predeterminada de salida
        • [17.0.0.3 and later]Un filtro de configuración SSL de salida
      • 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

Nombre de archivo: twlp_sec_ws_ssl.html