You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl 5.6.1连接MS SQL Server 2019报SSL错误如何解决

问题背景

当前使用Perl 5.6.1版本(团队近期计划将其迁移至更高版本),现有Perl脚本可正常连接MS SQL Server 2014,但连接MS SQL Server 2019时失败抛出错误,需在Perl 5.6.1环境下解决该连接问题。

测试用Perl代码
use MSSQL::DBlib;
use MSSQL::Sqllib;

# 连接MS SQL Server 2014时语句正常执行,连接SQL Server 2019时抛出错误
$dbSession = eval{ sql_init('xx.xxx.xxx.xx,port no','user','password',"database") };
die "dbconnect.pl: Error at sql_init." if $@;

print "Db connected \n";

注:原测试代码中eval块内sql_init前多了一个多余的左括号,已修正,避免语法异常

报错信息
DB-Library error 10013,severity 11: DB-Library函数引用存在无效参数
DB-Library error 10004,severity 9: 无法连接:SQL Server不可用或不存在,发生SSL安全错误
OS error 772:Connection Open (SECDoClientHandshake())
故障根因

MSSQL::DBlib依赖传统DB-Library驱动(ntwdblib.dll),该老版本驱动默认仅支持TLS 1.0协议,而MS SQL Server 2019默认禁用TLS 1.0、TLS 1.1,仅开启TLS 1.2加密,老驱动无法完成TLS握手流程,同时老驱动不识别SQL Server 2019返回的高版本TDS协议字段,因此抛出参数无效、SSL连接错误。

可行解决方案(适配Perl 5.6.1环境,无需升级Perl版本)
  • 方案1:服务端临时开启低版本TLS支持(过渡方案)
    在SQL Server 2019所在服务器的SChannel配置中启用TLS 1.0支持,重启SQL Server服务后即可兼容老驱动连接。注意:TLS 1.0存在公开安全漏洞,该方案仅适合短期过渡使用,待Perl版本迁移完成后需及时关闭低版本TLS配置
  • 方案2:替换客户端DB-Library驱动文件
    获取对应架构(32位/64位,和你安装的Perl架构一致)、支持TLS 1.2的新版ntwdblib.dll文件,替换Perl安装路径bin目录下的旧版ntwdblib.dll,替换前备份原有文件,替换后无需修改业务代码即可正常连接。
  • 方案3:连接参数强制关闭加密
    在数据库连接逻辑中增加配置,强制关闭连接加密、信任服务端证书,跳过TLS握手校验环节。修改后的连接语句参考:
    $dbSession = eval{ sql_init('xx.xxx.xxx.xx,port no','user','password',"database", {
        'Encrypt' => 0,
        'TrustServerCertificate' => 1
    }) };
    
    该方案无需修改服务端配置,也无需替换驱动文件,仅需调整代码连接参数即可生效。

内容的提问来源于stack exchange,提问作者Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 03:18:29