Проблема с: com.microsoft.sqlserver.jdbc.SQLServerException в приложении Java, подключающемся к базе данных MSSQL - PullRequest
0 голосов
/ 01 мая 2019

Я получаю следующую ошибку:

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server did not return a response. The connection has been closed. ClientConnectionId:be8d9e1d-fff7-4310-ae77-03394c83f86b".

(больше ошибок в нижней части сообщения) При попытке подключиться к базе данных MSSQL.

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

jdbc:sqlserver://192.168.100.190:1433;databaseName=myDatabase;user=validUser;password=validPassword;encrypt=false;trustServerCertificate=false;sslProtocol=TLSv1;

Я пробовал варианты строки подключения, по сути меняя и пропуская:

encrypt=false;trustServerCertificate=false;sslProtocol=TLSv1; 

Я пробовал разные версии драйвера:

https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017

все срезультаты те же.

  • Важно отметить, что на некоторых ПК приложение подключается и работает, как и ожидалось, но я до сих пор не обнаружил реальных различий между учетными записями ПК или пользователей, никакой схемы на самом деле нет..
  • Я пробовал разные версии JDK и разные JRE, все дают одинаковые результаты. ОБНОВЛЕНИЕ: с тех пор я обнаружил, что JRE 1.8.0_152 работает во всех моих тестовых случаях
  • Я пытался просматривать журналы на серверах, и в журналах SQL нет записей.
  • Если я попробую строку подключения с неверными учетными данными, ошибка будет точно такой же.
  • Я настроил тестовый сервер и базу данных, это работает нормально, как и тот, который я настраивал в виртуальной сети.Machine.
  • Я могу подключиться к указанной базе данных, например, с помощью Navicat, и у меня есть другое приложение, пишущее на Visual Basic.Net, которое прекрасно подключается, так что будет видно, что это просто что-то с этим драйвером или Java, но какЯ говорю, что он работает на некоторых компьютерах, а не на других, и, конечно, работает, как и ожидалось, в моей тестовой среде.

Любые мысли или предложения будут с благодарностью.

Я не предоставил никакого кода, так как могу воспроизвести точно такие же результаты, используя приведенный здесь пример кода:

https://docs.microsoft.com/en-us/sql/connect/jdbc/step-3-proof-of-concept-connecting-to-sql-using-java?view=sql-server-2017

Подробнее об ошибке:

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server did not return a response. The connection has been closed. ClientConnectionId:be8d9e1d-fff7-4310-ae77-03394c83f86b".
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2670)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1837)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2257)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1921)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1762)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1077)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:623)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at database.DataBase.openConnection(DataBase.java:122)
    at jambuddylite.jblCoord.readSimex(jblCoord.java:387)
    at jambuddylite.jblCoord$2.run(jblCoord.java:314)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: SQL Server did not return a response. The connection has been closed. ClientConnectionId:be8d9e1d-fff7-4310-ae77-03394c83f86b
    at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.ensureSSLPayload(IOBuffer.java:780)
    at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:836)
    at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:827)
    at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1009)
    at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:997)
    at sun.security.ssl.InputRecord.readFully(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1767)
    ... 11 more

1 Ответ

0 голосов
/ 01 мая 2019

проверьте, открыт ли порт или не используется на cmd или терминале

telnet 192.168.100.190 1433

и проверьте имя базы данных и учетные данные

и брандмауэр Есть что-то в брандмауэре, я думаю

и посмотрите здесь может помочь вам

...