SQL Server驱动和TLS版本不兼容的原因分析和解决方案

 更新时间:2025年11月12日 09:27:48   作者:Dream_sky分享  
这篇文章主要介绍了在将Java程序部署到Docker容器时,由于SQL Server和OpenJDK 8之间的TLS/SSL版本不兼容问题导致的错误,通过修改`java.security`文件放宽TLS/SSL的安全限制,解决了本地服务器和Docker容器的兼容性问题,需要的朋友可以参考下

一、问题描述

声明:java程序是docker容器化部署的 进行期初数据定时同步功能,sql server同步至mysql中,本地调用正常,发到服务器环境就会报错如下

- java.security path: /usr/local/openjdk-8/jre/lib/security
Security providers: [SUN version 1.8, SunRsaSign version 1.8, SunEC version 1.8, SunJSSE version 1.8, SunJCE 	vers1on 1.8,
SunJGSS version 1.8, SunSASL version 1.8, )
XMLDSig version 1.8, SunPCSC version 1.8]
SSLContext provider info: Sun JSSE provider(PKCS12, SunX509/PKIX key/trust factories,
SSLv3/TLSv1/TLSvl.1/TLSvl.2/TLSvl.3)
SSLContext provider services:

配置文件如下:

  # 动态数据源配置
  datasource:
    dynamic:
      primary: master
      datasource:
        slave:
          url: jdbc:sqlserver://192.168.0.1:1433;DatabaseName=test
          username: root
          password: xxxxxxx
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
<!-- sqlserver驱动 -->
<dependency>
     <groupId>com.microsoft.sqlserver</groupId>
     <artifactId>sqljdbc4</artifactId>
     <version>4.0</version>
 </dependency>

二、原因分析:

这是一个Java安全配置相关的信息输出,通常是在启动应用或检查SSL配置时出现的。

通过异常信息可以看出

  • Java安全文件路径: /usr/local/openjdk-8/jre/lib/security
  • Java版本: OpenJDK 8
  • 显示TLS/SSL支持的协议版本:SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

检测到当前数据库使用的协商使用的是 TLSv1 协议,而项目中使用的时jdk8,它的协议版本高,不兼容 TLSv1 协议。
不能改其他项目的数据库的版本,则更改jdk安全配置文件java.security。

三、解决方案

3.1 服务器本地解决方案

修改java.security文件

放宽TLS/SSL的安全限制,解决某些老系统或内部系统连接时的兼容性问题
# 移除了 TLSv1, TLSv1.1 的禁用

修改前

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

修改后(放宽策略):

jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA,\
	 DH keySize < 1024, EC keySize < 224, anon, NULL, ECDH

3.2 Docker容器部署解决方案

因为每次Jenkins部署,都会根据Dockerfile生成新的镜像和启动容器,修改需要修改容器内的安全文件,不可能每次发版都改所以修改Dockerfile文件

FROM openjdk:8-jdk
ADD app/target/app.jar /app/app.jar
RUN sed -i 's/^jdk.tls.disabledAlgorithms=.*/jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, anon, NULL, ECDH/' /usr/local/openjdk-8/jre/lib/security/java.security
RUN echo 'Asia/Shanghai' >/etc/timezone
ENV JAVA_OPTS=""
ENV JAVA_ACTIVE=""
ENTRYPOINT exec java ${JAVA_OPTS} -jar ${JAVA_ACTIVE} /app/jb-access-server-business.jar
EXPOSE 35010

最主要就是RUN sed这行

  • sed: 流编辑器,用于文本处理
  • -i : 直接修改原文件
's/^jdk.tls.disabledAlgorithms=.*/新的值/'

s/原内容/新内容/: 替换命令
^jdk.tls.disabledAlgorithms=.*: 匹配以"jdk.tls.disabledAlgorithms="开头的整行

到此这篇关于SQL Server驱动和TLS版本不兼容的原因分析和解决方案的文章就介绍到这了,更多相关SQL Server驱动和TLS版本不兼容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL 注入提取数据方法小结

    SQL 注入提取数据方法小结

    SQL注入是一种代码注入技术,本文主要介绍了SQL 注入提取数据方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • SQL Server 异地数据库每日同步作业操作图文详解

    SQL Server 异地数据库每日同步作业操作图文详解

    最近因为经常有攻击,所以考虑到网站的安全问题,所以多弄了几台服务器并实现数据库与文件每天同步,这里主要介绍了sqlserver数据的每天同步问题
    2024-04-04
  • ODBC连接数据库以SQLserver为例图文详解

    ODBC连接数据库以SQLserver为例图文详解

    开放数据库互连(ODBC)是微软提出的数据库访问接口标准,开放数据库互连定义了访问数据库的API一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言,下面这篇文章主要给大家介绍了关于ODBC连接数据库以SQLserver为例的相关资料,需要的朋友可以参考下
    2023-05-05
  • 将sqlserver数据迁移到mysql的详细步骤记录

    将sqlserver数据迁移到mysql的详细步骤记录

    这篇文章主要介绍了将SQL Server数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成迁移任务,需要的朋友可以参考下
    2025-01-01
  • SQL Server使用PIVOT与unPIVOT实现行列转换

    SQL Server使用PIVOT与unPIVOT实现行列转换

    这篇文章介绍了SQL Server使用PIVOT与unPIVOT实现行列转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 解决在window下执行SQLSERVER定时备份的问题

    解决在window下执行SQLSERVER定时备份的问题

    这篇文章主要介绍了在window下执行SQLSERVER的定时备份,文末给大家介绍了windows任务计划定时备份sqlserver数据库的相关知识,使用windows的任务计划新建一个sqlserver数据库的定时备份任务,需要的朋友可以参考下
    2022-01-01
  • SQL中的用户管理权限与用户详解

    SQL中的用户管理权限与用户详解

    这篇文章给大家介绍SQL中的用户管理权限与用户的相关操作,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-05-05
  • SQL Server 字段设自增的实现流程

    SQL Server 字段设自增的实现流程

    这篇文章主要介绍了SQL Server 字段设自增的实现方法,在本文中,我将先向你展示整个实现的流程,然后逐步解释每个步骤需要做什么,并提供相应的代码示例,需要的朋友可以参考下
    2023-12-12
  • SqlServer 索引自动优化工具

    SqlServer 索引自动优化工具

    前段接手了个优化项目,大概要求是对公司现有的1W多张表进行索引优化,完善现有的,剔除无效的索引
    2012-08-08
  • sql 函数大全 比较常用的一些函数整理

    sql 函数大全 比较常用的一些函数整理

    学习sqlserver的朋友,可以参考下,掌握这些函数可以方便的对字段的字符进行处理。
    2010-04-04

最新评论