Can any body tell me what this exception means, its confusing because I tried all possible ways to change the path of the keystore.. doesn't work.
Environment: ORACLE database server, configuring SSL
Exception in thread "main" java.sql.SQLException: Io exception:
java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
at oracle.jdbc.driver.Physica开发者_开发知识库lConnection.<init>(PhysicalConnection.java:414)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at project1.JDBCSSLTest.getConnection(JDBCSSLTest.java:42)
at project1.JDBCSSLTest.run(JDBCSSLTest.java:22)
at project1.JDBCSSLTest.main(JDBCSSLTest.java:49)
The java class I am using is.
package project1;
import java.security.Security;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.*;
import oracle.jdbc.OracleDriver;
public class JDBCSSLTest
{
public JDBCSSLTest()
{
// must enable this
Security.addProvider(new oracle.security.pki.OraclePKIProvider());
}
public void run () throws SQLException
{
Connection conn = getConnection();
System.out.println("Auto Commit = " + conn.getAutoCommit());
conn.close();
}
public static Connection getConnection() throws SQLException
{
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)" +
"(HOST=localhost)(PORT=2484))" +
"(CONNECT_DATA=(SERVICE_NAME=orcl)))";
java.util.Properties props = new java.util.Properties();
props.setProperty("user", "system");
props.setProperty("password", "weblogic");
props.setProperty("javax.net.ssl.trustStore","C://lib//ewallet.p12");
props.setProperty("javax.net.ssl.trustStoreType","PKCS12");
props.setProperty("javax.net.ssl.trustStorePassword","weblogic123");
props.setProperty("oracle.net.ssl_cipher_suites", "SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA");
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(url, props);
return conn;
}
public static void main(String[] args) throws SQLException
{
JDBCSSLTest dSTest = new JDBCSSLTest();
dSTest.run();
System.out.println("all done..");
}
}
From this Oracle document:
“java.sql.SQLException: Io exception: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty”:
if you are using PKCS12 wallets and Oracle’s PKI provider isn’t properly enabled. This exception comes from the PKCS12 implementation from Sun (Sun’s PKI provider) which isn’t compatible with Oracle wallets. Oracle’s PKI provider must be properly enabled for PKCS12 either statically or dynamically if you use PKCS12 wallets.
Enabling the PKI provider is described in section 2.2.4 of the same document.
I'm not familiar this with this but going by the exception information along your user code was triggered
at project1.JDBCSSLTest.getConnection(JDBCSSLTest.java:42)
and the runtime is missing a required property when retrieving a connection
Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
It looks as if you haven't configured this required 'trustAnchors' property.
精彩评论