Ang*_*Boy 7 java sql-server ssl jdbc database-administration
背景:
基于 Java 的应用程序在 Windows Server 2008 R2 Enterprise 上运行。此服务器上的 Java 版本是版本 6 Update 32。 JDBC 驱动程序版本:4.0
数据库服务器最近已从 Windows 2016 升级到 Windows 2019,从 SQL Server 2012 升级到 SQL Server 2016(使用与应用程序连接之前的服务器名称相同的并行升级),并且该服务器上没有 Java 。这是有问题吗??
当我们上次将数据库服务器从 SQL Server 2008 升级到 SQL Server 2012 时,我们遵循了相同的方法,并且应用程序运行良好。
但这一次它在应用程序日志中抛出以下错误:
org.jboss.resource.JBossResourceException:无法创建连接;- 嵌套抛出:(com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:“SQL Server 未返回响应。连接已已关闭。”。)
我们根本没有触及应用程序服务器,期望当数据库服务器启动时,由于它是相同的服务器名称,它会正常启动备份,但应用程序因上述错误而失败。没有登录失败,因为我们测试了应用程序登录名和密码并且工作正常。
我查看了以下内容:
Java 8 上的 SQL Server JDBC 错误:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接,
但我们似乎无法理解导致此问题的原因,因为应用程序上没有任何内容服务器已更改。我在这里查看了 JDBC 版本和 SQL Server 矩阵之间的兼容性
https://learn.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server-support-matrix ?view=sql-server-2017看起来 JDBC 4.0 可与 SQL Server 2016 配合使用。
关于可能发生的事情有什么想法吗?
小智 16
尝试添加“trustServerCertificate=true;” 连接字符串示例:jdbc:sqlserver://NEUTRON\SQL2017;user=sa;password=password123;integratedSecurity=false;trustServerCertificate=true;
好的,我们与 Microsoft 支持部门合作解决了这个问题,这是我们达成的共识。
Microsoft 向数据库服务器添加/启用 TLS 1.0 和 TLS 1.1 仅用于测试目的,因为 Microsoft 不再支持 TLS 1.0。这将安全协议降低到较低状态,但能够在应用程序服务器和数据库服务器之间建立 SQL 连接,但应用程序最初仍无法连接。Microsoft 认为这是因为应用程序正在使用当前的连接提供程序/驱动程序,并且他们不会支持这部分,因为那是 Java/Oracle 的 JDBC 驱动程序。
在我们的例子中,应用程序在启用 TLS 1.0 和 TLS 1.1 后一段时间后确实进行了连接。这对于您的情况可能有效,也可能无效。
因此,如果您有资源来修改应用程序,建议的解决方案是更新应用程序的驱动程序、测试并重新部署。
如果您没有应用程序的资源,则选项如下: 1.回滚到 SQL Server 的旧服务器。这可能有效,但不能保证。另一件需要注意的事情是,SQL Server 2008 和 2008R2 不再受支持,因此我们可以使用的最旧版本(并且仍然受支持)是 SQL Server 2012,它可能无法解决该问题。
2.打开安全门。这很可能会解决问题,但绝对不推荐。该问题可能与不再受支持的极其过时的安全提供程序有关。因此,完全开放安全性可能会解决问题,但不建议这样做。
3.重写应用程序,这不是最简单的选择,但却是微软完全推荐的唯一选择。
请参阅此https://serverfault.com/questions/649052/do-i-have-to-enable-tls-1-0-in-windows-2008-r2和此https://www.youtube.com/watch ?v=vUuR_M3biDU如果您想自行启用 TLS。进行此更改后,服务器将需要重新启动。
| 归档时间: |
|
| 查看次数: |
28571 次 |
| 最近记录: |