IDEA / DataGrip 连接 SQL Server 提示“驱动程序无法通过 SSL 加密建立安全连接”的解决方法
🔍 问题描述
当你使用 IntelliJ IDEA 或 JetBrains DataGrip 连接 Microsoft SQL Server 数据库时,可能会遇到如下错误:
[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
错误: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]"
ClientConnectionId: 46f72084-baa1-4196-a3a5-3b222ff3b621
这个错误意味着:
- SQL Server 服务器 使用了较旧的加密协议(如 TLS 1.0)。
- IDEA / DataGrip 的 JDBC 客户端(基于 Java)默认只接受更安全的协议(TLS 1.2 或 TLS 1.3)。
- 双方无法协商出一个共同支持的安全协议版本,导致连接失败。
✅ 解决方案概览
| 方案 | 适用场景 | 安全性 | 推荐指数 |
|---|---|---|---|
| 1️⃣ 使用 jTDS 驱动连接 | 快速解决老系统连接问题 | ⚠️ 中等 | ⭐⭐⭐⭐⭐ |
| 2️⃣ 禁用 SSL 加密(测试环境) | 内网/本地开发快速连接 | ❌ 低 | ⭐⭐⭐⭐☆ |
| 3️⃣ 修改 JVM 参数支持 TLS 1.0 | 临时兼容旧服务器 | ⚠️ 中等 | ⭐⭐⭐☆☆ |
| 4️⃣ 升级 SQL Server 支持 TLS 1.2+ | 生产环境最佳实践 | ✅ 高 | ⭐⭐⭐⭐⭐ |
| 5️⃣ 更新 JDBC 驱动版本 | 提升兼容性与安全性 | ✅ 高 | ⭐⭐⭐⭐☆ |
🥇 方案一:使用 jTDS 驱动连接(最简单、最快捷)
推荐指数:★★★★★
适用场景:连接老旧 SQL Server 实例(如 2008 R2)、无法修改服务器配置、快速调试
💡 核心原理
IntelliJ IDEA 和 DataGrip 内置了两种 SQL Server 驱动:
- Microsoft JDBC Driver(官方驱动):安全性高,但对 TLS 协议要求严格。
- jTDS JDBC Driver(开源驱动):兼容性强,支持 TLS 1.0,能顺利连接老旧数据库。
由于 jTDS 对加密协议的要求较为宽松,它不会拒绝 TLS 1.0,因此可以成功建立连接。
✅ 操作步骤(以 DataGrip 为例)
-
打开数据库工具窗口:
- 菜单栏 →
View→Tool Windows→Database
- 菜单栏 →
-
添加新数据源:
- 点击
+→Data Source→ 选择Microsoft SQL Server (jTds)
- 点击
-
填写连接信息:
字段 示例值 说明 Host 192.168.1.100SQL Server 主机地址 Port 1433默认端口 Database MyDB要连接的数据库名 User sa或域账户登录用户名 Password ******密码 -
(可选)在
Advanced选项卡中设置 SSL 模式:- 找到
ssl参数,设置为:ssl = false:完全禁用加密ssl = allow:尝试加密,失败则降级ssl = require:强制加密(需服务器支持)
- 找到
-
点击
Test Connection,看到绿色对勾 ✔️ 即表示连接成功!

