上次碰到的是《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,

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 08S01com.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的片段,

...
Cipher Suite: SSL_RSA_WITH_3DES_EDE_CBC_SHA
...

连接SQL Server 2012的片段,

...
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,

jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024,
EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC(删除此项)

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

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

近期更新的文章:

《exp和expdp几种常见的使用场景操作介绍》

《优雅编写SQL的几个案例》

《优化前置思想的成本收益关系》

《v$视图存储SQL的bug》

《RPO和RTO是什么?》

文章分类和索引:

《公众号800篇文章分类和索引》

JDBC SSL连接SQL Server相关推荐

  1. java jdbc dbcp连接SQL Server

    使用到的jar: commons-collections-3.1.jar commons-dbcp-1.4.jar commons-pool-1.5.6.jar sqljdbc4.jar dbcp配置 ...

  2. idea连接sql server报错:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    idea连接sql server报错:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接 运行环境:IDEA2020.1:JDK1.8:SQL SERVER2005: ...

  3. JDBC连接sql server数据库及其它

    JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...

  4. 使用JDBC连接SQL Server数据库

    1.准备工作: 准备相关的软件(Eclipse除外,开源软件可以从官网下载) <1>.Microsoft SQL server 2005 Express Edition 下载地址:http ...

  5. Eclipse 通过 JDBC 连接 SQL Server

    文章目录 1.配置 SQL Server 2012 2.开启 Telnet 服务 3.测试1433端口是否打开 4.下载JDBC 5.Eclipse 连接 SQL Server 6.测试连接 本文用到 ...

  6. Java/JSP中使用JDBC连接SQL Server 2000/2005

    转自:http://hi.baidu.com/huangdonghui/blog/item/87cf4ff47ba653e37609d7e1.html/cmtid/9c82350965721ba22e ...

  7. Java/JSP中使用JDBC连接SQL Server 2005(转自 秋忆)

    接触Java或者JSP,难免会使用到数据库SQL Server 2000/2005(我使用2005标准版[9.0.3054]测试),经过自己的搜索和研究,使用JDBC连接SQL Server成功,特此 ...

  8. Java 实现连接sql server 2000(JDBC数据库访问例子)

    JAVA语言的跨平台的工作能力(Write Once ,Run Anywhere).优秀的图像处理能力(我相信现在没有那种语言可以超过JAVA在网络上的图形处理能力).网络通信功能.通过JDBC数据库 ...

  9. java web之数据库的连接(使用JDBC连接sql server)

    一.安装JDBC驱动程序 二.加载驱动程序并建立连接对象 1.sql server的连接代码: 2.关于这里的用户名和密码 3.解决在用sa登录时可能出现的问题 三.建立数据库 四.在servlet中 ...

最新文章

  1. C++与JAVA语言区别
  2. mysql的ERROR:1042
  3. CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现
  4. c语言稀疏矩阵做除法,稀疏矩阵的除法
  5. microsoft excel 正在等待其他某个应用程序_浅谈应该购买英特尔Mac还是等待购买基于Arm的Mac...
  6. 使用sklearn加载公共数据集、内存数据与CSV文件
  7. 学习笔记(41):Python实战编程-按钮
  8. golang切片内存应用技巧
  9. threeJs 入门
  10. 无人深空java修改器,无人深空next存档修改-无人深空next存档修改器下载v1.5.0最新版-西西软件下载...
  11. 基于企业服务总线的主数据管理系统(MDM)集成方案
  12. 【数学】线性增长,指数增长,对数增长,幂增长
  13. 2021强网杯全国网络安全挑战赛Writeup
  14. C++练习实例———控制台实现坦克大战小游戏
  15. 使用am start命令启动android apk应用程序
  16. 2018秦皇岛ccpc赛后总结
  17. win11系统电脑打开桌面便签小工具的操作方法
  18. 零基础入门学Python(十二)—— 魔法方法(下)
  19. SqlServer存储过程中循环的使用
  20. 阿里云的服务器,网站域名没有备案时为什么不可以访问?

热门文章

  1. laravel middleware
  2. .net如何将aspx生成html(cms静态页面原理)
  3. 如何实现邮件报警通知以及免费短信报警通知
  4. 【教学类-26-01】背诵家长电话号码-Python数字填空(中班 偏数学和社会)
  5. C++反汇编与逆向分析之数据类型的基本表现学习笔记
  6. [CV] Rotated IoU 计算旋转矩形之间的重叠面积
  7. Extjs各版本的下载链接,包含ext3.4源码示例
  8. 面试-计算机网络知识总结
  9. (转)流出视频显示iPhone 5耳机采用“泪珠状”设计(图)
  10. c语言remove命令和erase,详解C++ list中erase与remove函数的使用