我正在尝试创建一个使用PKI
进行身份验证的java应用程序。我需要能够从Microsoft证书存储(MCS)中检索证书并将其传递给Oracle数据库(11.2)。如何在JDBC中使用Windows密钥库(MCS)?
我使用jdbc:oracle:thin
驱动程序进行连接。在谷歌上花了一段时间之后,我已经空了。 我发现不同的属性来改变(文章):
- 设置属性
javax.net.ssl.keyStoreType = "Windows-MY"
- 设置
javax.net.ssl.keyStore = "Windows-MY"
javax.net.ssl.keyStore should be set to "None"
(如果使用的是定制的KeyManager我不相信,因为将工作当它进入我的自定义KeyManager时,我将已经获得来自连接属性中指定的密钥库的证书)。
当然,所有这些人都声称成功,但没有为我工作。我尝试了所有没有运气的例子。当我使用Oracle钱包时,我能够成功进行身份验证,因此我知道我的证书没问题。如果有人以前做过这个,愿意发布一些很棒的代码。
我知道大多数人在网站上使用Windows keystore,因此正在创建自己的SSLContext,但我无法想象我是唯一一个想用JDBC来做到这一点的人(据我所知,让我提供一个SSLContext)。
这是我认为应该工作的代码,但没有。
DriverManager.registerDriver)new OracleDriver());
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=host)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=someName))(SECURITY= (SSL_SERVER_CERT_DN=\"CN=TESTSERVER\")))";
java.util.Properties props = new java.util.Properties();
props.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");
props.setProperty("javax.net.ssl.keyStore", "NONE");
props.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");
props.setProperty("javax.net.ssl.trustStore", "NONE");
props.setProperty("oracle.net.ssl_server_dn_match", "true");
props.setProperty("oracle.net.authentication_services", "(TCPS)");
Connection conn = DriverManager.getConnection(url, props);
此代码失败,异常:
java.sql.SQLRecoverableException: IOException: The Network Adapter could not establish the connection
不要将代码格式设置为不是代码的文本。 – EJP 2016-04-22 03:31:47