配置 Java 运行时环境以使用 TLS

在 JDBC 和 SQLJ 应用程序中使用 TLS (传输层安全性) 连接之前,需要配置 Java™ 运行时环境以使用 TLS。 提供了示例过程。 但是,根据您使用的 Java 运行时环境,该过程可能有所不同。

准备工作

在为 TLS配置 Java 运行时环境之前,需要满足以下先决条件:
  • Java 运行时环境必须包含 Java 安全提供程序。 必须安装 IBM® JSSE 提供程序或 SunJSSE 提供程序。 IBM JSSE 提供程序随 IBM SDK for Java 一起自动安装。
    限制: 只能将 SunJSSE 提供程序与 Oracle Java 运行时环境配合使用。 SunJSSE 提供程序无法与 IBM Java 运行时环境配合使用。
  • 必须在数据库服务器上配置 TLS 支持。

过程

要配置 Java 运行时环境以使用 TLS,请执行以下步骤:

  1. 将证书从数据库服务器导入到客户机上的 Java 信任库。

    使用 Java keytool 实用程序将证书导入到信任库中。

    示例:假设服务器证书存储在名为 cacerts 的文件中。 请发出以下 keytool 实用程序语句,以从 jcc.cacert 文件读取该证书,并将其存储在名为 cacerts 的信任库中。
    keytool -import -file jcc.cacert -keystore cacerts
    示例:假设服务器证书存储在名为 mydbserver.arm 的文件中。 发出以下 keytool 实用程序语句以从文件 mydbserver.arm读取证书,并将其存储在名为 mynewdbclient.jks的信任库中。
    keytool -import -trustcacerts -alias myalias -file mydbserver.arm -keystore mynewdbclient.jks
  2. 通过向 java.security 文件添加条目,为 Java 安全提供程序配置 Java 运行时环境。

    安全提供程序条目的格式为:

    security.provider.n=provider-package-name
    

    n 值较小的提供程序优先于 n 值较大的提供程序。

    您添加的 Java 安全提供程序条目取决于您是使用 IBM JSSE 提供程序还是 SunJSSE 提供程序。

    • 如果您使用的是 SunJSSE 提供程序,请将 Oracle 安全提供程序的条目添加到 java.security 文件中。
    • 如果使用 IBM JSSE 提供程序,请使用下列其中一种方法:
      • 使用 IBMJSSE2 提供程序 (受 IBM SDK for Java 1.4.2 及更高版本支持):
        建议: 使用 IBMJSSE2 提供程序,并以 FIPS 方式使用该提供程序。
        • 如果不需要以符合 FIPS 标准的方式操作:
          • 对于 IBM SDK for Java 1.4.2,将 IBMJSSE2Provider 的条目添加到 java.security 文件。 确保 IBMJCE 提供程序的条目在 java.security 文件中。 IBM SDK for Java 随附的 java.security 文件包含 IBMJCE条目的条目。
          • 对于更高版本的 IBM SDK for Java ,请确保 IBMJSSE2ProviderIBMJCE 提供程序的条目位于 java.security 文件中。 IBM SDK for Java 随附的 java.security 文件包含这些提供程序的条目。
        • 如果需要以符合 FIPS 标准的方式操作:
          • 请将 IBMJCEFIPS 提供程序的条目添加到 java.security 文件中 IBMJCE 提供程序的条目之前。 请勿移除 IBMJCE 提供程序的条目。
          • IBMJSSE2 提供程序中启用 FIPS 方式。 请参阅步骤 3
      • 使用 IBMJSSE 提供程序 (仅支持 IBM SDK for Java 1.4.2 ):
        • 如果不需要以符合 FIPS 的方式运行,请确保 IBMJSSEProviderIBMJCE 提供程序的条目位于 java.security 文件中。 IBM SDK for Java 随附的 java.security 文件包含这些提供程序的条目。
        • 如果需要以符合 FIPS 标准的方式运行,请将经 FIPS 核准的提供程序 IBMJSSEFIPSProviderIBMJCEFIPS 提供程序的条目添加到 java.security 文件中 IBMJCE 提供程序的条目之前。
      限制: 如果在 Solaris 操作系统上使用 IBMJSSE 提供程序,那么需要在 IBMJCEIBMJCEFIPSIBMJSSEIBMJSSE2 提供程序的条目之前包含 SunJSSE 提供程序的条目。

    示例:如果需要以符合 FIPS 标准的方式运行,并且已在 IBMJSSE2 提供程序中启用 FIPS 方式,请使用类似于以下示例的 java.security 文件:

    # 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
    

    示例:如果需要以符合 FIPS 标准的方式运行,并且您使用的是 IBMJSSE 提供程序,请使用类似于以下示例的 java.security 文件:

    # Set the Java security providers
    security.provider.1=com.ibm.fips.jsse.IBMJSSEFIPSProvider
    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
    

    示例:如果您使用的是 SunJSSE 提供程序,请使用类似于以下示例的 java.security 文件:

    # 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
  3. 如果计划在符合 FIPS 的方式下使用 IBM Data Server Driver for JDBC and SQLJ ,那么需要设置 com.ibm.jsse2.JSSEFIPS Java 系统属性:
    com.ibm.jsse2.JSSEFIPS=true 
    限制: 非 FIPS 方式的 JSSE 应用程序无法在处于 FIPS 方式的 JVM 中运行。
    限制:IBMJSSE2 提供程序以 FIPS 方式运行时,它无法使用硬件密码术。
  4. 通过将条目添加到 java.security 文件,为 TLS 套接字工厂提供程序配置 Java 运行时环境。 如果要使用 SunJSSE 提供程序和 Java 运行时环境 7 或更高版本,那么不需要执行此步骤。

    显示了 TLS 套接字工厂提供程序条目的格式:

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

    为您正在使用的 Java 安全提供程序指定 TLS 套接字工厂提供程序。

    示例: 在 IBMJSSE2 提供程序中启用 FIPS 方式时,请在 java.security 文件中包含 TLS 套接字工厂提供程序条目:

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

    示例: 在 IBMJSSE 提供程序中启用 FIPS 方式时,请在 java.security 文件中包含 TLS 套接字工厂提供程序条目:

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

    示例: 使用 SunJSSE 提供程序和 Java 运行时环境 6 或更低版本时,请包含 TLS 套接字工厂提供程序条目:

    # Set the TLS socket factory provider
    ssl.SocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl
    ssl.ServerSocketFactory.provider=com.sun.net.ssl.internal.ssl.SSLServerSocketFactoryImpl
    
  5. 配置 Java 系统属性以使用信任库。

    为此,请设置以下 Java 系统属性:

    javax.net.ssl.trustStore
    指定在步骤 1的 keytool 实用程序中使用 -keystore 参数指定的信任库的名称。
    javax.net.ssl.trustStorePassword(可选)
    指定信任库的密码。 您不需要设置信任库密码。 但是,如果未设置该密码,那么无法保护信任库的完整性。

    示例: 可以设置 Java 系统属性的一种方法是在运行 Java 应用程序时将它们指定为 -D 选项的自变量。 假设您要运行名为 MyTLS.java 的 Java 应用程序,该应用程序通过使用 TLS 连接来访问数据源。 如果您已定义名为 cacerts 的信任库,那么运行该应用程序时,可以使用以下命令来设置信任库名称。

    java -Djavax.net.ssl.trustStore=cacerts MyTLS
  6. 要启用通用访问卡 (IBMCAC) 提供程序,请覆盖缺省的信任库和密钥库定义:
    -Djavax.net.ssl.trustStoreType=Windows-ROOT
    -Djavax.net.ssl.keyStoreType=Windows-MY