Как подключиться к Sybase ASE с помощью драйвера JDBC и SSL-соединения

Я безуспешно пытаюсь установить SSL-соединение с Sybase ASE 15.7 с помощью драйвера JDBC. Я пробовал следующие варианты:

  1. Использование драйвера JTDS 1.25 (jtds-1.2.5.jar)

    Со следующей строкой подключения: jdbc:jtds:sybase://host:port;databaseName=dbname;ssl=request

    Я получил Network error IOException: Connection refused

  2. Использование Jconnect 4 (jconn4.jar)

    со следующей строкой подключения:

    jdbc:sybase:Tds:host:port/dbname?ENABLE_SSL=true

    Я получил java.sql.SQLException: JZ00L: Login failed. Examine the SQLWarnings chained to this exception for the reason(s) ... java.sql.SQLException: I/O Error: DB server closed connection.

    Я проверил журнал Sybase и увидел следующую ошибку:

    kernel SSL or Crypto Error Message: 'The SSL handshake failed. Root error: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol'.

    похоже, что сервер Sybase ожидает SSL-соединение, но java-клиент по-прежнему не использует SSL (хотя свойство строки подключения помечает ssl=true).

безуспешно пытался найти документацию Sybase ни по этой ошибке, ни по SSL с JConnect.

Буду очень признателен за любой ответ - я гибко подхожу к типу драйвера и конфигурации.

Спасибо


person zuckermanori    schedule 13.07.2015    source источник
comment
пробовал и 1.6 и 1.7   -  person zuckermanori    schedule 13.07.2015
comment
Пожалуйста, попробуйте последнюю версию jTDS. За последние пару лет было обнаружено несколько уязвимостей, связанных с SSL/TLS, и было выпущено множество соответствующих исправлений. Похоже, что клиент пытается использовать SSL2 или SSL3, и эти протоколы больше не поддерживаются большинством защищенных серверов.   -  person RealSkeptic    schedule 13.07.2015
comment
Спасибо RealSkeptic. Я знаю о проблемах SSL в JTDS. Попробовал еще раз с последней версией JTDS (1.3.1) и получил те же результаты.   -  person zuckermanori    schedule 13.07.2015


Ответы (1)


После долгих поисков я нашел решение. 2 на самом деле.

  1. Использование параметра строки подключения JDBC «Доверять всем сертификатам»: если вы не против доверять всем сертификатам (делайте это только в том случае, если вы полностью доверяете сети, в которой работаете, особенно ничему, что происходит в общедоступном Интернете), вы можете добавить соединение строка, указывающая, что SSLSocketFactory создает соединение для доверия всем сертификатам. Строка подключения будет выглядеть следующим образом: jdbc:sybase:Tds:host:port/dbname?ENABLE_SSL=true&SSL_TRUST_ALL_CERTS=true
  2. Использование сертификата sybase: сертификат необходимо импортировать в хранилище доверенных сертификатов приложений Java. если вы не работаете с назначенным хранилищем доверенных сертификатов, оно может быть импортировано в хранилище доверенных сертификатов Java по умолчанию, которое находится в разделе $JAVA_HOME\jreX\lib\security\cacerts. Сертификат можно импортировать с помощью keytool, как описано здесь.
person zuckermanori    schedule 29.10.2015