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:
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
- 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>
- 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" />
- Configure el proveedor de servicios especificando los puntos finales de servicio web.
- 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 {
...
}
- 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).
- 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.
- Configure la aplicación cliente en el archivo server.xml.
<application id="TransportSecurityClient" name="TransportSecurityClient"
location="TransportSecurityClient.war"
context-root="TransportSecurityClient" type="war" />
- 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
La configuración SSL predeterminada de salida
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.
- 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
{...}
- 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;