配置 Java 运行时环境以使用 TLS
在 JDBC 和 SQLJ 应用程序中使用 TLS (传输层安全性) 连接之前,需要配置 Java™ 运行时环境以使用 TLS。 提供了示例过程。 但是,根据您使用的 Java 运行时环境,该过程可能有所不同。
准备工作
- Java 运行时环境必须包含 Java 安全提供程序。 必须安装 IBM® JSSE 提供程序或 SunJSSE 提供程序。 IBM JSSE 提供程序随 IBM SDK for Java 一起自动安装。限制: 只能将 SunJSSE 提供程序与 Oracle Java 运行时环境配合使用。 SunJSSE 提供程序无法与 IBM Java 运行时环境配合使用。
- 必须在数据库服务器上配置 TLS 支持。
过程
要配置 Java 运行时环境以使用 TLS,请执行以下步骤:
- 将证书从数据库服务器导入到客户机上的 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 - 通过向 java.security 文件添加条目,为 Java 安全提供程序配置 Java 运行时环境。
安全提供程序条目的格式为:
security.provider.n=provider-package-namen 值较小的提供程序优先于 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 ,请确保 IBMJSSE2Provider 和 IBMJCE 提供程序的条目位于 java.security 文件中。 IBM SDK for Java 随附的 java.security 文件包含这些提供程序的条目。
- 如果需要以符合 FIPS 标准的方式操作:
- 请将 IBMJCEFIPS 提供程序的条目添加到 java.security 文件中 IBMJCE 提供程序的条目之前。 请勿移除 IBMJCE 提供程序的条目。
- 在 IBMJSSE2 提供程序中启用 FIPS 方式。 请参阅步骤 3。
- 如果不需要以符合 FIPS 标准的方式操作:
- 使用 IBMJSSE 提供程序 (仅支持 IBM SDK for Java 1.4.2 ):
- 如果不需要以符合 FIPS 的方式运行,请确保 IBMJSSEProvider 和 IBMJCE 提供程序的条目位于 java.security 文件中。 IBM SDK for Java 随附的 java.security 文件包含这些提供程序的条目。
- 如果需要以符合 FIPS 标准的方式运行,请将经 FIPS 核准的提供程序 IBMJSSEFIPSProvider 和 IBMJCEFIPS 提供程序的条目添加到 java.security 文件中 IBMJCE 提供程序的条目之前。
限制: 如果在 Solaris 操作系统上使用 IBMJSSE 提供程序,那么需要在 IBMJCE, IBMJCEFIPS, IBMJSSE或 IBMJSSE2 提供程序的条目之前包含 SunJSSE 提供程序的条目。 - 使用 IBMJSSE2 提供程序 (受 IBM SDK for Java 1.4.2 及更高版本支持):
示例:如果需要以符合 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 - 如果计划在符合 FIPS 的方式下使用 IBM Data Server Driver for JDBC and SQLJ ,那么需要设置
com.ibm.jsse2.JSSEFIPSJava 系统属性:com.ibm.jsse2.JSSEFIPS=true限制: 非 FIPS 方式的 JSSE 应用程序无法在处于 FIPS 方式的 JVM 中运行。限制: 当 IBMJSSE2 提供程序以 FIPS 方式运行时,它无法使用硬件密码术。 - 通过将条目添加到 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 - 配置 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 - 要启用通用访问卡 (IBMCAC) 提供程序,请覆盖缺省的信任库和密钥库定义:
-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.keyStoreType=Windows-MY