【问题标题】:Connect to Oracle DB by SSL usign IBM Java通过 SSL 使用 IBM Java 连接到 Oracle DB
【发布时间】:2019-10-22 17:55:22
【问题描述】:

我有一个启用了 tcps 的 oracle 数据库。我创建了 java 类来做一个简单的查询。

首先,我创建证书并将其导入 2 台机器。一个用oracle java,一个用ibm java....

所以问题是:我可以使用 eclipse 和 oracle java 连接并运行查询。

但是当我尝试使用 ibm java 运行相同的程序时,出现以下错误:

java.sql。 SQLRecoverableException:IO 错误:com.ibm.jsse2.util.h:PKIX 路径构建失败:java.security .cert.CertPathBuilderException: 无法在以下位置找到到所请求目标的有效认证路径 oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:752) 在 oracle.jdbc。 driver.PhysicalConnection.connect(PhysicalConnection.java:662) 在 oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)

我使用了在两个 cacerts 文件中导入的完全相同的证书。

你有什么线索吗???

问候。

【问题讨论】:

  • 你试过用 JKS 文件代替钱包吗?

标签: java oracle ssl


【解决方案1】:

我猜您使用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

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2020-04-08
    • 2015-01-09
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2011-02-09
    • 2013-11-08
    相关资源
    最近更新 更多