如何解决错误:“SQL Server 未返回响应连接已关闭” DSRA0010E: SQL 状态 = 08S01,错误代码 = 0
我正在进行一个将应用程序的代码库从 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。
我已经尝试过的解决方案:
- 向 JVM 参数添加“-Dcom.ibm.jsse2.overrideDefaultTLS=true”
- 将 sqljdbc 驱动程序更新到 8.4
- 修改 java.security 文件以删除 3DES_EDE_CBC
如果我遗漏了任何重要信息,请告诉我,我可以编辑帖子。
编辑:
我添加了以下 JVM 命令以获取更多信息:-Djavax.net.debug=ssl:handshake:verbose
在日志中,我看到以下信息:
[1/19/21 12:20:43:698 CST] 0000004a SystemOut O *** ClientHello,TLSv1 [1/19/21 12:20:43:698 CST] 0000004a SystemOut O RandomCookie: GMT: 1611080187 字节 = { 202,165,173,127,167,84,140,203,125,176,234,88,28,249,55,235,139,218,189,60,181,119,214,251,102,209,42 } [1/19/21 12:20:43:700 CST] 0000004a SystemOut O 会话 ID:{} [1/19/21 12:20:43:700 CST] 0000004a SystemOut O 密码套件:[TLS_EMPTY_RENEGOTIATION_INFO_SCSV, SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA、SSL_RSA_WITH_AES_128_CBC_SHA、 SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA, SSL_ECDH_RSA_WITH_AES_128_CBC_SHA、SSL_DHE_RSA_WITH_AES_128_CBC_SHA、 SSL_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、SSL_RSA_WITH_3DES_EDE_CBC_SHA、 SSL_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_ECDH_RSA_WITH_3DES_EDE_CBC_SHA、SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA、 SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA] [1/19/21 12:20:43:700 CST] 0000004a SystemOut O 压缩方法:{ 0 } [1/19/21 12:20:43:700 CST] 0000004a SystemOut O 扩展 elliptic_curves,曲线名称: {secp256r1、secp192r1、secp224r1、secp384r1、secp521r1、secp160k1、 secp160r1、secp160r2、secp192k1、secp224k1、secp256k1} [1/19/21 12:20:43:700 CST] 0000004a SystemOut O 扩展 ec_point_formats, 格式:[未压缩] [1/19/21 12:20:43:700 CST] 0000004a SystemOut O *** [1/19/21 12:20:43:701 CST] 0000004a SystemOut O server.startup : 2,WRITE: TLSv1 Handshake,length = 109 [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup:2,调用 close() [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup : 2,调用 closeInternal(true) [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup:2,发送 TLSv1.2 警报: 警告,描述 = close_notify [1/19/21 12:20:43:730 CST] 0000004a SystemOut O server.startup : 2,WRITE: TLSv1.2 Alert,长度 = 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,close 再次调用;状态 = 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,调用 关闭套接字() 块引用
我认为这表明我的服务器仍在使用 TLSv1,即使数据库设置为仅接受 TSL1.2。我尝试添加 JVM 命令 -Djdk.tls.client.protocols=TLSv1.2 和 -Dhttps.protocols=TLSv1.2 以强制它使用 TLSv1.2,但它没有改变。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。