Я получаю следующую ошибку:
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