2.3 KiB
2.3 KiB
Java 连接 SQL Server 报错 TLS10
问题描述
在使用 Java 8 连接 SQL Server 2008 或老版本时,出现报错:
The server selected protocol version TLS10 is not accepted by client preferences [TLS12]
原因:
- SQL Server 2008 只支持 TLS 1.0
- Java 8 默认禁用 TLS 1.0/1.1(从某个更新版本起)
- 导致 SSL/TLS 握手失败
解决方案
方法 1:修改 java.security 配置文件
- 打开文件:
<JDK_HOME>\jre\lib\security\java.security
- 找到以下行:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC, ...
- 删除
TLSv1、TLSv1.1,修改为:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, anon, NULL, \
include jdk.disabled.namedCurves
✅ 这样 JVM 启动后会允许 TLS 1.0,从而兼容 SQL Server 2008。
方法 2:在 JVM 启动参数中启用 TLS1.0(无需改文件)
-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2
用法示例:
- IDEA VM options:
-Dfile.encoding=UTF-8 -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2
- 命令行启动:
java -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2 -jar yourapp.jar
Navicat 连接 SQL Server 常见报错及解决方案
针对 Navicat 连接 SQL Server 2008/2008 R2 时可能出现的不同错误,整理成“错误 → 原因 → 解决”对照表,方便快速定位。
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
[08001] [ODBC Driver 17 for SQL Server] SQL Server Network Interfaces: Connection string is not valid [87] |
驱动不兼容老版本 SQL Server,连接格式不对 | 用 Native Client 10.0 驱动,填写正确服务器、端口、账号、数据库 |
[08001] [Microsoft][SQL Server Native Client 10.0] SQL Server 网络接口: 连接字符串无效 [87] |
服务器不可达或连接格式错误 | 地址格式应 192.168.1.100,1433(逗号分隔),确保 TCP/IP 启用,端口开放 |