Protección de clientes JAX-RS mediante SSL

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

Antes de empezar

Esta tarea da por supuesto que ha completado 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 acerca de la creación de 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) 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
Puede configurar SSL para aplicaciones cliente de JAX-RS con el fin de permitir que el cliente interactúe con los recursos de aplicaciones de JAX-RS que requieran 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.

Procedimiento

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

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

    Para llamar a un URL cifrado, continúe con los pasos siguientes:

    1. 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.
    2. Para llamar a un URL cifrado, ejecute el código de ejemplo 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.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]
      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>

Resultados

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

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 del 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_securejaxrs_clientssl
File name: twbs_jaxrs_impl_securejaxrs_clientssl.html