我正在进行一个项目,将我的应用程序代码库从 Java 1.6 更新到 Java 1.8,当我尝试连接到数据库时,我所做的事情导致了以下错误:
DataSource Configuration: DSRA8040I: Failed to connect to the DataSource jdbc/TIRDB. Encountered java.sql.SQLException: 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. ". DSRA0010E: SQL State = 08S01, Error Code = 0.
我正在使用 Websphere 8.5.5.9 和 sqljdbc4,数据库最近更新到 SQL server 2017。
我已经尝试过的解决方案:
- 将“-Dcom.ibm.jsse2.overrideDefaultTLS=true”添加到 JVM 参数
- 将 sqljdbc 驱动程序更新到 8.4
- 修改 java.security 文件以删除 3DES_EDE_CBC
如果我遗漏了任何重要信息,请告诉我,我可以编辑帖子。
编辑:
我添加了以下 JVM 命令以获得更多信息:-Djavax.net.debug=ssl:handshake:verbose
在日志中,我看到以下信息:
2,调用 closeInternal(true) [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup : 2, SEND TLSv1.2 ALERT: warning, description = close_notify [1/19/21 12: 20:43:730 CST] 0000004a SystemOut O server.startup:2,写入:TLSv1.2 警报,长度 = 2 [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup:2,调用 closeSocket(true) [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup : 2,等待 close_notify 或警报:状态 5 [1/19/21 12:20:43:731 CST] 0000004a SystemOut O server.startup:2,收到 EOFException:忽略 [1/19/21 12:20:43:731 CST] 0000004a SystemOut O server.startup:2,称为 closeInternal(false) [1/19/21 12:20:43:731 CST] 0000004a SystemOut O server.startup:2,再次调用关闭;状态 = 5 [1/19/21 12:20:43:731 CST] 0000004a SystemOut O server.startup : 2, 处理异常:java.io.IOException:SQL Server 没有返回响应。连接已关闭。ClientConnectionId:e3180c28-baa6-4741-8359-008575b697b3 [1/19/21 12:20:43:731 CST] 0000004a SystemOut O server.startup : 2, 调用 closeSocket() 块引用
我认为这表明我的服务器仍在使用 TLSv1,即使数据库设置为仅接受 TSL1.2。我尝试添加 JVM 命令 -Djdk.tls.client.protocols=TLSv1.2 和 -Dhttps.protocols=TLSv1.2 来强制它使用 TLSv1.2,但它没有改变。