Создание ssl-соединения с oracle db с помощью Java

2

Я пытаюсь подключиться к БД Oracle, используя Java и SSL. На данный момент у меня есть Java-программа на сервере с базой данных.

Я получаю эту ошибку при попытке запустить ее (полная ошибка в комментарии):

java.sql.SQLRecoverableException: IO Error: Inbound closed before receiving peer close_notify: possible truncation attack?, connect lapse 15 ms., Authentication lapse 0 ms.

Это мой код Java:

public static void main(String[] args) {
        Security.addProvider(new oracle.security.pki.OraclePKIProvider());
        String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=ORCL)))"; 
        Properties props = new Properties(); 
        props.setProperty("javax.net.ssl.trustStore", 
                "C:\\app\\Administrator\\virtual\\product\\12.2.0\\dbhome_1\\bin\\wallets\\Administrator\\cwallet.sso"); 
        props.setProperty("javax.net.ssl.trustStoreType","SSO"); 
        props.setProperty("javax.net.ssl.keyStore", 
                "C:\\app\\Administrator\\virtual\\product\\12.2.0\\dbhome_1\\bin\\wallets\\Administrator\\cwallet.sso"); 
        props.setProperty("javax.net.ssl.keyStoreType","SSO"); 
        try {
            Connection conn = DriverManager.getConnection(url, props);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }

Я добавил это в listener.ora и tnsnames.ora (я также пытался с помощью файла sso и просто ссылки на каталог)

WALLET_LOCATION=(SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=C:\app\Administrator\virtual\product\12.2.0\dbhome_1\bin\wallets\Administrator\ewallet.p12 ))
SSL_CLIENT_AUTHENTICATION=TRUE

Я также добавил это в java.security:

security.provider.11=oracle.security.pki.OraclePKIProvider

редактировать: я не понял, ограничение длины для комментариев было настолько коротким. Здесь полная ошибка:

Caused by: java.io.IOException: Inbound closed before receiving peer close_notify: possible truncation attack?, connect lapse 11 ms., Authentication lapse 0 ms.
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:790)
    ... 6 more
Caused by: java.io.IOException: Inbound closed before receiving peer close_notify: possible truncation attack?, connect lapse 11 ms.
    at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:138)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:317)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1438)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518)
    ... 6 more
Caused by: javax.net.ssl.SSLException: Inbound closed before receiving peer close_notify: possible truncation attack?
    at sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.SSLEngineImpl.fatal(Unknown Source)
    at sun.security.ssl.SSLEngineImpl.fatal(Unknown Source)
    at sun.security.ssl.SSLEngineImpl.closeInbound(Unknown Source)
    at oracle.net.nt.SSLSocketChannel.fill(SSLSocketChannel.java:534)
    at oracle.net.nt.SSLSocketChannel.unwrap(SSLSocketChannel.java:434)
    at oracle.net.nt.SSLSocketChannel.handshake(SSLSocketChannel.java:350)
    at oracle.net.nt.SSLSocketChannel.write(SSLSocketChannel.java:238)
    at oracle.net.ns.NIOPacket.writeToSocketChannel(NIOPacket.java:211)
    at oracle.net.ns.NIOConnectPacket.writeToSocketChannel(NIOConnectPacket.java:232)
    at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:108)
    ... 9 more
  • 1
    Какая версия Oracle, какая версия драйвера Oracle JDBC, какая версия Java (полные версии всех, пожалуйста)
  • 0
    @Mark Oracle версия: 12.2.0.1.0 OJDBC: 12.2.0.1 Java: 1.8.0_191
Теги:
ssl
jdbc
ojdbc

1 ответ

0

Можете ли вы убедиться, что в пути к классам есть oraclepki.jar, osdt_core.jar и osdt_cert.jar? Вам не нужно использовать свойства хранилища ключей и доверенных сертификатов. Используйте oracle.net.wallet_location и oracle.net.ssl_server_dn_match = true. Проверьте блог для более подробной информации.

  • 0
    Спасибо, у меня есть они в classpath. Знаете ли вы, есть ли способ установить wallet_location и ssl_server_dn_match внутри кода Java? Я бы предпочел избегать настройки скрипта для запуска, если смогу.
  • 1
    Да, вы можете установить их в качестве свойств подключения. Проверьте DataSourceForJKS ( github.com/oracle/oracle-db-examples/blob/master/java/jdbc/… ) для справки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню