SQL Server驅(qū)動(dòng)和TLS版本不兼容的原因分析和解決方案
一、問題描述
聲明:java程序是docker容器化部署的 進(jìn)行期初數(shù)據(jù)定時(shí)同步功能,sql server同步至mysql中,本地調(diào)用正常,發(fā)到服務(wù)器環(huán)境就會(huì)報(bào)錯(cuò)如下

- 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:
配置文件如下:
# 動(dòng)態(tài)數(shù)據(jù)源配置
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驅(qū)動(dòng) -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
二、原因分析:
這是一個(gè)Java安全配置相關(guān)的信息輸出,通常是在啟動(dòng)應(yīng)用或檢查SSL配置時(shí)出現(xiàn)的。
通過異常信息可以看出
- Java安全文件路徑:
/usr/local/openjdk-8/jre/lib/security - Java版本:
OpenJDK 8 - 顯示TLS/SSL支持的協(xié)議版本:
SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
檢測到當(dāng)前數(shù)據(jù)庫使用的協(xié)商使用的是 TLSv1 協(xié)議,而項(xiàng)目中使用的時(shí)jdk8,它的協(xié)議版本高,不兼容 TLSv1 協(xié)議。
不能改其他項(xiàng)目的數(shù)據(jù)庫的版本,則更改jdk安全配置文件java.security。
三、解決方案
3.1 服務(wù)器本地解決方案
修改java.security文件
放寬TLS/SSL的安全限制,解決某些老系統(tǒng)或內(nèi)部系統(tǒng)連接時(shí)的兼容性問題
# 移除了 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容器部署解決方案
因?yàn)槊看蜫enkins部署,都會(huì)根據(jù)Dockerfile生成新的鏡像和啟動(dòng)容器,修改需要修改容器內(nèi)的安全文件,不可能每次發(fā)版都改所以修改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/原內(nèi)容/新內(nèi)容/: 替換命令
^jdk.tls.disabledAlgorithms=.*: 匹配以"jdk.tls.disabledAlgorithms="開頭的整行
到此這篇關(guān)于SQL Server驅(qū)動(dòng)和TLS版本不兼容的原因分析和解決方案的文章就介紹到這了,更多相關(guān)SQL Server驅(qū)動(dòng)和TLS版本不兼容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 驅(qū)動(dòng)程序無法通過使用安全套接字層(SSL)加密與?SQL?Server?建立安全連接,錯(cuò)誤:“The?server?selected?protocol?version?TLS10?is?not?accepted?by?client
- Navicat連接SQL server出現(xiàn):[IM002] [Microsoft][ODBC 驅(qū)動(dòng)程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認(rèn)驅(qū)動(dòng)程序(0)的解決方法
- Mysql和SQLServer驅(qū)動(dòng)連接的實(shí)現(xiàn)步驟
- 使用sqlserver官方驅(qū)動(dòng)包調(diào)用存儲(chǔ)過程遇到的坑及解決方法
- 由于系統(tǒng)錯(cuò)誤 126 (SQL Server),指定驅(qū)動(dòng)程序無法加載
相關(guān)文章
SQL?Server?異地?cái)?shù)據(jù)庫每日同步作業(yè)操作圖文詳解
最近因?yàn)榻?jīng)常有攻擊,所以考慮到網(wǎng)站的安全問題,所以多弄了幾臺(tái)服務(wù)器并實(shí)現(xiàn)數(shù)據(jù)庫與文件每天同步,這里主要介紹了sqlserver數(shù)據(jù)的每天同步問題2024-04-04
ODBC連接數(shù)據(jù)庫以SQLserver為例圖文詳解
開放數(shù)據(jù)庫互連(ODBC)是微軟提出的數(shù)據(jù)庫訪問接口標(biāo)準(zhǔn),開放數(shù)據(jù)庫互連定義了訪問數(shù)據(jù)庫的API一個(gè)規(guī)范,這些API獨(dú)立于不同廠商的DBMS,也獨(dú)立于具體的編程語言,下面這篇文章主要給大家介紹了關(guān)于ODBC連接數(shù)據(jù)庫以SQLserver為例的相關(guān)資料,需要的朋友可以參考下2023-05-05
將sqlserver數(shù)據(jù)遷移到mysql的詳細(xì)步驟記錄
這篇文章主要介紹了將SQL?Server數(shù)據(jù)遷移到MySQL的步驟,包括導(dǎo)出數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)格式和導(dǎo)入數(shù)據(jù),通過示例和工具說明,幫助大家順利完成遷移任務(wù),需要的朋友可以參考下2025-01-01
SQL Server使用PIVOT與unPIVOT實(shí)現(xiàn)行列轉(zhuǎn)換
這篇文章介紹了SQL Server使用PIVOT與unPIVOT實(shí)現(xiàn)行列轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
解決在window下執(zhí)行SQLSERVER定時(shí)備份的問題
這篇文章主要介紹了在window下執(zhí)行SQLSERVER的定時(shí)備份,文末給大家介紹了windows任務(wù)計(jì)劃定時(shí)備份sqlserver數(shù)據(jù)庫的相關(guān)知識(shí),使用windows的任務(wù)計(jì)劃新建一個(gè)sqlserver數(shù)據(jù)庫的定時(shí)備份任務(wù),需要的朋友可以參考下2022-01-01
SQL?Server?字段設(shè)自增的實(shí)現(xiàn)流程
這篇文章主要介紹了SQL?Server?字段設(shè)自增的實(shí)現(xiàn)方法,在本文中,我將先向你展示整個(gè)實(shí)現(xiàn)的流程,然后逐步解釋每個(gè)步驟需要做什么,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2023-12-12
sql 函數(shù)大全 比較常用的一些函數(shù)整理
學(xué)習(xí)sqlserver的朋友,可以參考下,掌握這些函數(shù)可以方便的對(duì)字段的字符進(jìn)行處理。2010-04-04

