Configuración del Entorno de ejecución Java para que utilice SSL

Para poder utilizar conexiones SSL (Secure Sockets Layer) en las aplicaciones JDBC y SQLJ, es necesario que configure el Entorno de ejecución Java para que utilice SSL. Se proporciona un procedimiento de ejemplo. Sin embargo, el procedimiento puede ser diferente dependiendo del Java Runtime Environment que utilice.

Antes de empezar

Antes de poder configurar su Java Runtime Environment para SSL, debe cumplir los siguientes requisitos previos:
  • Java Runtime Environment debe incluir un proveedor de seguridad Java. El proveedor de IBMJSSE2 , el proveedor de IBMCAC o el proveedor de SunJSSE deben estar instalados. El proveedor de IBMJSSE2 se instala automáticamente con el SDK de IBM® para Java.
    Restricción : Puede utilizar el proveedor SunJSSE solo con un entorno de ejecución de Java ( Oracle ). El proveedor de SunJSSE no funciona con un entorno de ejecución de Java ( IBM ).
  • El soporte de SSL debe configurarse en el servidor de bases de datos.

Procedimiento

Para configurar su Java Runtime Environment para que utilice SSL, siga estos pasos:

  1. Importar un certificado del servidor de base de datos a un almacén de confianza Java en el cliente.

    Utilice la utilidad Java keytool para importar el certificado al almacén de confianza.

    Ejemplo: Supongamos que el certificado de servidor se almacena en un archivo denominado cacerts. Emita la siguiente sentencia del programa de utilidad keytool para leer el certificado del archivo jcc.cacert y almacenarlo en un almacén de confianza denominado cacerts.
    keytool -import -file jcc.cacert -keystore cacerts
    Ejemplo: Suponga que el certificado de servidor se almacena en un archivo denominado mydbserver.arm. Emitir la siguiente declaración de utilidad de keytool para leer el certificado del archivo mydbserver.arm y almacenarlo en un almacén de confianza llamado mynewdbclient.jks.
    keytool -import -trustcacerts -alias myalias -file mydbserver.arm -keystore mynewdbclient.jks
  2. Configure el entorno de ejecución de Java para los proveedores de seguridad de Java añadiendo entradas al archivo java.security .

    El formato de una entrada de proveedor de seguridad es:

    security.provider.n=provider-package-name
    

    Un proveedor con un valor inferior a n tiene prioridad sobre un proveedor con un valor superior a n.

    • Si utiliza el proveedor SunJSSE , añada entradas para los proveedores de seguridad Oracle a su archivo java.security .
    • Si utiliza el proveedor IBMCAC , añada entradas para los proveedores de seguridad Oracle y el proveedor IBMCAC a su archivo java.security .

      Para obtener más información sobre el proveedor de la tarjeta de acceso común ( IBMCAC ), consulte IBM Proveedor de la tarjeta de acceso común (Common Access Card, CAC) para Java.

    • Si utiliza el proveedor IBMJSSE2 , siga estos pasos:
      • Si no necesita operar en modalidad compatible con FIPS:

        Asegúrese de que las entradas para el proveedor de IBMJSSE2 y el proveedor de IBMJCE están en el archivo java.security . El archivo java.security que se envía con el SDK de Java para IBM contiene entradas para esos proveedores.

      • Si necesita operar en modalidad compatible con FIPS:
        • Añada una entrada para el proveedor IBMJCEFIPS en el archivo java.security antes de la entrada para el proveedor IBMJCE. No elimine la entrada del proveedor IBMJCE.
        • Habilite la modalidad FIPS en el proveedor IBMJSSE2. Véase el paso 3.
      Restricción : si utiliza el proveedor IBMJSSE2 en el sistema operativo Solaris, debe incluir una entrada para el proveedor SunJSSE antes de las entradas para los proveedores IBMJCE, IBMJCEFIPS o IBMJSSE2 .

    Ejemplo : Si necesita ejecutar en modo compatible con FIPS y ha habilitado el modo FIPS en el proveedor de certificados ( IBMJSSE2 ), utilice un archivo de configuración de certificados ( java.security ) similar a este ejemplo:

    # Set the Java security providers
    security.provider.1=com.ibm.jsse2.IBMJSSEProvider2
    security.provider.2=com.ibm.crypto.fips.provider.IBMJCEFIPS
    security.provider.3=com.ibm.crypto.provider.IBMJCE
    security.provider.4=com.ibm.security.jgss.IBMJGSSProvider
    security.provider.5=com.ibm.security.cert.IBMCertPath
    security.provider.6=com.ibm.security.sasl.IBMSASL
    

    Ejemplo : Si utiliza el proveedor SunJSSE , utilice un archivo java.security similar a este ejemplo:

    # Set the Java security providers
    security.provider.1=sun.security.provider.Sun
    security.provider.2=com.sun.rsajca.Provider
    security.provider.3=com.sun.crypto.provider.SunJCE
    security.provider.4=com.sun.net.ssl.internal.ssl.Provider

    Ejemplo : Si utiliza el proveedor IBMCAC , utilice un archivo java.security similar a este ejemplo:

    # Set the Java security providers
    security.provider.1=sun.security.provider.Sun
    security.provider.2=com.sun.rsajca.Provider
    security.provider.3=com.sun.crypto.provider.SunJCE
    security.provider.4=com.sun.net.ssl.internal.ssl.Provider
    security.provider.10=com.ibm.security.capi.IBMCAC
  3. Si planea utilizar el IBM Data Server Driver for JDBC and SQLJ en modo compatible con FIPS, debe configurar la propiedad del sistema Java com.ibm.jsse2.JSSEFIPS :
    com.ibm.jsse2.JSSEFIPS=true 
    Restricción : Las aplicaciones JSSE que no están en modo FIPS no pueden ejecutarse en una JVM que esté en modo FIPS.
    Restricción : Cuando el proveedor de IBMJSSE2 funciona en modo FIPS, no puede utilizar criptografía de hardware.
  4. Configure el entorno de ejecución de Java para los proveedores de fábrica de sockets SSL añadiendo entradas al archivo java.security . Este paso no es necesario si utiliza el proveedor SunJSSE y el entorno de ejecución de Java, 7 o posterior.

    El formato de las entradas del proveedor de fábrica de sockets SSL se muestra así:

    ssl.SocketFactory.provider=provider-package-name
    ssl.ServerSocketFactory.provider=provider-package-name

    Especifique el proveedor de fábrica de socket SSL para el proveedor de seguridad Java que está utilizando.

    Ejemplo : Cuando habilite el modo FIPS en el proveedor de certificados ( IBMJSSE2 ), incluya las entradas del proveedor de fábrica de socket SSL en el archivo de certificados ( java.security ):

    # Set the SSL socket factory provider
    ssl.SocketFactory.provider=com.ibm.jsse2.SSLSocketFactoryImpl 
    ssl.ServerSocketFactory.provider=com.ibm.jsse2.SSLServerSocketFactoryImpl 
    

    Ejemplo : Cuando habilite el modo FIPS en el proveedor de certificados ( IBMJSSE2 ), incluya las entradas del proveedor de fábrica de socket SSL en el archivo de certificados ( java.security ):

    # Set the SSL socket factory provider
    ssl.SocketFactory.provider=com.ibm.fips.jsse.JSSESocketFactory
    ssl.ServerSocketFactory.provider=com.ibm.fips.jsse.JSSEServerSocketFactory
    

    Ejemplo : Cuando utilice el proveedor SunJSSE y el Java Runtime Environment, 6 o anterior, incluya las entradas del proveedor de fábrica de sockets SSL:

    # Set the SSL socket factory provider
    ssl.SocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl
    ssl.ServerSocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLServerSocketFactoryImpl
    
  5. Configure las propiedades del sistema Java para utilizar el almacén de confianza.

    Para ello, configure las siguientes propiedades del sistema Java:

    javax.net.ssl.trustStore
    Especifica el nombre del almacén de confianza que especificó con el parámetro -keystore en la utilidad keytool en el paso 1.

    Si se establece la IBM Data Server Driver for JDBC and SQLJ propiedad DB2BaseDataSource.sslTrustStoreLocation, db2.jcc.override.sslTrustStoreLocation, o db2.jcc.sslTrustStoreLocation está establecida, su valor anula el valor de la propiedad javax.net.ssl.trustStore.

    javax.net.ssl.trustStorePassword (optional)
    Especifica la contraseña para el almacén de confianza. No es necesario establecer una contraseña del almacén de confianza. No obstante, si no establece la contraseña, no puede proteger la integridad del almacén de confianza.

    Si se establece la IBM Data Server Driver for JDBC and SQLJ propiedad DB2BaseDataSource.sslTrustStorePassword, db2.jcc.override.sslTrustStorePassword, o db2.jcc.sslTrustStorePassword está establecida, su valor anula el valor de la propiedad javax.net.ssl.trustStore.

    Si va a utilizar un archivo de certificado de confianza (si DB2BaseDataSource.sslCertLocation, db2.jcc.override.sslCertLocation, o db2.jcc.sslCertLocation se han establecido), no se utilizarán los valores javax.net.ssl.trustStore o javax.net.ssl.trustStorePassword.

    Ejemplo : Una forma de establecer las propiedades del sistema Java es especificarlas como argumentos de la opción " -D " al ejecutar una aplicación Java. Supongamos que desea ejecutar una aplicación Java llamada MySSL.java, que accede a una fuente de datos mediante una conexión SSL. Si ha definido un almacén de confianza denominado cacerts, el mandato siguiente establece el nombre del almacén de confianza cuando se ejecuta la aplicación.

    java -Djavax.net.ssl.trustStore=cacerts MySSL
  6. Para habilitar el proveedor de certificados ( IBMCAC ), anule las definiciones predeterminadas de almacén de confianza (truststore) y almacén de claves (keystore):
    -Djavax.net.ssl.trustStoreType=Windows-ROOT
    -Djavax.net.ssl.keyStoreType=Windows-MY