⚠️ 注意事项
| 项目 | 说明 |
|---|---|
| 🛑 jTDS 已停止维护 | 最后稳定版为 1.3.1(2013 年发布),不再更新 |
| 🔐 不支持新特性 | 不支持 Always Encrypted、JSON、列存储索引等 SQL Server 2014+ 功能 |
| 📦 功能有限 | 元数据查询、事务隔离级别支持不如官方驱动完善 |
| 🔄 未来兼容风险 | 若服务器升级 TLS 或启用强加密策略,可能再次失效 |
✅ 结论:jTDS 是一个优秀的“过渡方案”,适合快速解决问题,但不建议长期用于生产环境。
🥈 方案二:禁用 SSL 加密(适用于测试/内网环境)
推荐指数:★★★★☆
适用场景:本地开发、内网测试、临时调试
💡 核心原理
通过在连接参数中设置 encrypt=false,明确告诉 JDBC 驱动不要使用 SSL/TLS 加密,从而绕过协议协商失败的问题。
✅ 操作步骤
-
在 IDEA / DataGrip 中选择 Microsoft SQL Server(官方驱动)
-
在
Advanced选项卡中添加以下参数:encrypt = false或更完整地:
encrypt = false; trustServerCertificate = trueencrypt=false:禁用 SSL 加密trustServerCertificate=true:即使启用加密也自动信任证书(避免证书验证错误)
-
测试连接。
⚠️ 安全提醒
- ❌ 数据明文传输:所有 SQL 查询和结果在网络中以明文形式传输,易被窃听。
- 🔒 仅限可信网络:仅可在本地回环(localhost)、内网或防火墙保护的环境中使用。
- 🚫 禁止用于生产环境!
🥉 方案三:修改 JVM 参数支持 TLS 1.0(临时应急)
推荐指数:★★★☆☆
适用场景:必须使用官方驱动且无法更改服务器配置
💡 核心原理
Java 虚拟机(JVM)默认禁用了 TLS 1.0 和 1.1。我们可以通过启动参数强制客户端接受这些旧协议。
✅ 操作步骤
-
找到 DataGrip 的
vmoptions文件:- Windows:
<DataGrip安装目录>\bin\datagrip64.vmoptions - macOS:
~/Library/Application Support/JetBrains/DataGrip<版本>/datagrip.vmoptions - Linux:
~/.config/JetBrains/DataGrip<版本>/datagrip64.vmoptions
- Windows:
-
在文件末尾添加:
-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3或:
-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 -
保存并重启 DataGrip。
⚠️ 风险提示
- ⚠️ 降低安全性:TLS 1.0 存在已知漏洞(如 POODLE),已被 PCI-DSS 等标准禁用。
- 🧼 临时使用:建议仅作为短期过渡手段,尽快升级服务器。
🏅 方案四:升级 SQL Server 支持 TLS 1.2+(根本性解决方案)
推荐指数:★★★★★
适用场景:生产环境、安全合规要求高、长期维护系统
💡 核心原理
让服务器支持现代加密协议(TLS 1.2 或 1.3),与客户端达成安全协商,实现端到端加密通信。
✅ 实施步骤
1. 确认 SQL Server 版本支持
-
SQL Server 2012 及以上版本均支持 TLS 1.2。
-
查看版本命令:
SELECT @@VERSION;
2. 在 Windows 服务器上启用 TLS 1.2
- 下载并安装最新 Windows 更新。
- 安装 .NET Framework 安全更新。
- 使用工具 IISCrypto(https://www.nartac.com/IISCrypto):
- 启用 TLS 1.2(Client & Server)
- 禁用 SSL 2.0、SSL 3.0、TLS 1.0、TLS 1.1
- 选择安全的 Cipher Suites(如 AES 256)
- 重启服务器。
3. 验证 TLS 状态
-
使用 OpenSSL 测试:
openssl s_client -connect your-sql-server:1433 -tls1_2 -
或使用 PowerShell:
[System.Net.SecurityProtocolType]::Tls12
✅ 优点
- ✅ 安全合规(符合等保、GDPR、PCI-DSS)
- ✅ 性能更好(TLS 1.2+ 更高效)
- ✅ 兼容现代客户端
🥈 方案五:更新 JDBC 驱动版本
推荐指数:★★★★☆
适用场景:提升兼容性、修复已知 Bug
✅ 操作建议
-
前往官网下载最新 Microsoft JDBC Driver:
🔗 https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server -
当前最新稳定版为 JDBC Driver 12.4 for SQL Server(2024 年发布)
-
在 DataGrip 中替换驱动:
- 打开 Driver 设置(
Database→Driver) - 移除旧驱动 jar 包
- 添加新版本的
mssql-jdbc-12.4.x.jar - 重新测试连接
- 打开 Driver 设置(
📊 五种方案对比总结
| 方案 | 易用性 | 安全性 | 长期可用性 | 推荐场景 |
|---|---|---|---|---|
| 1. 使用 jTDS 驱动 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 快速连接老系统 |
| 2. 禁用 SSL | ⭐⭐⭐⭐☆ | ⭐ | ⭐ | 内网调试 |
| 3. 修改 JVM 参数 | ⭐⭐⭐☆☆ | ⭐⭐ | ⭐⭐ | 临时应急 |
| 4. 升级服务器 TLS | ⭐⭐☆☆☆ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 生产环境 |
| 5. 更新 JDBC 驱动 | ⭐⭐⭐☆☆ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 日常维护 |
📌 最佳实践建议
| 场景 | 推荐做法 |
|---|---|
| 本地开发 / 内网测试 | 使用 jTDS 或 encrypt=false 快速连接 |
| 生产环境部署 | 必须启用 TLS 1.2+,使用官方驱动 |
| 老旧系统迁移中 | 先用 jTDS 连通,逐步升级服务器 |
| 安全审计要求高 | 禁用 TLS 1.0/1.1,启用证书验证 |
🧪 附:验证连接状态的 SQL 查询
连接成功后,可通过以下 SQL 查看当前会话的加密状态:
SELECT session_id,encrypt_option,auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
encrypt_option = TRUE表示连接已加密auth_scheme = NTLM或KERBEROS表示认证方式
