Protección del cliente de JAX-RS utilizando SSL

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).

Antes de empezar

En esta tarea se presupone que ha llevado a cabo los pasos siguientes:
  • Ha definido un perfil de célula para un servidor de aplicaciones o para un servidor de aplicaciones que está federado a un gestor de despliegue de red. Consulte la información sobre la creación de perfiles de célula para obtener información acerca de cómo crear perfiles de célula que contienen un nodo de servidor de aplicaciones federado y un gestor de despliegue.
  • Ha instalado su aplicación de JAX-RS en el servidor de aplicaciones.

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
Puede configurar SSL para aplicaciones de cliente JAX-RS para permitir al cliente ligero a interactuar con recursos de aplicación JAX-RS que requieren 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.

Procedimiento

  1. 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>
  2. 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
  3. 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
  4. 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
  5. 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.

    1. 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
    2. 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
  6. Configure SSL con el cliente ligero para JAX-RS 2.0.

    Para invocar un URL cifrado, siga estos pasos:

    1. 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.
    2. Para llamar a un URL cifrado, ejecute el ejemplo de código siguiente desde la línea de mandatos:
      [HP-UX][Linux][Solaris]
      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]
      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>

Resultados

Ha definido una conexión segura entre el cliente y el servidor de destino utilizando SSL para habilitar la integridad y confidencialidad de la comunicación entre la aplicación JAX-RS y el cliente ligero.

Ejemplo

El siguiente fragmento de código muestra un archivo ssl.client.props de ejemplo:
# Información del almacén de claves
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=c:/jaxrs/test/config/keystore.p12 
com.ibm.ssl.keyStorePassword=testpasswd
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= c:/jaxrs/test/config/truststore.p12
com.ibm.ssl.trustStorePassword=testpasswd
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false

# Información de verificación de nombre de host
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs2
File name: twbs_jaxrs_impl_securejaxrs2.0_thinclientssl.html