我猜您使用keytool 创建证书。如果是这样,请在一台机器上使用“oracle java keytool”,在另一台机器上使用“ibm java keytool”。
keytool -genkey -keyalg RSA -alias your_hostname -keystore your.keystore -storepass your_password -keypass your_password -validity 3650 -keysize 2048 -dname "CN=your_hostname"
keytool -exportcert -alias your_hostname -keystore your.keystore -storepass your_password -rfc -file oracle_or_ibm.crt
在 Oracle 数据库服务器/钱包中安装两个 ([oracle|ibm].crt) 生成的证书。如果您使用SSL_CLIENT_AUTHENTICATION=FALSE 配置数据库服务器,也可能会有所帮助。然后在两台客户端机器上导入数据库证书。
keytool -importcert -keystore your.keystore -storepass your_password -noprompt -file database-certificate.crt -alias database_alias
检查密钥库:keytool -list -keystore your.keystore -storepass your_password
您的 Java 代码可能如下所示:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleJdbcTest {
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(
"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=hostname)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename)))",
"username", "password")) {
System.out.println("Java JDBC Oracle Example");
System.out.println("Connected to Oracle database!");
Statement statement = connection.createStatement();
} catch (SQLException e) {
System.out.println("Connection failure.");
e.printStackTrace();
}
}
}
像这样运行它:
java -cp ojdbc7.jar:. -Djavax.net.ssl.trustStore=your.keystore -Djavax.net.ssl.trustStorePassword=your_password -Djavax.net.ssl.keyStore=your.keystore -Djavax.net.ssl.keyStorePassword=your_password -Djavax.net.ssl.keyStoreType=JKS -Djavax.net.ssl.trustStoreType=JKS -Doracle.net.ssl_version=1.2 OracleJdbcTest
要调试,请添加属性:-Djavax.net.debug=all
可能还需要使用 TLS 版本(例如 -Doracle.net.ssl_version=1.1)