Puede proteger las comunicaciones entre la aplicación
y los clientes JAX-RS (Java™ API for RESTful Web Services)
que invoquen 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) con el fin de 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 de JAX-RS se ha configurado para utilizar la autenticación básica, es aconsejable utilizar SSL de modo que las credenciales de usuario sean transportadas a través de conexiones seguras.
Para ilustrar este caso práctico, 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.
Supongamos que se está utilizando el cliente ligero para JAX-RS, un cliente autónomo basado en Java que se proporciona con este producto, para invocar uno de estos recursos seguros que requiere el uso de SSL. El cliente ligero para JAX-RS permite ejecutar aplicaciones cliente de servicios web RESTful de JAX-RS no gestionadas en un entorno que no es de WebSphere
para invocar servicios web RESTful de JAX-RS alojados en el servidor de aplicaciones.
Figura 1. Protección del cliente de JAX-RS utilizando SSL
Importante: Si está invocando los recursos JAX-RS desde 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 su aplicación JAX-RS y configure la aplicación para que utilice un canal SSL para el transporte cuando se invoquen 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 sus recursos. Consulte el tema Protección de las aplicaciones JAX-RS en el contenedor web para obtener detalles adicionales sobre la habilitación de SSL para la aplicación.
El elemento siguiente dentro del elemento security-constraint
especifica que se imponga SSL para 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 el almacén de claves y las propiedades del almacén de confianza.
El archivo ssl.client.props se utiliza para configurar SSL para clientes. En el ejemplo de código siguiente se muestra la definición de las propiedades del almacén de claves y del 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 del nombre de host.
La propiedad com.ibm.ssl.performURLHostNameVerification obliga a realizar la verificación de nombre de host del URL cuando se define el valor 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 ha establecido 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 certificados, impórtelo en el almacén de confianza.
Por ejemplo, para listar los certificados contenidos en el almacén de confianza, trust.p12, escriba el siguiente mandato y asegúrese de incluir 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, o si el servidor tiene un certificado autofirmado que no está 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 en 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 firmante_predeterminado en el archivo mycert.cer:
keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
- Importe 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 firmante_predeterminado en el archivo mycert.cer:
keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
- Configure SSL con el cliente ligero para JAX-RS
2.0.
Para invocar un URL cifrado, siga estos pasos:
- Para habilitar el SSL de cliente al desarrollar la aplicación
de cliente ligero, añada una propiedad de cliente en el código de la
aplicación del cliente ligero.
Establezca la clave de la 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 propiedad es igual al alias SSL del
servidor que haya establecido. Si desea 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 debajo del campo
de configuración de SSL.
- Para llamar a un URL cifrado, ejecute el ejemplo de código
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.jaxrs2.0.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.jaxrs2.0.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar your_package.SSLThinClientProgram <An encrypted URL>