Я пытаюсь создать приложение Java, которое использует PKI
для аутентификации.Мне нужно иметь возможность получить сертификат из хранилища сертификатов Microsoft (MCS) и передать его в базу данных Oracle (11.2).
Я подключаюсь с помощью драйвера jdbc:oracle:thin
.Потратив довольно много времени на Google, я пришел пустой.Я нашел разные свойства для изменения (в зависимости от статьи):
- установить свойство
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 с веб-сайтом и поэтому создают свой собственный 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