gpt4 book ai didi

带有 SSL : Wallet version not supported or the trustAnchors parameter must be non-empty 的 Java JDBC

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:24 27 4
gpt4 key购买 nike

我已经配置了一个 Oracle 11g 数据库服务器,使用钱包和自签名证书与 SSL 一起工作。钱包已启用自动登录。我使用来自另一台机器的客户端 (sqlplus) 测试了连接,它工作正常。

现在我正在尝试使用 Java JDBC 连接到数据库。

我有两个代码版本,都不起作用。第一个尝试使用 SSO 选项:

    Connection connection = null;

String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.200.191)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=DBSERVICE)))";

Properties props = new Properties();
props.setProperty("user", "dbuser");
props.setProperty("password", "dbpass");

//Single sign on
props.setProperty("javax.net.ssl.trustStore", "C:\\oracle\\wallet\\cwallet.sso");
props.setProperty("javax.net.ssl.trustStoreType","SSO");

/* Load the database driver */
try
{
Security.addProvider(new oracle.security.pki.OraclePKIProvider());
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
connection = DriverManager.getConnection(url,props);
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
catch (SQLException ex) {
ex.printStackTrace();
}

在这个版本中我得到了

java.io.IOException: Wallet version not supported
at oracle.security.pki.OracleSSOKeyStoreSpi.engineLoad(OracleSSOKeyStoreSpi)

第二种是使用钱包本身:

    Connection connection = null;

String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.200.191)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=DBSERVICE)))";

Properties props = new Properties();
props.setProperty("user", "dbuser");
props.setProperty("password", "dbpass");

//with password
props.setProperty("javax.net.ssl.trustStore", "C:\\oracle\\wallet\\ewallet.p12");
props.setProperty("javax.net.ssl.trustStorePassword","WalletPasswd1234");
props.setProperty("javax.net.ssl.trustStoreType","PKCS12");
props.setProperty("oracle.net.ssl_cipher_suites","(SSL_RSA_WITH_3DES_EDE_CBC_SHA)");

/* Load the database driver */
try
{
Security.addProvider(new oracle.security.pki.OraclePKIProvider());
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
connection = DriverManager.getConnection(url,props);
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
catch (SQLException ex) {
ex.printStackTrace();
}

在这次尝试中我得到了

java.io.IOException: Wallet version not supported
at oracle.security.pki.OracleSSOKeyStoreSpi.engineLoad(OracleSSOKeyStoreSpi)
at java.security.KeyStore.load(Unknown Source)
at oracle.net.nt.CustomSSLSocketFactory.getTrustManagerArray(CustomSSLSocketFactory.java:406)

我已将以下 JAR 添加到项目中(不确定我是否需要它们):

  1. ojdbc6.jar
  2. oraclepki.jar
  3. osdt_cert.jar
  4. osdt_core.jar
  5. ojpse.jar
  6. osdt_xmlsec.jar
  7. osdt_wss.jar
  8. osdt_saml.jar
  9. ldapjclnt10.jar
  10. jssl-1_1.jar
  11. jaxen.jar
  12. javax-ssl-1_1.jar

请告诉我如何解决这个问题,谢谢。

最佳答案

请务必使用 12.1.0.2 中的 oraclepki.jar 和 ojdbc6.jar,这是迄今为止的最新版本。如果问题仍然存在,您可以尝试使用 orapki wallet pkcs12_to_jks 将您的钱包转换为 jks 文件。 .完整的命令行如下所示(将 <> 之间的值替换为您自己的值):

orapki wallet pkcs12_to_jks -wallet <wallet_directory> -pwd <wallet_password> -jksKeyStoreLoc <keystore.jks> -jksKeyStorepwd <keystore_jks_password> -jksTrustStoreLoc <truststore.jks> -jksTrustStorepwd <truststore_jks_password>

将 jks 文件用于 keystore 和信任库将比钱包更容易。您只需要配置 javax.net.ssl.trustStore 和 javax.net.ssl.keyStore 属性。您甚至不需要额外的 jar,例如 oraclepki.jar 或 osdt jar。

关于带有 SSL : Wallet version not supported or the trustAnchors parameter must be non-empty 的 Java JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com