我正在嘗試創建一個使用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