【发布时间】:2016-12-22 11:20:35
【问题描述】:
我已将 Oracle 11g 数据库服务器配置为使用钱包和自签名证书使用 SSL。 使用本地客户端(sqlplus)对其进行了测试,并且没有任何问题。 现在我正在尝试使用 Java JDBC 连接数据库。 目前我收到一个错误:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
这是我的代码:
public static void main(String[] args)
{
Connection connection = null;
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.200.191)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=VDB)))";
Properties props = new Properties();
props.setProperty("user", "dbuser");
props.setProperty("password", "dbpass");
props.setProperty("oracle.net.ssl_cipher_suites","(SSL_RSA_WITH_3DES_EDE_CBC_SHA)");
/* Load the database driver */
try
{
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();
}
}
我做了更多研究,发现如果钱包配置为'auto_login',我可以尝试以下:
Connection connection = null;
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.200.191)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=VDB)))";
Properties props = new Properties();
props.setProperty("user", "dbuser");
props.setProperty("password", "dbpass");
props.setProperty("javax.net.ssl.trustStore", "C:\\oracle\\wallet\\cwallet.sso");
props.setProperty("javax.net.ssl.trustStoreType","SSO");
/* Load the database driver */
try
{
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.security.NoSuchAlgorithmException: SSO KeyStore not available
我添加了 3 个罐子:oraclepki.jar、osdt_cert.jar、osdt_core.jar 尝试运行最后一个版本的代码,得到异常:
java.lang.ClassNotFoundException: com.phaos.crypto.AuthenticationException
也许我应该指定钱包位置?就像我在 tnsnames.ora 文件中所做的那样?还是指定证书CN?
请指教,谢谢。
【问题讨论】: