sql-server properties - Ошибка JDBC для SQL Server в Java 8:драйверу не удалось установить безопасное соединение с SQL Server с использованием шифрования SSL.




socket timeout (7)

Я также столкнулся с этой проблемой в Windows Server 2012 R2, используя драйвер JDBC 4.0 и 4.1 с Java 7. В этой статье Microsoft возлагается ответственность за использование шифровальных комплектов DHE и рекомендуется отключить их или уменьшить их приоритет, если вы не можете выполнить обновление до драйвера JDBC 4.2.

Я получаю следующую ошибку при подключении к базе данных SQL Server с использованием версии драйвера Microsoft JDBC:

com.microsoft.sqlserver.jdbc.SQLServerException: драйверу не удалось установить безопасное соединение с SQL Server с использованием шифрования Secure Sockets Layer (SSL). Ошибка: «SQL Server возвратил неполный ответ. Соединение было закрыто. ClientConnectionId: 98d0b6f4-f3ca-4683-939e-7c0a0fca5931».

Недавно мы обновили наши приложения с Java 6 и Java 7 до Java 8. Все системы, работающие на Java, работают под управлением SUSE Linux Enterprise Server 11 (x86_64), VERSION = 11, PATCHLEVEL = 3.

Вот факты, которые я собрал с помощью написанной мной Java-программы, которая просто последовательно открывает и закрывает 1000 подключений к базе данных.

  • Соединения сбрасываются с этой ошибкой примерно 5% -10% времени. Ошибка НЕ ​​возникает на каждом соединении.
  • Проблема возникает ТОЛЬКО с Java 8. Я запустил ту же программу на Java 7, и проблема не воспроизводима. Это соответствует нашему опыту производства до модернизации. У нас было ноль проблем при работе под Java 7 в производстве.
  • Проблема НЕ возникает на всех наших серверах Linux, работающих под управлением Java 8, она возникает только на некоторых из них. Это сбивает с толку меня, но когда я запускаю одну и ту же тестовую программу на одной и той же версии Linux JVM (1.8.0_60, 64-битная) на разных экземплярах Linux, проблема не возникает ни на одном из экземпляров Linux, но проблема действительно происходит на других. Экземпляры Linux работают под одной и той же версией SUSE и находятся на одном уровне исправлений.
  • Проблема возникает при подключении к ОБА SQL Server 2008 и SQL Server 2014 серверов / баз данных.
  • Проблема возникает независимо от того, использую ли я версию 4.0 драйвера JDBC для SQL Server или более новую версию драйвера 4.1.

Что делает мои наблюдения уникальными в этом отношении по сравнению с другими в Интернете, так это то, что, хотя проблема возникает ТОЛЬКО на Java 8, я не могу получить проблему на одном из, казалось бы, идентичных серверов Linux, на котором установлена ​​та же Java 8 JVM. Другие люди видели эту проблему и в более ранних версиях Java, но это не наш опыт.

Будем благодарны за любые комментарии, предложения или замечания.


Похоже, что это было исправлено в версии 4.2 драйвера MS SQL JDBC. Я создал программу, в которой я подключался к серверу 1000 раз, делая паузу в 100 мс между каждой попыткой. С версией 4.1 мне удавалось воспроизвести проблему каждый раз, хотя это происходило лишь время от времени. С версией 4.2 мне не удалось воспроизвести проблему.


Ваш URL должен быть как ниже и добавить sql sqljdbc42.jar. Это решит вашу проблему

url = "jdbc:sqlserver://" +serverName + ":1433;DatabaseName=" + dbName + ";encrypt=true;trustServerCertificate=true;

Microsoft недавно открыла исходный код своего драйвера. На GitHub можно увидеть mssql-jdbc драйвера mssql-jdbc . Я предполагаю, что последняя предварительная версия 6.1.5.

Также вы можете найти все предварительные версии на Maven тоже. Поддержка как JDK7, так и JDK 8.


Перед обновлением драйвера JDBC для SQL сначала проверьте совместимость:

  • Sqljdbc.jar требует JRE 5 и поддерживает API JDBC 3.0
  • Sqljdbc4.jar требует JRE 6 и поддерживает API JDBC 4.0
  • Sqljdbc41.jar требует JRE 7 и поддерживает API JDBC 4.1
  • Sqljdbc42.jar требует JRE 8 и поддерживает API JDBC 4.2

Источник: https://www.microsoft.com/en-us/download/details.aspx?id=11774


В моем случае это была java-версия, начиная с java 8 upgrade 171, переходите на java 8 upgrade 111, она также работает с java 8 upgrade 14X


SQL Server Express и SQLite - не совсем сопоставимые системы баз данных.

  • SQL Server Express - это бесплатная версия полноценного продукта SQL Server от Microsoft, автономного сервера баз данных (часто работающего на выделенном компьютере), к которому подключаются клиентские приложения. Он предназначен для таких вещей, как веб-приложения, где многие пользователи будут использовать базу данных одновременно, и существует потребность в высокой доступности.

  • SQLite - это компактная внутрипроцессная база данных, которая часто используется в приложениях, которые получают доступ к системе баз данных на основе SQL, однако не представляется возможным установить полностью автономную базу данных вместе с приложением. Например, Firefox использует SQLite для хранения закладок, а Adobe Lightroom использует его для хранения своего каталога фотографий, также есть несколько мобильных приложений (например, iPhone), которые используют SQLite.

Эквивалентом SQLite для Microsoft будет SQL Server Compact Edition (CE), который можно бесплатно распространять и использовать. SQL Server CE во многих отношениях очень похож на SQLite.

Аналогичным образом, эквивалент SQL Server, не относящийся к Micrososft (как редакция Express, так и полная версия), вероятно, будет MySQL .

Хотя существуют перекрестные переходы (вы можете создать небольшое веб-приложение, использующее SQLite, или большое настольное приложение, требующее от пользователей установки SQL Express), как правило, существует выбор между двумя «типами» систем баз данных (в процессе работы против автономного сервера баз данных). зависит от типа разрабатываемого приложения.





java sql-server linux ssl jdbc