Puede proteger las comunicaciones entre la aplicación
y los clientes JAX-RS (Java™ API for RESTful Web Services) que invocan la aplicación utilizando la seguridad de capa de transporte SSL (Secure Sockets Layer).
Acerca de esta tarea
Los programas cliente JAX-RS pueden aprovechar la seguridad de transporte utilizando SSL (Secure Socket Layers) para proteger las solicitudes y respuestas de recursos JAX-RS.
Si ha configurado la aplicación JAX-RS para utilizar un canal SSL para la seguridad de nivel de transporte al iniciar recursos REST, el cliente JAX-RS tiene que utilizar la conexión SSL para que el cliente pueda interactuar con un recurso JAX-RS que se despliegue en el entorno de
WebSphere Application Server. Por ejemplo, si la aplicación JAX-RS está configurada para utilizar la
autenticación básica, es una práctica habitual utilizar SSL para que las credenciales de usuario se transporten por conexiones seguras.
Para ilustrar
este escenario, supongamos que tiene un servidor de aplicaciones en la célula
y que ha desplegado recursos JAX-RS en este servidor. Los recursos JAX-RS de este servidor requieren el uso de SSL. Suponga que va a utilizar el cliente ligero para JAX-RS
(un cliente autónomo basado en Java que se proporciona con este producto) para
llamar a uno de estos recursos seguros que exige el uso de SSL. El cliente ligero para JAX-RS permite ejecutar aplicaciones de cliente de servicios web RESTful JAX-RS no gestionadas en un entorno que no sea WebSphere para llamar a servicios web RESTful JAX-RS alojados por el servidor de aplicaciones.
Figura 1. Protección de clientes JAX-RS mediante SSL
Importante: Si está llamando a los recursos JAX-RS desde dentro de una aplicación que se ejecuta en un entorno WebSphere Application Server, como cuando se realiza una llamada en sentido descendente, no es necesaria ninguna configuración adicional para SSL. No es necesario configurar conexiones SSL para este recurso porque se está utilizando la configuración y el tiempo de ejecución de SSL del servidor de aplicaciones.
Utilice los pasos siguientes para configurar SSL con el cliente ligero para
JAX-RS.
- Habilite la seguridad para la aplicación JAX-RS y configure la aplicación para utilizar un canal SSL para el transporte cuando se llame a recursos REST.
Durante el desarrollo o el despliegue de aplicaciones, edite el archivo
web.xml para añadir una restricción de seguridad que exija el uso de SSL para los recursos de que disponga. Consulte la información sobre la protección de aplicaciones JAX-RS
dentro del contenedor web para obtener información detallada adicional sobre la habilitación de SSL
para la aplicación.
El elemento siguiente dentro del elemento security-constraint especifica se aplique SSL a la aplicación:
<user-data-constraint id="UserDataConstraint_1">
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
- Edite el archivo ssl.client.props y defina las propiedades de almacén de claves y almacén de confianza.
El archivo ssl.client.props se utiliza para configurar SSL para clientes. El código de ejemplo siguiente muestra la definición de las propiedades de almacén
de claves y de almacén de confianza:
# Información del almacén de claves
com.ibm.ssl.keystoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore= path/to/keystore/file
com.ibm.ssl.keyStorePassword=xxxxxxx
com.ibm.ssl.keyStoreType=PKCS12
com.ibm.ssl.keyStoreProvider=IBMJCE
com.ibm.ssl.keyStoreFileBased=true
# Información del almacén de confianza
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore=path/to/truststore/file
com.ibm.ssl.trustStorePassword=xxxxxx
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false
- Habilite o inhabilite la verificación de nombres de host.
La propiedad com.ibm.ssl.performURLHostNameVerification aplica la verificación
de nombres de host de URL cuando el valor se establece en true.
Cuando se efectúan conexiones de URL de HTTP con los servidores de destino, el nombre común (CN) del certificado del servidor debe coincidir con el nombre de host de destino.
Si no hay una coincidencia, el verificador del nombre de host rechaza la conexión. El valor predeterminado de false omite esta comprobación.
La propiedad com.ibm.ssl.validationEnabled valida cada configuración SSL mientras se carga cuando el valor
se establece en true. El valor predeterminado de false omite esta comprobación.
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false
- Asegúrese de que el firmante del certificado de servidor esté en el almacén de confianza del cliente.
Utilice la herramienta de IBM® iKeyman o el programa de utilidad de Java
keytool para determinar si el certificado ya está en el almacén de confianza. Si el certificado no se encuentra en el almacén de confianza, importe el certificado al almacén de confianza.
Por ejemplo, para listar los certificados que se encuentran en el almacén de confianza trust.p12,
escriba el siguiente mandato y asegúrese de que incluye la vía de acceso completa al almacén de confianza:
keytool -list -v -storetype pkcs12 -keystore trust.p12
- Importe el certificado.
Si el firmante del certificado de servidor no está en el almacén de confianza del cliente o si el servidor
no tiene un certificado autofirmado que no se encuentra en el almacén de confianza del cliente, importe el certificado.
Para importar el certificado, puede utilizar la herramienta que prefiera, ya sea iKeyman de IBM
o el programa de utilidad keytool de Java.
En los ejemplos siguientes se utiliza el programa de utilidad de
Java keytool.
- Exporte el certificado de firmante para el servidor a un archivo.
Por ejemplo, utilice el mandato siguiente para exportar un certificado de firmante de un almacén
de confianza existente, servertrust.p12,
en la entrada que corresponda al nombre de alias default_signer en el archivo
mycert.cer:
keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
- Importar el certificado de firmante en el almacén de confianza utilizado por el cliente ligero
para JAX-RS.
Por ejemplo, utilice el mandato siguiente para exportar un certificado de firmante de un almacén
de confianza existente, servertrust.p12,
de la entrada que corresponda al nombre de alias default_signer en el archivo
mycert.cer:
keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
- Configure SSL con cliente ligero para JAX-RS 2.0.
Para llamar a un URL cifrado, continúe con los pasos siguientes:
- Para habilitar SSL de cliente al desarrollar la aplicación de cliente ligero, añada una propiedad de cliente al código de aplicación
de cliente ligero.
Establezca la clave de propiedad de cliente en com.ibm.ws.jaxrs.client.ssl.config y su valor en el alias SSL del servidor. Consulte el
fragmento de código siguiente como referencia:
ClientBuilder cb = ClientBuilder.newBuilder();
cb.property("com.ibm.ws.jaxrs.client.ssl.config", "NodeDefaultSSLSettings");
Consejo: El valor de la propiedad es igual al alias SSL del servidor que haya establecido. Para obtener más información, vaya a
Servidores de aplicaciones->servidor n, donde n es el número que ha asignado al servidor de
aplicaciones.->Cadenas
de transporte de contenedor Web->WCInboundDefaultSecure->Canal de entrada SSL (SSL_ 2) para
comprobarlo en el campo de configuración SSL.
- Para llamar a un URL cifrado, ejecute el código de ejemplo siguiente desde la línea de mandatos:
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar:$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar:$WAS_HOME/AppServer/com.ibm.ws.admin.client_$VERSION.jar:$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>
![[Windows]](../images/windows.gif)
java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.ws.security.crypto.jar;$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>