前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDBC SSL连接SQL Server

JDBC SSL连接SQL Server

作者头像
bisal
发布2021-09-10 10:11:05
2.8K0
发布2021-09-10 10:11:05
举报
文章被收录于专栏:bisal的个人杂货铺

上次碰到的是《JDBC SSL连接MySQL》,这次则是SSL连接SQL Server。

最近同事的一套系统,需要通过druid同时连接SQL Server 2008和SQL Server 2012,连接2012没问题,但是当连接2008的时候提示这个错误,其中驱动用的是mssql-jdbc-7.4.1.jre8.jar,JDK是8.0,

代码语言:javascript
复制
2021-09-02 01:10:38.116 ERROR 9936 --- [reate-477535705] com.alibaba.druid.pool.DruidDataSource   : create connection SQLException, url: jdbc:sqlserver://x.x.x.x:1433;DatabaseName=fwusercount;, errorCode 0, state 08S01


com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“SQL Server 未返回响应。连接已关闭。ClientConnectionId:e613447d-8c3a-4450-9055-2195edd7d514”。
  at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2924) ~[mssql-jdbc-7.4.1.jre8.jar:na]
...

看到“连接已关闭”第一反应是程序中是不是存在bug,例如调用了已关闭的连接?但是经过初步的判断,连接两个版本的程序代码是一套,而且连接池的配置未出现什么明显的错误。

看了下官网,“对于适用于SQL Server的Microsoft JDBC Driver 4.2 和 4.1,该支持从SQL Server 2008开始”,

P.S.

https://docs.microsoft.com/zh-cn/sql/connect/jdbc/system-requirements-for-the-jdbc-driver?view=sql-server-ver15

mssql-jdbc-7.4.1.jre8.jar满足JDBC 4.2协议,而且适用于JDK 8.0,应该是支持SQL Server 2008,

P.S.

https://docs.microsoft.com/zh-cn/sql/connect/jdbc/frequently-asked-questions-faq-for-jdbc-driver?view=sql-server-ver15

再看下这个错误,“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接”,看着好像是开始定位的方向有问题,可能又和SSL有点关系了?

通过一些资料,得到这些信息,如果使用的jdk8u171以上,就会碰到这问题,171的Release Notes里有一条关于SSL的安全性修复,

security-libs/javax.net.ssl 3DES Cipher Suites Disabled To improve the strength of SSL/TLS connections, 3DES cipher suites have been disabled in SSL/TLS connections in the JDK via the jdk.tls.disabledAlgorithms Security Property.

配合-Djavax.net.debug=ssl:handshake:verbose参数输出了SSL的调试信息,连接SQL Server 2008的片段,

代码语言:javascript
复制
...
Cipher Suite: SSL_RSA_WITH_3DES_EDE_CBC_SHA
...

连接SQL Server 2012的片段,

代码语言:javascript
复制
...
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
...

针对这种情况,可以修改jre\lib\security\java.security,删除其中jdk.tls.disabledAlgorithms的3DES_EDE_CBC,表示开启这个旧的算法SSL_RSA_WITH_3DES_EDE_CBC_SHA,

代码语言:javascript
复制
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024,
EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC(删除此项)

此时就可以正常连接SQL Server 2008数据库了,官方文档指出这是一个低风险的更改,他只会影响协商算法的顺序,如果没有其他非遗留算法可用,则仍将使用3DES(如果在遗留算法列表上列出)。

因此,技术都是相关的,看到的现象未必就是本质。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档