如何通过DSN强制JDBC连接TLS1.0的SQL Server时禁用加密?
JDBC连接旧SQL Server强制禁用加密的解决方案
你遇到的问题是JDBC驱动的encrypt=false参数未生效,本质是新版JDBC驱动的默认行为或系统TLS配置覆盖了参数设置,以下是可行的解决办法:
1. 修正JDBC URL参数
除了encrypt=false,必须额外添加trustServerCertificate=true和disableEncryption=true(部分旧驱动依赖这个参数而非encrypt),完整URL示例:
jdbc:sqlserver://your-server:1433;databaseName=your-db;encrypt=false;trustServerCertificate=true;disableEncryption=true
2. 通过DSN配置强制禁用
如果使用DSN连接:
- 打开DSN配置界面,找到加密选项,直接选择「禁用」(Disable),不要选"可选"或"强制"
- 勾选「信任服务器证书」选项,避免证书验证报错
- 若DSN支持自定义属性,手动添加
disableEncryption=true到属性列表
3. 调整JVM TLS兼容参数(备选)
如果系统JVM默认禁用了TLS1.0,即使JDBC参数正确也会失败,启动应用时添加JVM参数允许TLS1.0:
-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2
注意:这是允许JVM使用旧TLS版本,若你要完全跳过加密,优先确保前两步的参数设置。
4. 降级JDBC驱动
新版mssql-jdbc驱动(10.0+)默认弃用TLS1.0,建议换成mssql-jdbc 6.4.0或更早版本,这些版本对旧加密配置的兼容性更好,encrypt=false参数能直接生效。
验证加密状态
连接成功后,执行以下SQL确认加密已禁用:
SELECT session_id, encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID;
返回的encrypt_option为FALSE即说明生效。
内容的提问来源于stack exchange,提问作者itzhaki
相关产品推荐
相关产品推荐

